Home>
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...