2016年5月10日火曜日

マクロ言語入門1:マクロ変数とは【%LET】



マクロの入門記事を書いていきます。まずは基本の「マクロ変数」について解説。





マクロ変数とは?


以下のプログラムを見てください。

proc print data=SASHELP.CLASS;
run;

proc means data=SASHELP.CLASS;
run;

proc contents data=SASHELP.CLASS;
run;


データセットSASHELP.CLASSに対して、PRINT, MEANS, CONTENTSプロシジャを実行しています。
ここで 「SASHELP.CLASS」 を何回も書くのが面倒なのでマクロ変数を使って以下のように書き換えてみます。

%let DS = SASHELP.CLASS ;

proc print data=&DS;
run;

proc means data=&DS;
run;

proc contents data=&DS;
run;



解説
%let DS = SASHELP.CLASS ;

「DS」という名前で定義した入れ物に「SASHELP.CLASS」という値を入れています。
この入れ物を 「マクロ変数」 と呼びます。


マクロ変数に値を設定する構文は「%LET マクロ変数 = 格納値;」となっていて、

  • このステートメントで格納値の両端に半角スペースを入れても、それらスペースはマクロ変数に含められない(別記事で解説する%STR関数を使用して含めることも可)
  • SAS側で定義している「自動マクロ変数」というものもあって、それらと同じ名前のマクロ変数を定義しないよう注意(どんな自動マクロ変数があるかはリファレンスを参照)
  • 格納値に入れると挙動が変わってしまうマクロ特有の文字(&,%等)が存在。マクロを理解するとその辺りも分かってくると思います。


proc print data=&DS;
run;

プログラム中で 「&DS」 というように&をくっつけたものはマクロ変数として解釈されます。
よって「proc print data=&DS;」は「proc print data=SASHELP.CLASS;」に置き換えて実行されます。




マクロ変数を使う利点


便利なのが、対象のデータセットをSASHELP.IRISに変えて再実行したい場合、先頭のプログラムを変えるだけで済みます。

%let DS = SASHELP.IRIS ;

proc print data=&DS;
run;

proc means data=&DS;
run;

proc contents data=&DS;
run;




マクロ変数値の確認方法


%PUT &マクロ変数名;」 でマクロ変数値をログに出力する事が出来ます。

%let DS = SASHELP.IRIS ;
%put &DS;

ログ
SASHELP.IRIS





記事一覧

1. マクロ変数とは
2. マクロの登録と実行
3. 定位置パラメータ
4. キーワードパラメータ
5. クォート処理
6. クォート処理2
7. ループ処理
8. 条件分岐処理
9. ドット
10. &&
11. 演算評価
12. 補足

0 件のコメント:

コメントを投稿