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