2017-01-04 2 views
0

변수가 date = 201611이고 다음 달의 첫째 날을 '2016-12-01'형식으로 만들어야합니다. 다음 코드는 11 일까지 최대 개월 동안 잘 작동 :SAS - 조건부 매크로 변수

%let date = 201611; 
%let rok = %sysfunc(substr(&date,1,4)); 
%let month = %sysfunc(substr(&date,5,2)); 
%let xdat2_ii = &rok-%eval(&month + 1)-01; 
%let xdat1 = %str(%')&xdat2_ii.%str(%'); 
%put &xdat1; 
'2016-12-01' 

내가 날짜가 '2017년 1월 1일를 얻기 위해 다음 201612 때, 즉 월 12 일에 대한 작동 코드를 만들기 위해 몇 가지 개선을 추가해야합니다 '.

제 아이디어는 매크로를 사용하여 수행하는 것이지만 작동하지 않습니다.

%macro promenne; 
%if &month < 12 %then %let xdat2_ii = &rok-%eval(&month + 1)-01 
%else %if &month= 12 %then %let xdat2_ii = %eval(&rok + 1)-01-01; 
%mend promenne; 

어떤 제안을 해주셔서 감사합니다.

답변

2

날짜를 사용할 때 내장 날짜 이동 기능 (이 경우 intnx)을 사용하는 것이 가장 쉽습니다.

/* define variable (this is a macro STRING) */ 
%let date=201612; 

/* convert to SAS date value (numeric, num of days since 01JAN1960) */ 
%let dateval=%sysfunc(mdy(%substr(&date,5,2),1,%substr(&date,1,4))); 

/* finally - shift to beginning of following month and format output */ 
%let xdat2_ii=%sysfunc(intnx(MONTH,&dateval,1,B),yymmddd10.); 

%put &xdat2_ii; /* 2017-01-01 */ 
+0

고맙습니다. –