2016年5月9日月曜日

マクロで 【%LET Y=%X】 みたいな書き方


あんまりやらない書き方かもしれないですが、覚えとくと役に立つと思います。


例①

%macro X;
   aaa
%mend;

%let Y = %X;

上のプログラムで、マクロ変数Yに入る値はなんでしょうか?

答え
%put &Y;

ログ
aaa

これは分かり易いと思います。


例②

%macro X;

   %local A B C;
   %let A=aaa;
   %let B=bbb;
   %let C=&A&B;

   &C

%mend;

%let Y = %X;

マクロ変数Yに入る値はなんでしょうか?

答え
%put &Y;

ログ
aaabbb

マクロ変数AとBをくっけた値「aaabbb」が返されます。
プログラム青字部分が加工フェーズ、赤字部分が展開フェーズ、みたいな構造になっています。


細かい動きは、マクロプロセッサというものを理解する必要があって、
詳しくはリファレンスを見ていただきたいのですが、

マクロ中の %LOCAL, %GLOBAL, %LET の文は、マクロプロセッサが絡むおかげで今回のような書き方が出来ると思ってください。
なので、マクロプロセッサの手中におさめられないような処理(データステップやプロシジャ等)を含めてしまうと、今回の「%let Y=%X」みたいな使用方法は出来なくなります。


この動きを理解することで、今回のような関数みたいなマクロを作ることが出来ます。


0 件のコメント:

コメントを投稿