Shingoの数学ノート

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

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

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

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

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

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

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

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ごとの全てのヒストグラムを描くことも可能になります。

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

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

Comments

Loading comments...