ローカルマクロ変数

ローカルマクロ変数は、個別のマクロ内で定義されます。呼び出されたマクロは、それぞれ専用のローカルシンボルテーブルを作成します。ローカルマクロ変数は、特定のマクロが実行されている間だけ存在します。マクロの実行が停止すると、そのマクロのすべてのローカルマクロ変数は存在しなくなります。

次のコードに、次のプログラムの実行中に作成されるローカルシンボルテーブルを示します。

%macro holinfo(day,date);
   %let holiday=Christmas;
   %put *** Inside macro: ***;
   %put *** &holiday occurs on &day, &date, 2012. ***;
%mend holinfo;

%holinfo(Tuesday,12/25)

%put *** Outside macro: ***;
%put *** &holiday occurs on &day, &date, 2012. ***;

%PUTステートメントは、次をSASログに書き込みます。

*** Inside macro: ***
*** Christmas occurs on Tuesday, 12/25, 2012.***
66
67   %put *** Outside macro: ***;
*** Outside macro: ***
68   %put *** &holiday occurs on &day, &date, 2012.***;
WARNING: Apparent symbolic reference HOLIDAY not resolved.
WARNING: Apparent symbolic reference DAY not resolved.
WARNING: Apparent symbolic reference DATE not resolved.
*** &holiday occurs on &day, &date, 2012.***

このログから分かるように、ローカルマクロ変数DAY、DATE、とHOLIDAYはマクロ内で解決されています。しかし、マクロの外部では、それらの変数が存在しないため解決されていません。

ローカルシンボルテーブル
ローカルマクロ変数

マクロのローカルシンボルテーブルは、マクロによって少なくとも1つのマクロ変数が作成されるまでは、空です。ローカルシンボルテーブルは、次のいずれかによって作成できます。

  • 1つ以上のマクロパラメーターの存在
  • %LOCALステートメント
  • %LETステートメントや反復する%DOステートメントなどの、マクロ変数を定義するマクロステートメント(ただし、その変数がまだグローバルとして存在しないか、その変数に対して%GLOBALステートメントが使用されていない場合)
注: マクロパラメーターは、それが定義されているマクロに対して常にローカルです。マクロパラメーターをグローバルにすることはできません(ただし、パラメーターの値をグローバル変数に割り当てることはできます。詳細については、ローカル変数の値に基づくグローバル変数の作成を参照してください。)

あるマクロを別のマクロの内部で呼び出すと、ネストされたスコープが作成されます。ネストされるマクロのレベル数に制限はないため、プログラムには、任意のレベル数でネストされたスコープを含めることができます。

%LOCALステートメントのREADONLYオプションを使うと、読み取り専用のローカルマクロ変数を作成して、それに特定の値を割り当てることができます。既存のマクロ変数は読み取り専用にはできません。ローカルマクロ変数の値を変更することはできませんし、変数を削除することもできません。すべての読み取り専用マクロ変数は、存在しているスコープが削除されるまでは保持されます。詳細については、%LOCAL マクロステートメントを参照してください。

%SYMLOCAL関数を使用して、既存のマクロ変数がローカルシンボルテーブル内に存在するかどうかを表示できます。詳細については、%SYMLOCAL マクロ関数を参照してください。

最終更新: 2026年4月14日