2014-11-24 516 views
0

我更新了yyyymmdd变量,例如20141123手动。 并将20141123转换为23NOV2014。当我尝试查找30NOV2014的月份的最后一天并将其存储为结束日期时,我遇到了一些问题。我的方法是使用intnx()。虽然SAS yyyymmdd到月份的最后一个日期

data _null_; 
    format yyyymmdd $8.; 
    yyyymmdd = '20141123'; 

    yyyy = put(substr(yyyymmdd, 1, 4), $4.); 
    yy = put(substr(yyyymmdd, 3, 2), $2.); 
    mm = put(substr(yyyymmdd, 5, 2), $2.); 
    dd = put(substr(yyyymmdd, 7, 2), $2.); 

    date = put(mdy(mm, dd, yyyy), date9.); 

    enddate = put(intnx('month',date,1,'end'), date9.); 
run; 

感谢您的帮助。

+1

你可以用了信息,而不是使用子/ MDY转换读取YYYYMMDD容易。日期=输入(年月日,YYMMDD); – 2014-11-24 08:55:39

回答

4

有几件事。

  1. input()将字符转换为数字。

  2. 您正在强制SAS将YYYY,MM,DD和日期的字符转换为数字变量。我相信你在LOG中看到了NOTES的效果。

  3. 您将得到下个月的最后一天。当前+ 1。你想当前+ 0

试试这个

data _null_; 
format yyyymmdd $8.; 
yyyymmdd = '20141123'; 

yyyy = input(substr(yyyymmdd, 1, 4), $4.); 
yy = input(substr(yyyymmdd, 3, 2), $2.); 
mm = input(substr(yyyymmdd, 5, 2), $2.); 
dd = put(substr(yyyymmdd, 7, 2), $2.); 

date = mdy(mm, dd, yyyy); 

put date date9.; 
enddate = put(intnx('month',date,0,'end'), date9.); 
put enddate; 
run; 
+0

Hi @DomPazz。感谢您的明确答复。我的情况是,因为我需要使用日期进一步使用导出为像报告和日期..xls文件名。 (report23Nov2014.xls)虽然此代码是数字而不是date9。格式。我应该让另一个变量说dateoutput = put(date,date9。)来达到这个目的?或者有其他方法? – useR 2014-11-24 04:24:00

+0

是的,这将工作。 – DomPazz 2014-11-24 04:40:30

+0

由于我是新来的萨斯,并想清除该日期是数字或字符?或者它取决于?如果我把(日期,日期9)放在一起,那么它会从数字转换成字符?再次感谢您的温柔帮助。 – useR 2014-11-24 09:14:56

相关问题