SASのマクロとマクロ変数のサンプルです。
目次
サンプル | マクロ |
マクロに引数がある場合 | |
マクロ変数(LETステートメント) |
マクロ
%macro マクロ名 [(引数,...)]; 処理 %mend マクロ名; |
- マクロは、%macro~が開始で%mend~が終了です。
- %マクロ名;でマクロを実行します。
- 引数を渡して処理させることもできます。引数の省略は可能です。
- 以下は、SASのマクロを使用したSASコードの生成のリンクです。
https://support.sas.com/documentation/cdl_alternate/ja/mcrolref/67912/HTML/default/n0pfmkjlc3e719n1lks4go8ke61r.htm
以下は、マクロで文字列を出力するサンプルです。
%macro test1;
テストです
%mend test1;
DATA _NULL_;
put "これは%test1"; /* これはテストです */
run;
1行目から3行目までがtest1というマクロです。
5行目の「_null_」は、データステップのみ実行する場合に使用します。
7行目は、文字列とマクロ名がダブルコーテーションで括られています。
マクロ名の前に%を指定します。2行目の文字列が出力されます。
マクロに引数がある場合
マクロに引数がある場合のサンプルです。
%macro test1(num1,num2);
%put %eval(&num1 + &num2);/* 1200が出力される */
%mend test1;
DATA _NULL_;
%test1(1000,200);
run;
1行目から3行目までがtest1というマクロです。
2行目は、2つの引数を受け取って足し算を行い値を出力します。変数の前にアンパサンド(&)を指定します。
7行目は、1行目のマクロを引数付きで実行します。
マクロ変数(LETステートメント)
%let 変数名 = 値 |
letステートメントのマクロ変数のサンプルです。
変数の値を囲まない
%let test1=テスト1です;
DATA _NULL_;
put "&test1"; /* テスト1です */
put "これは&test1"; /* これはテスト1です */
/* put &test1; <<< これはエラーになる */
run;
1行目は、letステートメントでマクロ変数を定義しています。
値をダブルコーテション等で囲っていません。
5行目は、マクロ変数を出力しています。
7行目は、文字列とマクロ変数をダブルコーテーションで括っています。連結して出力します。
マクロ変数の利用時はアンパサンド(&)を使用します。
9行目は、マクロ変数をダブルコーテーションで括っていません。このケースはエラーになります。
変数の値をダブルコーテーションでくくる
%let test1="テスト1です";
DATA _NULL_;
put &test1; /* テスト1です */
/* put "&test1"; <<< これはエラーになる */
run;
1行目は、letステートメントでマクロ変数を定義しています。
値をダブルコーテションで囲っています。
5行目は、マクロ変数を出力しています。ダブルコーテションで括っていません。
7行目は、マクロ変数をダブルコーテーションで括っています。このケースはエラーになります。
変数の値をシングルコーテーションでくくる
%let test1='テスト1です';
DATA _NULL_;
put &test1; /* テスト1です */
put "&test1"; /* 'テスト1です' */
put "これは&test1"; /* これは'テスト1です' */
put 'これは&test1'; /* これは&test1 */
run;
1行目は、letステートメントでマクロ変数を定義しています。
値をシングルコーテションで囲っています。
5行目は、マクロ変数を出力しています。ダブルコーテションで括っていません。
7,9行目は、文字列にシングルコーテションがつきます。
11行目の&test1は文字列としてそのまま出力されます。
関連の記事