前のページ|次のページ

高度なマクロの使い方

%DOループを使用したテキストの反復部分の生成

SASコードの条件付き生成は、複数のSASステートメントを条件付きで実行するための、%DO-%ENDで囲まれたステートメントグループを提供しています。テキストの反復部分を生成するには、%DOループによる反復を使用します。たとえば、次のマクロ(NAMES)では、%DOループによる反復を使用して、DATAステートメントで使用される一連の名前を作成しています。
%macro names(name= ,number= );
   %do n=1 %to &number;
      &name&n
   %end;
%mend names;
NAMESマクロは、NAMEパラメータの値とマクロ変数Nの値を連結して、一連の名前を作成します。Nのストップ値は、次のDATAステートメントに示すように、NUMBERパラメータの値で指定します。
data %names(name=dsn,number=5);
このステートメントをサブミットすると、次のような完全なDATAステートメントが生成されます。
data dsn1 dsn2 dsn3 dsn4 dsn5;
注: %DO %WHILEステートメントや%DO %UNTILステートメントを使用して、条件付きで%DOループを実行することもできます。詳細については、%DO %WHILEステートメント%DO %UNTILステートメントを参照してください。

マクロ変数参照の接尾語の生成

一連の番号付きの名前を生成するときに、接頭語と番号の間に必ず文字Xを挿入したいとします。次のNAMESXマクロは、指定した接頭語の後にXを挿入します。
%macro namesx(name=,number=);
   %do n=1 %to &number;
      &name.x&n
   %end;
%mend namesx;
&NAME参照の末尾にあるピリオドは、区切り文字です。マクロプロセッサは、この区切り文字によって、後ろに文字Xが付いた&NAME参照と&NAMEX参照を区別します。DATAステートメントでNAMESXマクロを呼び出す例を次に示します。
data %namesx(name=dsn,number=3);
このステートメントをサブミットすると、次のステートメントが生成されます。
data dsnx1 dsnx2 dsnx3;
マクロ変数参照で区切り文字としてピリオドを使用する場合の詳細については、マクロ変数を参照してください。
前のページ|次のページ|ページの先頭へ