ローカルマクロ変数
ローカルマクロ変数は、個別のマクロ内で定義されます。呼び出されたマクロは、それぞれ専用のローカルシンボルテーブルを作成します。ローカルマクロ変数は、特定のマクロが実行されている間だけ存在します。マクロの実行が停止すると、そのマクロのすべてのローカルマクロ変数は存在しなくなります。
次のコードに、次のプログラムの実行中に作成されるローカルシンボルテーブルを示します。
%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 マクロ関数を参照してください。