如何在SAS中获取从上月起算的过去12个月日期以完成数据统计
现有代码错误点
putn函数调用语法错误:putn的入参要求为putn(待转换的值, 输出格式),原有代码将两个intnx计算的日期值都传入第一个参数位,不符合语法要求- 变量名不匹配:定义的宏变量名为
pre_date2,后续%put调用的是不存在的pre_date4,会触发未定义变量警告 - 括号不匹配:代码末尾多写了2个右括号,直接触发语法报错
- 逻辑不符合需求:原有写法没有正确生成过去12个月的起止时间边界
修正后的宏代码
/* 计算上个月最后一天作为统计结束边界,intnx第4个参数end表示对齐到月末 */ %let end_month_last = %sysfunc(intnx(month, %sysfunc(today()), -1, end), date9.); /* 计算往前推12个月的第一天作为统计起始边界,intnx第4个参数beg表示对齐到月首,刚好覆盖从上月起的12个完整自然月 */ %let start_month_first = %sysfunc(intnx(month, %sysfunc(today()), -12, beg), date9.); /* 调试输出确认日期是否正确 */ %put 统计起始日期:&start_month_first; %put 统计结束日期:&end_month_last;
WHERE子句使用方法
注意SAS中date9格式的宏变量作为日期值调用时,需要加后缀d识别为SAS日期:
proc sql; select count(*) as 事件发生次数 from 你的数据集名称 where 你的事件日期字段 between "&start_month_first."d and "&end_month_last."d; quit;
如果事件日期字段为datetime时间戳格式,需要先转换为日期格式再判断:
where datepart(你的事件日期字段) between "&start_month_first."d and "&end_month_last."d;
内容的提问来源于stack exchange,提问作者Tonas Max
相关产品推荐
相关产品推荐

