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

SAS中行对比删除重复值并保留指定字段数据的实现问题

SAS重复行处理解决方案

完整实现代码

/* 第一步:按分组规则排序,保证同组内空交易日期行排在前面 */
proc sort data=work.sample;
    by acct_num test_id final_amt final_amt_added tran_date;
run;

/* 第二步:处理重复行,提取额外金额字段 */
data work.want;
    set work.sample;
    by acct_num test_id final_amt final_amt_added;
    /* 保留变量跨行传递值 */
    retain act_amt_extra .;
    
    /* 每个新匹配分组开始时重置额外金额为缺失 */
    if first.final_amt_added then act_amt_extra = .;
    
    /* 遇到空交易日期的行,存下实际金额后删除该行 */
    if missing(tran_date) then do;
        act_amt_extra = actual_amt;
        delete;
    end;
    
    /* 输出非空交易日期的行,自动携带同组的额外金额 */
run;

逻辑说明

  • 排序阶段:按分组键acct_num、test_id,以及金额匹配键final_amt、final_amt_added排序,追加tran_date排序是利用SAS缺失值小于非缺失值的特性,保证同匹配组内空交易日期的行排在非空行之前,方便后续取值
  • 处理阶段:
    • 用by语句标识每个匹配分组的边界,first.变量可判断当前行是否为分组的第一行
    • retain语句声明的act_amt_extra变量会跨行保留值,不会在每次读取新行时被重置为缺失
    • 匹配到空交易日期的行时,仅保存该行的actual_amt到act_amt_extra,不输出该行
    • 非空交易日期的行直接输出,自动携带同组内空行提前存下的actual_amt值,没有对应空行的分组该字段默认留空

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 04:54:00