マクロ定義を開始します。
種類: | マクロステートメント |
制限事項: | マクロ定義またはオープンコードで使用可能 |
参照項目: | %MENDステートメント および SYSPBUFF自動マクロ変数 |
マクロ名を指定します。マクロ名はSAS名でなければなりません。%MACROステートメント内では、マクロ名を生成するテキスト式は使用できません。また、マクロ機能の予約語はマクロ名として使用できません(マクロ機能の予約語の一覧については、 マクロ機能の予約語を参照してください)。
1つまたは複数のローカルマクロ変数を指定します。これらの変数の値は、当該マクロの呼び出し時にユーザーにより指定されます。ここで指定したパラメータは、それを定義したマクロにとってローカルとなります。個々のパラメータを指定する必要があります。パラメータを生成するテキスト式は使用できません。パラメータリストには任意の数のマクロパラメータを含めることができます。複数のパラメータはカンマで区切って指定します。このパラメータリスト内にある変数は、通常、当該マクロ内で参照されます。
positional-parameter-1 <,positional-parameter-2 ...> | specifies one or more positional parameters.位置パラメータは任意の順番で指定できますが、マクロの呼び出し時には、各パラメータ値の指定順と、%MACROステートメント内での各パラメータの指定順が一致する必要があります。複数の位置パラメータを指定する場合、パラメータ間をカンマで区切ります。呼び出し時に位置パラメータに値を指定しなかった場合、マクロ機能はそのパラメータにヌル値を割り当てます。 |
keyword-parameter=<value> <,keyword-parameter-2=<value> ...> | names one or more macro parameters followed by equal signs.等号に続いてデフォルト値を指定できます。等号の後のデフォルト値を省略すると、そのキーワードパラメータにはヌル値が割り当てられます。デフォルトを使用すると、より柔軟なマクロ定義の作成が可能となるほか、マクロの呼び出し時に指定する必要のあるパラメータの数を削減できます。デフォルト値をオーバーライドするには、マクロの呼び出し時に、マクロ変数名に続く等号の後に新しい値を指定します。 |
次に示すオプション引数のうち、いずれか1つまたは複数を指定できます。
マクロがネームスタイル呼び出しとコマンドスタイル呼び出しの両方を受け付けることを指定します。CMDオプション付きで定義されたマクロのことを、コマンドスタイルマクロと呼ぶ場合があります。
マクロカタログ内のマクロエントリに関する説明を指定します。この説明テキストの最大長は256文字です。説明は引用符で囲む必要があります。この説明は、ユーザーがコンパイル済みマクロを含むカタログの内容を表示した場合に、CATALOGウィンドウ内に表示されます。DES=オプションは、コンパイル済みマクロ機能を使用する場合に特に役立ちます。
MINDELIMITER=グローバルオプションの値をオーバーライドする値を指定します。この値は、一重引用符で囲まれた単一文字でなければならず、1つの%MACROステートメント内に一度だけ記述できます。
制限事項 | 次の文字は、区切り文字として使用することはできません。% & ' " ( ) ; |
マクロの実行時に演算式または論理式を評価する際に、マクロプロセッサがニーモニックIN
および特殊文字#
を論理演算子として認識するよう指定します。この引数の設定は、NOMINOPERATORグローバルシステムオプションの設定をオーバーライドします。
IN
および特殊文字#
を論理演算子として認識しなくなります。この引数の設定は、MINOPERATORグローバルシステムオプションの設定をオーバーライドします。
マクロ呼び出しにおけるパラメータ値のリスト全体(ネームスタイル呼び出しにおけるかっこを含む)を、自動マクロ変数SYSPBUFFの値として割り当てます。PARMBUFFオプションを指定すると、可変数個のパラメータ値を受け付けるマクロを定義できます。
マクロをコンパイル済みマクロライブラリに保存する際に、そのマクロの内容を暗号化するよう指定します。この機能を使うと、マクロ自身に含まれている知的所有権を保護するようなセキュアなマクロを作成できます。これらのマクロは、Encryption Algorithm Managerを使用して保護されます。
注:The macro %name was compiled with the SECURE option.No output will be produced for
this %COPY statement.
マクロがネームスタイル呼び出しまたはステートメントスタイル呼び出しを受け付けることを指定します。STMTオプション付きで定義されたマクロのことを、ステートメントスタイルマクロと呼ぶ場合があります。
コンパイル済みマクロのソースとコンパイル済みマクロのコードをSASカタログ内の1つのエントリとして結合し、永久SASライブラリに保存します。SOURCEオプションを使用する場合、STOREオプションとMSTOREDオプションを設定する必要があります。永久SASライブラリを指定するには、SASMSTORE=オプションを使用します。マクロの保存やコンパイル済みマクロの呼び出しを行うには、MSTOREDオプションが有効でなければなりません。(詳細については、マクロの保存および再利用を参照してください)。
コンパイル済みマクロを、SASカタログ内の1つのエントリとして、永久SASライブラリ内に保存します。永久SASライブラリを指定するには、SASシステムオプションSASMSTORE=を使用します。マクロの保存やコンパイル済みマクロの呼び出しを行うには、SASシステムオプションMSTOREDが有効でなければなりません(詳細については、マクロの保存および再利用を参照してください)。
%macro prnt(var,sum); proc print data=srhigh; var &var; sum ∑ run; %mend prnt;
%prnt(school district enrollmt, enrollmt)
PROC PRINT DATA=SRHIGH; VAR SCHOOL DISTRICT ENROLLMT; SUM ENROLLMT; RUN;
%macro finance(yvar=expenses,xvar=division); proc plot data=yearend; plot &yvar*&xvar; run; %mend finance;
%finance()
%finance;
PROC PLOT DATA=YEAREND; PLOT EXPENSES*DIVISION; RUN;
%finance(xvar=year)
PROC PLOT DATA=YEAREND; PLOT EXPENSES*YEAR; RUN;
%macro printz/parmbuff; %let num=1; %let dsname=%scan(&syspbuff,&num); %do %while(&dsname ne); proc print data=&dsname; run; %let num=%eval(&num+1); %let dsname=%scan(&syspbuff,&num); %end; %mend printz;
PURPLE
、RED
、BLUE
、TEAL
を指定しています。
%printz(purple,red,blue,teal)
PROC PRINT DATA=PURPLE;
RUN;
PROC PRINT DATA=RED;
RUN;
PROC PRINT DATA=BLUE;
RUN;
PROC PRINT DATA=TEAL;
RUN;
/* commentary */ %macro foobar(arg) /store source des="This macro does not do much"; %put arg = &arg; * this is commentary!!!; %* this is macro commentary; %mend /* commentary; */; /* Further commentary */ NOTE: The macro FOOBAR completed compilation without errors. %copy foobar/source;
%macro foobar(arg) /store source des="This macro does not do much"; %put arg = &arg; * this is commentary!!!; %* this is macro commentary; %mend /* commentary; */;
options mstored sasmstore=mylib;
libname mylib "SAS-library";
%macro nonsecure/store; /* This macro is stored in plain text */
data _null_;
x=1;
put "This data step was generated from a non-secure macro.";
run;
%mend nonsecure;
%nonsecure
filename maccat catalog 'mylib.sasmacr.nonsecure.macro';
data _null_;
infile maccat;
input;
list;
run;
options mstored sasmstore=mylib;
libname mylib "SAS-library";
%macro secure/store secure; /* This macro is encrypted */
data _null_;
x=1;
put "This data step was generated from a secure macro.";
run;
%mend secure;
%secure
filename maccat catalog 'mylib.sasmacr.secure.macro';
data _null_;
infile maccat;
input;
list;
run;