マクロの一部を条件付きで処理します。
| 種類: | マクロステートメント |
| 制限事項: | マクロ定義でのみ使用可能 |
| コメント以外のテキストは、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;