マクロの一部を条件付きで処理します。
種類: | マクロステートメント |
制限事項: | マクロ定義でのみ使用可能 |
コメント以外のテキストは、ACTIONの終了を示すセミコロンと%ELSEステートメントの間で使用することはできません。 |
整数に置き換えられる任意のマクロ式を指定します。この式がゼロ以外の整数に置換される場合、同式はtrueとなり、%THEN句が処理されます。この式がゼロに置換される場合、同式はfalseとなり、%ELSE句が(存在するならば)処理されます。この式がヌル値に置換されるか、または非数値文字を含む値に置換される場合、マクロプロセッサはエラーメッセージを発行します。マクロ式の作成とその評価方法の詳細については、マクロ式を参照してください。
%if &name=GEORGE %then %let lastname=smith;
%if %upcase(&name)=GEORGE %then %let lastname=smith;
%if &i=10 and &j>5 %then %put check the index variables;
定数テキスト、テキスト式、マクロステートメントのいずれかを指定します。actionにセミコロンが含まれている場合(たとえばSASステートメントを指定する場合など)、%THENの直後の最初のセミコロンで%THEN句が終了します。action内にあるセミコロンが原因で%IF-%THENステートメントが終了するのを防ぐには、%DOグループを使用するか、または%STRなどのクォーティング関数を使用します。次の例では、セミコロンを含むテキストを条件に応じて生成する2つの方法を示しています。
%if &city ne %then %do; keep citypop statepop; %end; %else %do; keep statepop; %end;
%if &city ne %then %str(keep citypop statepop;); %else %str(keep statepop;);
%if &city ne %then %do;
keep citypop statepop;
%end; ;
%else %do;
keep statepop;
%end;
%macro settax(taxrate); %let taxrate = %upcase(&taxrate); %if &taxrate = CHANGE %then %do; data thisyear; set lastyear; if sale > 100 then tax = .05; else tax = .08; run; %end; %else %if &taxrate = SAME %then %do; data thisyear; set lastyear; tax = .03; run; %end; %mend settax;
CHANGE
である場合、このマクロは次のDATAステップを生成します。
DATA THISYEAR; SET LASTYEAR; IF SALE > 100 THEN TAX = .05; ELSE TAX = .08; RUN;
SAME
である場合、このマクロは次のDATAステップを生成します。
DATA THISYEAR; SET LASTYEAR; TAX = .03; RUN;
%macro fiscal(report); %if %upcase(&report)=QUARTER %then %do; title 'Quarterly Revenue Report'; proc means data=total; var revenue; run; %end; %else %do; title 'To-Date Revenue Report'; proc means data=current; var revenue; run; %end; %mend fiscal; %fiscal(quarter)
TITLE 'Quarterly Revenue Report'; PROC MEANS DATA=TOTAL; VAR REVENUE; RUN;