2016年5月11日水曜日

マクロ言語入門2:マクロの登録と実行【%MACRO、%MEND】





データセットあるいは変数を変えて同じような処理を繰り返し実行したい場合、マクロを使うと便利です。
まずは基本構文から触れてみましょう。




基本構文



マクロの登録
%MACRO  マクロ名;

   ~プログラム~

%MEND;

  • 同名のマクロを同じ場所(カタログ)に複数作成することは出来ないので注意(上書きされる)
  • 「%MACRO」~「%MEND;」の中にマクロとして登録したいプログラムを書きます。



マクロの実行
%マクロ名

  • 登録したマクロを「%マクロ名」で実行する事が出来ます。
  • 実行時、「このマクロ名はNG」「このステートメントはマクロではNG」などのマクロのルールに違反している旨のログメッセージがないかも要確認です。




例①

*** マクロの登録 ;
%macro TEST;
   proc print data=SASHELP.CLASS;
   run;
%mend;

PRINTプロシジャでデータセットSASHELP.CLASSを出力するマクロTESTを登録しています。
このプログラムでマクロTESTは登録されますが、まだマクロの中身のプログラムは実行されません。



* マクロの実行 ;
%TEST;

マクロTESTを実行。
これにより先に登録しておいたマクロTESTの中身のプログラムが実行されます。


ちなみに、マクロの中にマクロを入れ込む事も出来ます。詳細は以下記事を参照ください。
マクロ実行文をログに展開するMPRINTとMPRINTNEST




例②

*** マクロ登録 ;
%macro TEST;
   proc print data=&DS;
   run;
%mend;

*** マクロ実行 ;
%let DS = SASHELP.CLASS;
%TEST;

%let DS = SASHELP.IRIS;
%TEST;

PRINTプロシジャでデータセットを出力するマクロTESTを登録。
「proc print data=&DS」 というように出力対象のデータセットを 「&DS」 とマクロ変数化しています。

これにより、以下のように%LETステートメントで出力するデータセットを変更しながらマクロを繰り返し実行することが出来ます。

%let DS = 出力対象のデータセット;
%TEST;






0 件のコメント:

コメントを投稿