プログラミングと機械学習のメモ
日付: カテゴリ: 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