如何在SAS Enterprise Guide中筛选各列均重复的行?
在SAS Enterprise Guide或PROC SQL中筛选全列重复的行
方法一:PROC SQL实现
通过分组统计找出重复的列组合,再关联原表提取所有对应行:
PROC SQL; CREATE TABLE duplicated_rows AS SELECT a.* FROM your_table a INNER JOIN ( -- 先找出所有出现次数≥2的列组合 SELECT COL1, COL2, COL3 FROM your_table GROUP BY COL1, COL2, COL3 HAVING COUNT(*) >= 2 ) b ON a.COL1 = b.COL1 AND a.COL2 = b.COL2 AND a.COL3 = b.COL3; QUIT;
把代码里的your_table替换成你实际的表名即可,执行后duplicated_rows就是目标结果。
方法二:SAS数据步+PROC SORT(适合SAS EG可视化操作)
如果习惯用可视化步骤,也可以用排序加数据步的方式:
- 先对数据按所有列排序:
PROC SORT DATA=your_table OUT=sorted_data; BY COL1 COL2 COL3; RUN;
- 筛选出重复组的所有行:
DATA duplicated_rows; SET sorted_data; BY COL1 COL2 COL3; -- 只要不是组内唯一行,就保留 IF FIRST.COL3 = 0 OR LAST.COL3 = 0; RUN;
这里利用BY组的FIRST.和LAST.标记,判断当前行是否属于有重复的分组,从而保留所有重复的行。
另外如果只想快速提取重复的行(不含第一次出现的),可以用PROC SORT的DUPOUT参数:
PROC SORT DATA=your_table OUT=keep_unique DUPOUT=duplicates; BY COL1 COL2 COL3; RUN;
此时duplicates表会输出所有重复的行,但如果某组合出现多次,只会保留除第一次外的行,可根据需求选择。
内容的提问来源于stack exchange,提问作者dingaro
相关产品推荐
相关产品推荐

