我有三列日期格式与SAS格式不同:
12 june 2017 00:15
- 完整日期2016
- 仅限年份12
- 仅限月份我需要更改日期格式并在日期之后减去以获得结果的月数。
例如,,"12 June 2017 00:15" - December 2016 = 7
怎么做?
答案 0 :(得分:1)
正如您可能已经发现的那样,没有现成的SAS date informat可以正确处理您的完整日期字段,因此您需要编写一些自定义逻辑来转换它计算。 date9.
是我能找到的最接近的匹配格式:
data example;
fulldate = '12 june 2017 00:15';
year = 2016;
month = 12;
/* Convert string to date9 format and input */
fulldate_num = input(
cats(
scan(fulldate,1),
substr(scan(fulldate,2,' '),1,3),
scan(fulldate,3)
), date9.
);
/* Calculate difference in months */
monthdiff = intck('month', mdy(month,1,year), fulldate_num);
run;
答案 1 :(得分:0)
例如:
数据日期;
输入dt $ 18。 yy mm;
mm_diff = intck(" mon",输入(cats(yy,mm),yymmn6。),input(dt,anydtdte12。));
把mm_diff =;
卡片;
2017年6月12日00:15 2016 12
2017年6月11日00:15 2017 3
;
跑 ;
日志将打印:
mm_diff = 6 mm_diff = 15
作为旁注,声明"没有现成的SAS日期信息,可以正确处理您的完整日期字段"在这个帖子的其他地方做的不正确。如上面的程序片段所示,ANYDTDTEw。信息用aplomb处理它。程序员只需要提供足够的信息宽度W.上面,它被选为W = 12。如果您不愿意猜测和/或计算,只需使用ANYDTDTE32即可。
此致 保罗多夫曼
答案 2 :(得分:0)
假设您有三个数字变量且第一个包含有效的SAS 日期时间值,则应首先将两者都转换为有效的SAS 日期值。然后,您可以使用INTCK()函数计算月数。
nmonths = intck('month',datepart(VAR1),mdy(VAR3,1,VAR2));