ローカルマクロ変数は、個々のマクロ内で定義されます。呼び出されたマクロは、それぞれ専用のローカルシンボルテーブルを作成します。ローカルマクロ変数は、特定のマクロが実行されている間だけ存在します。マクロの実行が停止すると、そのマクロのすべてのローカルマクロ変数は存在しなくなります。
次のコードに、次のプログラムの実行中に作成されるローカルシンボルテーブルを示します。
%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:Warning:Apparent symbolic reference DATE not resolved.*** &holiday occurs on &day, &date, 2012.***
このログから分かるように、ローカルマクロ変数DAY、DATE、とHOLIDAYはマクロ内で置換されています。しかし、マクロの外部では、それらの変数が存在しないため置換されていません。
マクロのローカルシンボルテーブルは、マクロによって少なくとも1つのマクロ変数が作成されるまでは、空です。ローカルシンボルテーブルは、次のいずれかによって作成できます。
-
-
-
%LETステートメントや反復する%DOステートメントなどの、マクロ変数を定義するマクロステートメント(ただし、その変数がまだグローバルとして存在しないか、その変数に対して%GLOBALステートメントが使用されていない場合)
注: マクロパラメータは、それが定義されているマクロに対して常にローカルです。マクロパラメータをグローバルにすることはできません。(ただし、パラメータの値をグローバル変数に割り当てることはできます。詳細については、
ローカル変数の値に基づくグローバル変数の作成を参照してください。)
あるマクロを別のマクロの内部で呼び出すと、ネストされたスコープが作成されます。ネストされるマクロのレベル数に制限はないため、プログラムには、任意のレベル数でネストされたスコープを含めることができます。
%LOCALステートメントのREADONLYオプションを使うと、読み込み専用のローカルマクロ変数を作成して、それに特定の値を割り当てることができます。既存のマクロ変数は読み込み専用にはできません。ローカルマクロ変数の値を変更することはできませんし、変数を削除することもできません。すべての読み込み専用マクロ変数は、存在しているスコープが削除されるまでは保持されます。詳細については、
%LOCALステートメントを参照してください。
%SYMLOCAL関数を使用して、既存のマクロ変数がローカルシンボルテーブル内に存在するかどうかを表示できます。詳細については、
%SYMLOCAL関数を参照してください。