Shingoの数学ノート

プログラミングと機械学習のメモ

SASで数値変数名、文字変数名を取得

日付:    カテゴリ: SAS


SASで数値変数名と文字変数名を取得したいことってありませんか?自分はよくあります。sgplotとか使おうとすると、_numeric_や_character_が使用できないので、全ての数値変数でグラフを描くことは難しいです。

そこで、今回は数値変数名を取得するSASコードを紹介します。


マクロ変数に数値変数名を格納する

例えば、irisデータの数値変数名をマクロ変数に格納することを考えます。

実は、変数の情報はSASHELPのVCOLUMNというSASデータセットに入っています。これを使用すると数値変数名を取得することができます。


options mprint;
data iris;
  set sashelp.iris;
run;
/* work.irisの数値変数名をcol1からcolnに格納*/
data _null_;
  set SASHELP.VCOLUMN end=eof;
  where libname="WORK" and memname="IRIS" and type="num";
  count_num=put(_n_, 8. -L);
  call symputx(cat("col", count_num), name);
  if eof then
    call symputx("n", count_num);
run;

%put _user_;

ログ(一部抜粋)

88         %put _user_;
 GLOBAL CLIENTMACHINE 10.0.2.2
 GLOBAL COL1 SepalLength
 GLOBAL COL2 SepalWidth
 GLOBAL COL3 PetalLength
 GLOBAL COL4 PetalWidth
 GLOBAL GRAPHINIT  
 GLOBAL GRAPHTERM  
 GLOBAL N 4

col1からcol4に数値変数名が格納されていることがわかると思います。where分のところにはlibnameにライブラリ名、memnameにテーブル名、typeにnumかcharを入れましょう(charを指定すると文字変数を取得できます)。このとき、ライブラリ名とテーブル名は必ず大文字で書くようにしてください。


このマクロ変数を使えば、たとえばSpeciesごとの全てのヒストグラムを描くことも可能になります。

/* 数値変数全体でSpeciesで色分けされたヒストグラムを描く。 */
%macro histograms();
  %do i=1 %to &N.;
    proc sgplot data=iris;
      histogram &&col&i.. /group=Species;
    run;
  %end;
%mend;
%histograms

ぜひ試してみてください!

Comment Box is loading comments...