楼主: Polaris008
14963 14

[问答] 求助:如何比较两个表格中的重复数据并删除重复数据 [推广有奖]

11
lanyajia 发表于 2012-1-10 17:58:00
以上解决问题的方法有一个共同的局限性,如果变量有几十个,命令就会显得冗长而不直观。

推荐的思路是:将两个数据表接在一起,然后用SQL查询语句查出唯一记录即可。标准的SQL查询语句中都带有dictinct关键字,提供了查询不重复记录的途径。

先将a表和b表都纵向连接成了c表,c表中包含有重复记录,查询语句为:

select dictinct * from c

这样就搞定了,查出的是不包含重复记录的数据。 此法最大的优点不论数据表有多少变量都无所谓。

我没有用过SAS的SQL,但上面语句在Access 或 Visual Foxpro 这类提供了SQL的软件中均可实现,我估计SAS的SQL语句中应该有dictinct相应的关键字 。

12
lanyajia 发表于 2012-1-10 18:06:48
更正一下:上面有键入错误,查询不重复记录的关键字是distinct,而不是dictinct. 更正后的SQL语句为

SELECT distinct * from c

特说明。

13
mymine 发表于 2012-1-11 08:15:42
SQL语句中
SELECT distinct
是将整笔记录完全一致的情况下只保留一条
如果将a、b合同并成C,再用SELECT distinct
最终结果是将c中出现多次的完全相同的记录只保留一条
这样的结果达不到要求的呀?

14
lanyajia 发表于 2012-1-11 09:28:33
我理解提问者的意图是删除合并表中所有重复数据。如果仅仅是处理两个表重复的部分,不对a表和b表本身的重复数据进行处理,采用SQL的子查询是较优方法。

另外,我查明了SAS的SQL提供distinct关键字。

15
小麦芽的简单 发表于 2012-1-12 22:53:09
data a;
input name $ sex $ idcard $20.;
cards;
张三  男 110105199001011212
李四  男 120103199002011100
王二  男 110104199203040507
;
data b;
input name $ sex $ idcard $20.;
cards;
张三  男 110105199001011212

;

proc sql ;
create table  last as
select * from a
except  /*except可以删掉表a中和表b相同的部分*/
select * from b;
quit;

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-1 18:37