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

SAS新手求助:合并数据集、更新日期值及按Role跨年度汇总Hours

SAS跨年度连续记录汇总方案

针对你的需求,以下是精准匹配要求的SAS实现代码,包含详细逻辑注释:

1. 合并并排序年度数据集

先将四个年度数据集合并,添加来源年份字段用于跨年度判断,再按ID和起始日期排序,保证处理顺序正确:

/* 合并四个年度数据集,添加来源年份字段 */
data combined;
    set Year_2013 Year_2014 Year_2015 Year_2016;
    source_year = year(Start);
run;

/* 按ID和Start日期排序,确保同ID记录按时间顺序排列 */
proc sort data=combined;
    by ID Start;
run;

2. 处理跨年度记录的汇总与Role变更标记

使用BY GROUP和RETAIN语句实现核心逻辑,严格遵循"仅跨年度同Role汇总、单年度不合并、Role变更标记"的要求:

data Years_all;
    set combined;
    by ID;
    /* 保留累计所需的中间变量 */
    retain prev_Role sum_Hours group_Start group_End;
    /* 定义Role变更标记字段 */
    length role_change $1;

    /* 初始化每个ID的第一组记录 */
    if first.ID then do;
        prev_Role = Role;
        sum_Hours = Hours;
        group_Start = Start;
        group_End = End;
        role_change = 'N';
        return;
    end;

    /* 判断是否为跨年度且同Role的连续记录 */
    if Role = prev_Role and year(Start) = year(group_End) + 1 then do;
        /* 累计工时,更新组结束日期 */
        sum_Hours = sum_Hours + Hours;
        group_End = End;
        role_change = 'N';
    end;
    else do;
        /* 输出上一组汇总后的记录 */
        Start = group_Start;
        End = group_End;
        Role = prev_Role;
        Hours = sum_Hours;
        output;
        /* 标记Role变更(不同则设为Y) */
        role_change = ifc(Role ne prev_Role, 'Y', 'N');
        /* 重置当前组的变量 */
        prev_Role = Role;
        sum_Hours = Hours;
        group_Start = Start;
        group_End = End;
    end;

    /* 输出每个ID的最后一组记录 */
    if last.ID then do;
        Start = group_Start;
        End = group_End;
        Role = prev_Role;
        Hours = sum_Hours;
        output;
    end;

    /* 删除不需要的中间变量 */
    drop prev_Role sum_Hours group_Start group_End source_year;
run;

核心逻辑说明

  • 禁止单年度汇总:通过year(Start) = year(group_End) + 1判断,仅当当前记录的起始年份是上一组结束年份的下一年时,才会触发汇总,单年度内的多条记录会原样保留
  • 跨年度同Role汇总:同ID下连续年度的同Role记录,会累计Hours,并将End日期更新为该组最后一条记录的结束日期(如你提到的ID 0004,90+69汇总后End为31DEC2015)
  • Role变更标记:当当前记录的Role与上一组不同时,role_change字段会被设为Y,方便后续筛选变更记录

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 23:45:45