前のページ|次のページ

グローバルマクロ変数

次のコードは、次のプログラムの実行中に作成されるグローバルシンボルテーブルを示しています。
%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
グローバルシンボルテーブル
グローバルマクロ変数
グローバルマクロ変数には、次のものがあります。
SASセッションまたはSASジョブが存続する間は、いつでもグローバルマクロ変数を作成できます。SASセッションまたはSASジョブが存続する間は、一部の自動マクロ変数を除き、いつでもグローバルマクロ変数の値を変更できます。
ほとんどの場合、グローバルマクロ変数を定義したら、SASセッションまたはSASジョブのどの場所でも、その値を参照したり、変更したりできます。そのため、マクロ定義の内部で参照されるマクロ変数は、それと同じ名前のグローバルマクロ変数がすでに存在する場合、グローバルです。このアクションは、その変数が%LOCALステートメントを使用して、またはパラメータリストでローカルとして特に定義されていないことを前提とします。新しいマクロ変数を定義した場合、既存のグローバルマクロ変数は単に更新されます。グローバルマクロ変数の値を参照できない、次のような例外があります。
  • マクロ変数が、グローバルシンボルテーブルとローカルシンボルテーブルの両方に存在する場合、そのローカルマクロ変数を含むマクロからは、グローバルの値を参照できません。この場合、マクロプロセッサは、グローバルの値ではなく、ローカルの値を最初に検出して使用します。
  • マクロ変数をSYMPUTルーチンを使用してDATAステップ内で作成した場合、プログラムがステップ境界に達するまでは、アンパサンドを使用して値を参照することはできません。マクロ処理とステップ境界の詳細については、マクロ処理を参照してください。
%GLOBALステートメントのREADONLYオプションを使うと、読み込み専用のグローバルマクロ変数を作成して、それに特定の値を割り当てることができます。既存のマクロ変数は読み込み専用にはできません。ローカルマクロ変数の値を変更することはできませんし、変数を削除することもできません。すべての読み込み専用マクロ変数は、存在しているスコープが削除されるまでは保持されます。詳細については、%GLOBALステートメントを参照してください。
%SYMGLOBL関数を使用して、既存のマクロ変数がグローバルシンボルテーブルに存在するかどうかを表示できます。詳細については、%SYMGLOBL関数を参照してください。
前のページ|次のページ|ページの先頭へ