You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 18:54:03