If statement SAS-条件宏变量

If statement SAS-条件宏变量,if-statement,macros,sas,If Statement,Macros,Sas,我有一个可变日期=201611,我需要按照以下格式“2016-12-01”创建下个月的第一天。以下代码在截至11月的几个月内正常工作: %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(%')

我有一个可变日期=201611,我需要按照以下格式“2016-12-01”创建下个月的第一天。以下代码在截至11月的几个月内正常工作:

%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'
我需要添加一些改进,以使代码在第12个月有效,即当日期为201612时,然后获得“2017-01-01”

我的想法是使用宏来实现,但它不起作用

%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;
%macro promenne;
%如果&month<12%,则%let xdat2_ii=&rok-%eval(&month+1)-01
%如果&month=12%,则%let xdat2_ii=%eval(&rok+1)-01-01;
%修复promenne;

谢谢你给我的建议

处理日期时,通常最容易使用内置的日期转换功能-在本例中


在处理日期时,通常最容易使用内置的日期转换功能-在本例中

/* 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 */