Shingoの数学ノート

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

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

日付:    カテゴリ: SAS


以前の記事でSASの変数をマクロに格納する方法を書きましたが、今回はsqlでやってみようと思います。


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

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

sqlでは、dictionary.tablesを使用します。これはSASHELP.VCOLUMNSと同じものです。


proc sql noprint;
  select put(count(*),8. -L) into:n from dictionary.columns
    where libname="SASHELP" and memname="IRIS" and type="num" ;
  select name into:col1-:col&n. from dictionary.columns
    where libname="SASHELP" and memname="IRIS" and type="num";
quit;
%put _user_;

ログ(一部抜粋)

 GLOBAL COL1 SepalLength
 GLOBAL COL2 SepalWidth
 GLOBAL COL3 PetalLength
 GLOBAL COL4 PetalWidth

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


また、separated byを使用することで、指定の区切り文字で繋げた変数をマクロ変数化できます。

proc sql noprint;
  select name into:a separated by "," from dictionary.columns 
    where libname="SASHELP" and memname="IRIS" and type="num";
quit;
%put &a.;

ログ(一部抜粋)

 SepalLength,SepalWidth,PetalLength,PetalWidth


Comment Box is loading comments...