マクロに「キーワードパラメータ」というものを設定する方法を紹介します。
マクロの登録
%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 に上書きして実行。
という動きをします。
2. マクロの登録と実行
3. 定位置パラメータ
4. キーワードパラメータ
5. クォート処理
6. クォート処理2
7. ループ処理
8. 条件分岐処理
9. ドット
10. &&
11. 演算評価
12. 補足
0 件のコメント:
コメントを投稿