2016年5月13日金曜日

マクロ言語入門4:パラメータの設定【キーワードパラメータ】



マクロに「キーワードパラメータ」というものを設定する方法を紹介します。





基本構文


マクロの登録
%MACRO  マクロ名( マクロ変数1=, マクロ変数2= ・・・ );

   ~プログラム~

%MEND;

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




上記「マクロ名」のカッコ内に列挙したマクロ変数に対し、以下のように値を設定してマクロを実行します。

マクロの実行
%マクロ名( マクロ変数1=値, マクロ変数2=値 ・・・ )

  • マクロ変数に設定する値の両端に半角スペースを入れても、それらスペースはマクロ変数に含められません(別記事で解説する%STR関数を使用して含めることも可)
  • また、実行時「このマクロ名はNG」「このステートメントはマクロではNG」などのマクロのルールに違反している旨のログメッセージがないかも要確認です。




簡単な例

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

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


最終的に以下のプログラムが展開・実行されます。
proc print data=SASHELP.CLASS;
run;




パラメータに初期値を与える

*** マクロ登録 ;
%macro TEST( DS=SASHELP.CLASS );
     proc print data=&DS;
     run;
%mend;

*** マクロ実行 ;

%TEST();
%TEST(DS=SASHELP.IRIS);
%TEST(DS=SASHELP.RETAIL);



%macro TEST( DS=SASHELP.CLASS )」 で TESTマクロのマクロ変数DSに SASHELP.CLASS という初期値を与えています。


よってこのマクロを実行する際、

  • %TEST()」 でマクロ変数DS への値を指定しないと初期値 SASHELP.CLASS が使われて実行。
  • %TEST(DS=SASHELP.IRIS)」 でマクロ変数DS の値を SASHELP.IRIS に上書きして実行。
  • %TEST(DS=SASHELP.RETAIL)」 でマクロ変数DS の値を SASHELP.RETAIL に上書きして実行。

という動きをします。




記事一覧

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


0 件のコメント:

コメントを投稿