マクロ変数は、シンボリック置換によってSASプログラム内のテキストを動的に変更可能にするツールです。大量または少量のテキストをマクロ変数に割り当てることができます。その後、テキストが格納された変数を参照するだけで、そのテキストを使用できます。
マクロ変数値の最大長は、65,534文字です。マクロ変数の長さは、特定の長さの宣言によってではなく、割り当てられたテキストによって決まります。そのため、マクロ変数の長さは、格納される値によって変わります。マクロ変数には文字データのみが含まれます。ただし、マクロ機能には、数値として解釈できる文字データが格納された場合に変数を数値として評価できる機能が備わっています。マクロ変数の値は、特に変更しない限り変わりません。マクロ変数は、SASデータセット変数とは無関係です。
注: マクロ変数には、印刷可能な文字のみを割り当ててください。印刷できない値をマクロ変数に割り当てると、予測できない結果を招く恐れがあります。
マクロプログラマーが定義したマクロ変数は、ユーザー定義のマクロ変数と呼ばれます。マクロプロセッサが定義したマクロ変数は、自動マクロ変数と呼ばれます。データ行内を除くSASプログラム内の任意の場所で、マクロ変数を定義して使用できます。
マクロ変数を定義すると、マクロプロセッサは、プログラムのマクロ変数シンボルテーブルのうちのいずれかに、それを追加します。変数はグローバルシンボルテーブルに保持されます。このグローバルシンボルテーブルは、次のいずれかがおこった時にSASセッションが自動生成されます。
-
マクロ変数は、オープンコードと呼ばれるマクロ定義の外側にあるステートメントに定義されます。
-
変数は(SYSPBUFF以外の)マクロプロセッサによって自動的に作成されます。
マクロ変数がマクロ内に定義され、特にグローバルと定義されていない場合、変数は通常マクロのローカルシンボルテーブル内に保持されます。マクロが実行されると、SASシステムはローカルシンボルテーブルを作成します。シンボルテーブルの詳細については、
SASプログラムとマクロ処理および
マクロ変数のスコープを参照してください。
マクロ変数は、グローバルシンボルテーブルに格納された場合、現在のSASセッションの他の部分で使用されるために存在します。グローバルシンボルテーブル内の変数は、グローバルマクロ変数と呼ばれます。SASセッションの任意の場所(ただし、CARDSステートメントとDATALINESステートメントを除く)でこの変数の値を使用できるため、この変数のスコープはグローバルです。SASの他のコンポーネントによってグローバルマクロ変数が作成される場合もありますが、自動マクロ変数と見なされるのはマクロプロセッサが作成したコンポーネントのみです。
マクロ変数は、ローカルシンボルテーブルに格納された場合、それが定義されたマクロが実行されている間だけ存在します。ローカルシンボルテーブル内の変数は、
ローカルマクロ変数と呼ばれます。マクロが実行されている間だけこの変数の値を使用できるため、この変数のスコープはローカルです。
SASプログラムとマクロ処理に示す図は、グローバルシンボルテーブルとローカルシンボルテーブルを使用したプログラムを説明しています。