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

如何用Proc Sort Nodupkey实现仅Index=0时去重的SAS数据处理?

解决方案:分情况处理重复行

要实现「Index=1时保留所有重复行,Index=0时仅保留重复行中的一行」,不能直接用PROC SORT NODUPKEY(它会对所有行生效),可以用以下两种方法:

方法一:拆分数据集后合并

先拆分出Index=1的所有行(全部保留),再对Index=0的行去重,最后合并结果:

/* 提取Index=1的所有行,直接保留 */
data db_index1;
    set db;
    where index = 1;
run;

/* 对Index=0的行按所有列去重,仅保留唯一行 */
proc sort data=db(where=(index=0)) nodupkey out=db_index0;
    by id admission discharge index;
run;

/* 合并两个数据集得到最终结果 */
data db1;
    set db_index1 db_index0;
run;

方法二:BY组Data步一次处理(更高效)

先按关键列排序,再用BY组逻辑判断是否输出行,只需读取一次源数据:

/* 先按ID、入院日期、出院日期、Index排序,确保重复行相邻 */
proc sort data=db;
    by id admission discharge index;
run;

/* 用BY组逻辑筛选行:Index=1时全输出,Index=0时仅输出每组第一行 */
data db1;
    set db;
    by id admission discharge index;
    /* 满足任一条件则输出:要么是Index=1的行,要么是Index=0组的第一行 */
    if index = 1 or first.index;
run;

逻辑说明

  • 排序后,相同ID、入院/出院日期、Index的行会被归为一组
  • first.index是BY组自动生成的变量:每组第一行时为1,后续行则为0
  • 对Index=0的组,只输出first.index=1的行,实现去重;Index=1的组则全部输出,保留所有重复行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 06:25:59