次のコードは、次のプログラムの実行中に作成されるグローバルシンボルテーブルを示しています。
%let county=Clark;
%macro concat;
data _null_;
length longname $20;
longname="&county"||" County";
put longname;
run;
%mend concat;
%concat
マクロCONCATを呼び出すと、次のステートメントが生成されます。
data _null_;
length longname $20;
longname="Clark"||" County";
put longname;
run;
PUTステートメントは、次をSASログに書き込みます。
Clark County
グローバルマクロ変数には、次のものがあります。
-
SYSPBUFF以外のすべての自動マクロ変数。SYSPBUFFなどの自動マクロ変数の詳細については、
自動マクロ変数を参照してください。
-
-
%GLOBALステートメントで作成されたマクロ変数。%%GLOBALステートメントの詳細については、
グローバルマクロ変数の作成を参照してください。
-
SASセッションまたはSASジョブが存続する間は、いつでもグローバルマクロ変数を作成できます。SASセッションまたはSASジョブが存続する間は、一部の自動マクロ変数を除き、いつでもグローバルマクロ変数の値を変更できます。
ほとんどの場合、グローバルマクロ変数を定義したら、SASセッションまたはSASジョブのどの場所でも、その値を参照したり、変更したりできます。そのため、マクロ定義の内部で参照されるマクロ変数は、それと同じ名前のグローバルマクロ変数がすでに存在する場合、グローバルです。このアクションは、その変数が%LOCALステートメントを使用して、またはパラメータリストでローカルとして特に定義されていないことを前提とします。新しいマクロ変数を定義した場合、既存のグローバルマクロ変数は単に更新されます。グローバルマクロ変数の値を参照できない、次のような例外があります。
-
マクロ変数が、グローバルシンボルテーブルとローカルシンボルテーブルの両方に存在する場合、そのローカルマクロ変数を含むマクロからは、グローバルの値を参照できません。この場合、マクロプロセッサは、グローバルの値ではなく、ローカルの値を最初に検出して使用します。
-
マクロ変数をSYMPUTルーチンを使用してDATAステップ内で作成した場合、プログラムがステップ境界に達するまでは、アンパサンドを使用して値を参照することはできません。マクロ処理とステップ境界の詳細については、
マクロ処理を参照してください。
%GLOBALステートメントのREADONLYオプションを使うと、読み込み専用のグローバルマクロ変数を作成して、それに特定の値を割り当てることができます。既存のマクロ変数は読み込み専用にはできません。ローカルマクロ変数の値を変更することはできませんし、変数を削除することもできません。すべての読み込み専用マクロ変数は、存在しているスコープが削除されるまでは保持されます。詳細については、
%GLOBALステートメントを参照してください。
%SYMGLOBL関数を使用して、既存のマクロ変数がグローバルシンボルテーブルに存在するかどうかを表示できます。詳細については、
%SYMGLOBL関数を参照してください。