SAS マクロとマクロ変数のサンプル

SASのマクロとマクロ変数のサンプルです。

目次

サンプル マクロ
  マクロに引数がある場合
  マクロ変数(LETステートメント)

マクロ

%macro マクロ名 [(引数,...)];
  処理
%mend マクロ名;

以下は、マクロで文字列を出力するサンプルです。

%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は文字列としてそのまま出力されます。

関連の記事

SAS if文のサンプル
SAS ループ文のサンプル(do)

△上に戻る