如何用PROC SQL删除仅含单行数据的Unique ID对应行?
用PROC SQL筛选对应多行数据的Unique ID记录
需求:从给定数据表中,仅保留那些Unique ID对应2行数据的所有记录,删除仅对应单行的Unique ID的全部行(比如示例中的10001和10006)。
方法一:使用EXISTS子查询筛选
通过子查询统计每个Unique ID的行数,只保留行数为2的ID对应的所有行:
PROC SQL; CREATE TABLE filtered_data AS SELECT t1.* FROM original_data t1 WHERE EXISTS ( SELECT 1 FROM original_data t2 WHERE t2.Unique_ID = t1.Unique_ID GROUP BY t2.Unique_ID HAVING COUNT(*) = 2 ); QUIT;
方法二:先统计符合条件的ID再关联
先筛选出有2行数据的Unique ID列表,再通过内连接获取这些ID的全部记录:
PROC SQL; CREATE TABLE filtered_data AS SELECT t1.* FROM original_data t1 INNER JOIN ( SELECT Unique_ID FROM original_data GROUP BY Unique_ID HAVING COUNT(*) = 2 ) t2 ON t1.Unique_ID = t2.Unique_ID; QUIT;
注意:把代码里的original_data替换成你实际使用的表名即可,两种方法都能实现需求,效果完全一致。
内容的提问来源于stack exchange,提问作者4gr
相关产品推荐
相关产品推荐

