プログラムでマクロを使用すると、テキストの置換に加えて、他の多くのことを実行できます。SASプログラムに任意の個数のマクロを含めて、1つのプログラム内で特定のマクロを何度も呼び出すことができます。
独自マクロの定義方法を学習するために、このセクションには、後で独自マクロのモデル化に使用できる例がいくつか含まれています。それぞれの例は極めて単純ですが、さまざまな方法を組み合わせることによって、複雑なタスクを実行できる高度で柔軟なマクロを作成できます。
定義するマクロには、固有の名前を付けます。マクロの名前を選択する場合、SAS言語のキーワードやコールルーチン名と同じ名前を避けることをお勧めします。選択する名前は、標準SAS命名規則に従います。(SASの命名規則の詳細については、
SAS言語リファレンス: 解説編を参照してください。)マクロ名にダブルバイト文字セット(DBCS)文字は含められません。マクロ定義は、次の例のように、%MACROステートメントと%MEND (マクロの終了)ステートメントの間に配置します。
%MACRO macro-name;
%MEND macro-name;
%MENDステートメントに指定するmacro-nameは、%MACROステートメントに指定したmacro-nameと一致している必要があります。
注: %MENDステートメントでのmacro-nameの指定は必須ではありませんが、推奨されます。そうすることで、デバッグ中に%MACROステートメントと%MENDステートメントを対応付けることが容易になります。
単純なマクロ定義の例を次に示します。
%macro dsn;
Newdata
%mend dsn;
このマクロの名前はDSNです。 Newdata
は、マクロのテキストです。マクロの内側の文字列は、定数テキストまたはモデルテキストと呼ばれます。これは、この文字列が、SASプログラムの一部になるテキストとして使用される、モデルまたはパターンであるためです。
マクロを呼び出す(または起動する)には、次のようにマクロ名の先頭にパーセント記号(%)を付けます。
マクロの呼び出しはSASステートメントに似ていますが、末尾にセミコロンを付ける必要はありません。
例として、DSNマクロの呼び出し方法を次に示します。
title "Display of Data Set %dsn";
マクロプロセッサはDSNマクロを実行し、マクロの定数テキストをTITLEステートメントに代入します。
title "Display of Data Set Newdata";
注: タイトルは、二重引用符で囲みます。オープンコード内の引用符で囲まれた文字列の内、マクロプロセッサは二重引用符で囲まれたマクロの呼び出しを置換しますが、一重引用符で囲まれたマクロの呼び出しを置換しません。
DSNマクロは、次のようにコーディングした場合と全く同じです。
%let dsn=Newdata;
title "Display of Data Set &dsn";
この結果のコードを次に示します。
title "Display of Data Set Newdata";
つまりこの場合は、マクロを使用しても、マクロ変数を使用する場合と比べてメリットはありません。ただし、DSNは極めて単純なマクロです。この後の例で示すように、マクロは、DSNマクロよりも非常に多くのことを実行できます。