SAS中三种常用数据查重方法的深入比较-经管之家官网!

人大经济论坛-经管之家 收藏本站
您当前的位置> 软件培训>>

SAS软件培训

>>

SAS中三种常用数据查重方法的深入比较

SAS中三种常用数据查重方法的深入比较

发布:moonstone | 分类:SAS软件培训

关于本站

人大经济论坛-经管之家:分享大学、考研、论文、会计、留学、数据、经济学、金融学、管理学、统计学、博弈论、统计年鉴、行业分析包括等相关资源。
经管之家是国内活跃的在线教育咨询平台!

经管之家新媒体交易平台

提供"微信号、微博、抖音、快手、头条、小红书、百家号、企鹅号、UC号、一点资讯"等虚拟账号交易,真正实现买卖双方的共赢。【请点击这里访问】

提供微信号、微博、抖音、快手、头条、小红书、百家号、企鹅号、UC号、一点资讯等虚拟账号交易,真正实现买卖双方的共赢。【请点击这里访问】

虽然利用查找重复记录的方法之前也讨论过,但是一直以来未进行深入研究和比较,今天对三种常用查重方法进行了一下细化分析,非常实用,供大家参考。样板数据集如下:dataex;inputabc;cards;223223456456456456444445 ...
免费学术公开课,扫码加入


虽然利用查找重复记录的方法之前也讨论过,但是一直以来未进行深入研究和比较,今天对三种常用查重方法进行了一下细化分析,非常实用,供大家参考。
样板数据集如下:
data ex;
input a b c;
cards;
2 2 3
2 2 3
4 5 6
4 5 6
4 5 6
4 5 6
4 4 4
4 4 5
7 7 8
9 5 5
;
run;
具体查重方法如下:
1,sort语句
proc sort NODUPRECS out=ex1 dupout=ex2;
by a b ;
run;
ex1保留的是未重复的记录,ex2保留的是重复的记录。
如果将NODUPRECS换成NODUPKEY,会得到不一样的结果。两者差别详细参考http://www2.sas.com/proceedings/sugi30/037-30.pdf。简单地说:NODUPRECS 比较的是数据集中的所有变量,而NODUPKEY只比较by中列举的变量(也即通常所说的key变量)。 所以如果sort选项为NODUPRECS,上面的程序中将by中列举的变量换成a, 或a b, 或a b c,结果都是一样的。但是如果sort选项为NODUPKEY,结果就完全不一样。
2,data步
前提:需要先对数据进行排序。
proc sort data=ex;
by a b c ;
run;
data ex1 ex2;
set ex;
by a b c;
if first.c then output ex1;
else output ex2;
run;
该过程完全等价于sort语句的选项NODUPKEY,所以first.后面的变量为a, 或b, 或c,结果完全不一样。
如果不想让ex2数据集里面的重复记录多次出现,而是重复记录只出现一次,并统计该重复记录出现的次数。该思路非常经典。可用于查看数据库中按某几个变量定义的重复记录到底有多少条。该思路运用sort是解决不了的,采用data步如下:
data ex1 ex2;
set ex;
by a b c;
retain n 0;
if first.c then
do;
n=1;
output ex1;
end;
else n+1;
if last.c and n>=2 then
output ex2;
run;
retain的作用:在data步循环执行开始前初始化新变量值,使得在下一次循环前仍使用该初始化值。详细用法参考:http://support.sas.com/publishing/pubcat/chaps/58176.pdf
上述ex2数据集也可以采用freq和summary语句实现,具体如下。
proc freq data = ex noprint ;
table a*b*c/ out =ex2 (keep = a b c Count where = (Count > 1)) ;
run ;
proc summary data=b nway;
class a b c;
output out=c (drop=_type_where=(_freq_>1));
run;
上述两程序基本原理是一样的。以summary语句为例,nway所起的作用很大,如果不加nway 的话,那么summary的结果将把所有类型都输出来。所有类型的意思就是,class的3个变量的取值分别存在两种大的分类:缺失和不缺失,而每个变量未缺失的时候又各自有不同的取值。所以,所有类型的意思就是:3个变量,包括取缺失值和不同非缺失值的所有组合。这样的结果肯定不是我们想要的,因为我们想要的是3个变量都不缺失的结果,所以就要加上nway。
3、Sql语句
proc sql noprint;
create table ex1 as
select distinct a, b, c
from ex;
quit;
select distinct:选取以关键变量(如上例中的a b c)确定的不同记录,该过程同样等价于sort语句的选项NODUPKEY,所以select distinct后面的变量不同,结果也不同。
同时SQL能更进一步进行频次统计,等价于data步输出的两个数据集功能的合并。
proc sql noprint;
create table ex2 as
select a, b, c,
count(*) as freq
from ex
group by a, b, c;
quit;
总结以上三类方法,SQL语句最为方便实用,推荐实用。
「经管之家」APP:经管人学习、答疑、交友,就上经管之家!
免流量费下载资料----在经管之家app可以下载论坛上的所有资源,并且不额外收取下载高峰期的论坛币。
涵盖所有经管领域的优秀内容----覆盖经济、管理、金融投资、计量统计、数据分析、国贸、财会等专业的学习宝库,各类资料应有尽有。
来自五湖四海的经管达人----已经有上千万的经管人来到这里,你可以找到任何学科方向、有共同话题的朋友。
经管之家(原人大经济论坛),跨越高校的围墙,带你走进经管知识的新世界。
扫描下方二维码下载并注册APP
本文关键词:

本文论坛网址:https://bbs.pinggu.org/thread-2341351-1-1.html

人气文章

1.凡人大经济论坛-经管之家转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
经管之家 人大经济论坛 大学 专业 手机版