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

如何在SAS中按12个月周期生成year分组列?

SAS添加自定义年度分组列的方法

核心思路

以2022年7月1日为起始点,计算每个日期与起始点的月份间隔,通过向上取整将每12个月划分为一组,生成1到5的分组编号。

代码实现

步骤1:统一日期格式(若原日期为字符型)

如果你的date列是MM/DD/YYYY格式的字符型数据,先转换为SAS内置的日期型变量:

data have_clean;
    set have;
    /* 将字符日期转换为SAS日期格式 */
    date = input(date, mmddyy10.);
    /* 保留原日期显示样式 */
    format date mmddyy10.;
run;

步骤2:生成分组编号year

基于清洗后的数据集,计算每个日期所属的分组:

data want;
    set have_clean;
    /* 定义分组起始日期 */
    start_date = '01JUL2022'd;
    /* 计算当前日期与起始日期的完整月份差 */
    month_diff = intck('month', start_date, date);
    /* 每12个月为一组,生成1-5的编号 */
    year = ceil((month_diff + 1)/12);
    format date mmddyy10.;
run;

关键函数说明

  • intck('month', start_date! Jud将ignives天生的�LV(无法 Historical Linguistics接受日期为2022年7月1日,结果为0;2023年6月1日对应结果为11,2023年7月1日对应结果为12,以此类推。
  • ceil():向上取整函数,确保每连续12个月对应一个唯一分组编号(1到5)。

多ID场景适配

如果数据包含多个id,且每个id都从2022年7月1日开始分组,添加by id语句即可:

data want;
    set have_clean;
    by id;
    /* 每个id的分组起始日期重置为2022年7月1日 */
    if first.id then start_date = '01JUL2022'd;
    month_diff = intck('month', start_date, date);
    year = ceil((month_diff + 1)/12);
    format date mmddyy10.;
run;

内容的提问来源于stack exchange,提问作者B K

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 21:54:25