2014年7月14日月曜日

SQLプロシジャ:値をマクロ変数に格納するINTO句の小技


まずは基本的なところから。

* サンプルデータ ;
data DT1;
input A$;
cards;
AA
BB
CC
;

 AA 
 BB
 CC


上記変数Aの値をマクロ変数に入れたい場合、SQLプロシジャを使うと以下のように書きます。

* マクロ変数に格納 ;
proc sql noprint;
  select A  into :A1 - :A3
  from DT1;
quit;

* マクロ変数値をログに出力 ;
%put &A1;
%put &A2;
%put &A3;

ログ
AA
BB
CC


データセットの1行目の値を&A1に、2行目を&A2に、3行目を&A3に入れてます。
もしレコードが100行あったら「:A1 - :A100」と書けば&A1~&A100に各レコードの値が入ります。


そしてSAS9.3からの新機能。

proc sql noprint;
  select A  into :A1 -
  from DT1;
quit;

これだけで&A1, &A2, &A3…というようにレコードの数だけ勝手にマクロ変数を作ってくれます。



📝以下、落とし穴についての記事も要確認!

・数値をマクロ変数に格納すると丸められる可能性がある
・フォーマットが割り当てられた変数だと、フォーマットを当てた値がマクロ変数に格納される。

SQLプロシジャのINTO句で、前方に余計な半角スペースが入る場合がある。
・余計な半角スペースが入ってしまう場合の小技を紹介してます


0 件のコメント:

コメントを投稿