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

SAS技术问询:如何保留两个数据集共有的ID记录(含重复)并移除数据集中非共有ID记录?

搞定SAS里筛选两数据集共有ID重复记录的问题

问题拆解

你要的是把dataset2里所有ID和dataset1重合的记录(包括重复的ID条目)都留下来,但之前写的代码有俩小问题:

  • 你查询的是dataset1而不是目标的dataset2,方向搞反啦
  • SQL语句结尾多了个逗号,属于语法错误

正确的两种实现方式

方式1:PROC SQL 子查询(简洁高效)

调整查询对象和语法,直接从dataset2里筛选ID存在于dataset1中的记录即可:

proc sql;
    select * 
    from dataset2
    where ID in (select distinct ID from dataset1); /* 加distinct是为了只取dataset1里的唯一ID,提升查询速度 */
quit;

这里用distinct ID是因为我们只需要确认ID是否存在,不需要重复的ID值,这样运行效率更高,同时完全不影响保留dataset2中的重复记录。

方式2:数据步合并(适合大数据量场景)

如果你的数据集包含大量重复记录,用数据步合并的逻辑更直观,处理效率也不错:

/* 先提取dataset1里的唯一ID列表 */
proc sort data=dataset1 nodupkey out=unique_ids;
    by ID;
run;

/* 把dataset2和唯一ID列表合并,只保留匹配上的记录 */
data desired_output;
    merge dataset2(in=a) unique_ids(in=b);
    by ID;
    if a and b; /* 只保留同时存在于dataset2和unique_ids中的记录 */
run;

这里用in=a标记来自dataset2的记录,in=b标记来自唯一ID列表的记录,if a and b就确保只留下dataset2里ID在dataset1中的所有条目,包括重复的那些。

结果验证

运行上述任意一段代码后,输出的数据集就和你期望的完全一致:

ID Sex
00001 F
00001 F
00002 F
00002 F
00002 F
.... ....

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 14:17:38