私はSASマクロの書き方が初めてで、次のインスタンスのコードを書くのに苦労しています。SAS:ifループ内の変数の定義
%let DateOfInterest= "15jul2016"d;
%let yearyyyy=%sysfunc(putn(&DateOfInterest,year4.));
%let yearyyyy2=eval(yearyyyy+1);
data _null_;
if "01JAN2016"d<=&DateOfInterest<="31MAR2016"d then do;
%let reportdate="31MAR2016"d;
%let reportdate2="01APR2016"d;
%let reportdate3="01JAN2016"d;
%let QuarterOfInterest=Q1;
if "31MAR2016"d<&DateOfInterest<="30JUN2016"d then do;
%let reportdate="30JUN2016"d;
%let reportdate2="01JUL2016"d;
%let reportdate3="01APR2016"d;
%let QuarterOfInterest=Q2;
if "30JUN2016"d<&DateOfInterest<="30SEP2016"d then do;
%let reportdate="30SEP2016"d;
%let reportdate2="01OCT2016"d;
%let reportdate3="01JUL2016"d;
%let QuarterOfInterest=Q3;
if "30SEP2016"d<&DateOfInterest<="31DEC2016"d then do;
%let reportdate="31DEC2016"d;
%let reportdate2="01JAN2017"d;
%let reportdate3="01OCT2016"d;
%let QuarterOfInterest=Q4;
end;
end;
end;
end;
run;
コードは問題なく実行されます。しかし、DateOfInterestを選択した場合、reportdate変数は最後のifループで指定された変数になります。 reportdatesをDateOfInterestに沿って可変にするためにコードを変更する方法はありますか?
ありがとうございました。
こんにちは。あなたの応答のために多くのありがとう。 %グローバル式を正しく理解しているかどうかはわかりません。ただし、上記のサンプルを使用しても、最後のループ(%put&reportdate =&reportdate2 =&reportdate3 =; "31DEC2016" d = "01JAN2017" d = "01OCT2016" d =)で定義された値を使用します。私は、なぜレポートが正しいループに従わず、最後の可能な値をとるのか理解できません。これで私を助けてくれますか? – FioravanteL