0
我是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循环中指定的变量。有没有办法改变代码,以使报表日期变量符合DateOfInterest?
谢谢。
嗨。非常感谢您的回应。我不确定是否正确理解了%全局公式。但是,即使我使用上面提供的样本,报告日期也会采用最后一个循环中定义的值(%put&reportdate =&reportdate2 =&reportdate3 =; “31DEC2016”d =“01JAN2017”d =“01OCT2016”d =)。我不明白为什么报告日没有遵循正确的循环,只是采取最后的可能值。你能帮我解决这个问题吗? – FioravanteL