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에 맞춰 변수를 변경하려면 코드를 변경하는 방법이 있습니까?
감사합니다.
안녕하세요. 당신의 반응에 대해 많은 감사드립니다. 나는 % global 공식을 정확하게 이해하지 못했습니다. 그러나 위에 제공된 샘플을 사용하더라도 마지막 루프 (% put & reportdate = & reportdate2 = & reportdate3 =; "31DEC2016"d = "01JAN2017"d = "01OCT2016"d =)에 정의 된 값을 reportdates가 사용합니다. 나는 reportdates가 올바른 루프를 따르지 않고 마지막 가능한 값을 취하는 이유를 이해하지 못합니다. 이걸 좀 도와 주시겠습니까? – FioravanteL