SAS学习(4) |
您所在的位置:网站首页 › sas中小于等于 › SAS学习(4) |
最近遇到数据中出现重复数据,需要剔除出只出现一次的数据,在讨论过程中发现不止一种方法可以解决问题,在这里将想到的所有方法做一整理,如果有新方法欢迎大家补充。 简单编一个示例数据集: data a1; input record_id b1 b2; datalines; 1 2 3 1 1 3 1 2 5 2 3 6 3 2 7 6 7 4 5 3 2 5 8 9 ; run;(1)proc freq 具体代码如下: proc freq data=a1 noprint; table record_id/out=a1_test1(keep=record_id count where=(count>1)); run;运行代码后,得到的新数据集a1_test1就会只保留重复的record_id以及重复的次数 (2)proc sort 可以使用proc sort 中的NODUPKEY和NOUNIQUEKEY来完成重复数据的处理。 NODUPKEY 主要用于剔除by 语句后的变量名中重复的观测, (NODUPKEY需要与NODUP在实际应用中辨析需要辨析:NODUP是剔除掉完全重复的相邻观测,NODUPKEY只提出by语句后的变量重复的观测) NOUNIQUEKEY主要用于剔除by 语句后的变量名中唯一的观测 具体代码如下: proc sort data=a1 nodupkey out=a1_test2; by record_id ; run;/*剔除重复的观测*/ proc sort data=a1 nouniquekey out=a1_test3; by record_id ; run;/*剔除唯一的观测*/(3)First.variable&Last.variable 首先需要对数据集进行排序,具体代码如下: proc sort data=a1;by record_id;run; data a1_test4; set a1; by record_id; if first.record_id=last.record_id=1 then output;/*剔除了重复的观测*/ run;在这里需要注意的是,proc sort中使用NODUPKEY剔除重复观测时,导出的数据集还是会保留出现重复数据的第一条观测,但是使用First.var和Last.var的话是会把重复数据全部删除,需要根据实际据需求选择两种方法。(如下图) 还想到利用First.variable和Last.variable生成一个order变量,用于统计重复次数,再对order变量进行处理达到清除重复数据的目的,但是较为麻烦,在此不多作赘述。 (4)proc sql 最简单粗暴的方法就是使用distinct,但是需要注意使用distinct只能剔除完全一致的行(不管是否相邻,但还是会保留出现重复的第一行,不会完全删除) 还有一种方法是利用FREQ summary function、GROUP BY clause以及HAVING clause,具体代码如下: proc sql; select *,freq(record_id) as id_cnt from a1 group by record_id having id_cnt ge 2;/*输出重复数据*/ quit;目前想到的方法只有这些,如果其他的思路也希望多交流~ 参考资料: https://support.sas.com/resources/papers/proceedings/proceedings/sugi25/25/cc/25p106.pdf SAS数据集中重复数据的处理方法 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |