2013-09-25 2 views
0

EIS 열 (EX : 05FEB2007)에 날짜 기능이 있습니다. 31DEC2012에서 31DEC2022까지 연도를 반복하고 싶지만 31DEC2012-EIS와 같이 루프에서 31DEC2022-EIS를 수행해야합니다.SAS LOOP의 날짜 기능

%MACRO NFORE; 
    %LET UC=100; 
    %LET YS=2012; 
    %DO I = 0 %TO 10; 
     %LET YRS=%EVAL(&YS+&I); 
     proc sql; 
     create table FORECAST_&YRS as 
     select t.*, 
      case when (31DEC&YRS-EIS)/365<=10 then Segment_10 
       when (31DEC&YRS-EIS)/365<=20 then Segment_20 
       when (31DEC&YRS-EIS)/365<=30 then Segment_30 
       when (31DEC&YRS-EIS)/365<=99 then Segment_35 
       else stat 
      end as TSN_AGE_&YRS 
     from F_AG t; 
     quit; 
    %END; 
%MEND NFORE; 
%NFORE; 

답변

0

내 표준 "이 매크로 루프에서 데이터 세트를 많이 생산하는 것보다 (문제를) 할 수있는 더 좋은 방법은 좋은 생각이있다"와 함께이 서문 겠지만, 그는 말했다 :

또는 EIS에 YEAR 기능을 사용하고 단지 & 세 비교 - 실제 년을 계산의 측면에서
%MACRO NFORE; 
%LET UC=100; 
%LET YS=2012; 

%DO yrs= &ys. %TO %eval(&ys.+10); 

proc sql; 
create table FORECAST_&YRS as 
select * 
,case when ("31DEC&YRS."d-EIS)/365<=10 then Segment_10 
     when ("31DEC&YRS."d-EIS)/365<=20 then Segment_20 
     when ("31DEC&YRS."d-EIS)/365<=30 then Segment_30 
     when ("31DEC&YRS."d-EIS)/365<=99 then Segment_35 
     else stat end as TSN_AGE_&YRS 
from F_AG; 
quit; 
%END; 
%MEND NFORE; 
%NFORE; 

약간 우수한 솔루션은 윤년 처리 할 날짜 사이에 년을 결정하기 위해 INTCK 기능을 사용하는 것입니다. 어쨌든 DEC 31을 사용하고 있기 때문에 EIS (Year to Year)

+0

"SAS가 결코 % do을 발명하지 않았 으면 좋겠다. SAS 프로그래밍에 거의 확실한 해가되기를 바랍니다."... – Joe

+0

감사합니다. Joe .. 시도해 봅니다. – user2784588