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

如何在SAS中去除重复姓名且保留原始出现顺序?

在SAS中保留原始顺序提取唯一值

问题背景

现有如下SAS数据集:

Data ss;
infile datalines;
input ename $;
datalines;
Ram
Sita
Ram
Arjun
Sita
Ram
Arjun
;
run;

需要提取ename的唯一值,且输出顺序与原始数据中首次出现的顺序一致(即Ram→Sita→Arjun)。

常规的proc sort+first.ename方法虽然能实现去重,但会对数据排序,输出顺序变为Arjun→Ram→Sita,不符合需求:

proc sort data=ss;
by ename;
run;

data want;
set ss;
by ename;
if first.ename;
run;

解决方案:使用哈希表实现无排序去重

利用SAS哈希表可以快速记录已出现的变量值,遍历原始数据集时仅保留首次出现的记录,完美保留原始顺序:

data want;
    set ss;
    /* 初始化哈希表,用于存储已见过的ename值 */
    if _n_ = 1 then do;
        declare hash seen();
        seen.definekey('ename');
        seen.definedone();
    end;
    /* 仅保留首次出现的ename记录 */
    if seen.check() ne 0 then do;
        output;
        seen.add();
    end;
run;

代码说明

  • 当_n_=1(处理第一条记录时),创建哈希表seen,以ename作为索引键。
  • seen.check()方法检查当前ename是否已存在于哈希表:返回0表示已存在,非0表示未出现过。
  • 仅当ename未出现过时,执行output保留该记录,并通过seen.add()将其存入哈希表,避免后续重复记录被输出。

运行后输出结果严格遵循原始数据中首次出现的顺序:

Ram
Sita
Arjun

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 09:29:55