楼主: Polaris008
14964 14

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

  • 0关注
  • 0粉丝

讲师

14%

还不是VIP/贵宾

-

威望
0
论坛币
8773 个
通用积分
35.8182
学术水平
1 点
热心指数
1 点
信用等级
1 点
经验
1946 点
帖子
112
精华
0
在线时间
746 小时
注册时间
2008-8-19
最后登录
2024-9-12

楼主
Polaris008 发表于 2012-1-9 00:10:00 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
假设有表a和表b,
表a
name     sex    idcard     
张三       男      110105199001011212
李四       男      120103199002011100
王二       男      110104199203040507

表b
name     sex    idcard     
张三       男      110105199001011212

如何生成表C,排除表a和表b中变量name和idcard相同的部分产生。

或者简单说就是删除表a中,与表b在name和idcard重复部分后生成表c

求SAS程序,谢谢。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:重复数 sas程序 name card IDC 表格 如何

回帖推荐

本帖被以下文库推荐

沙发
王俊超 发表于 2012-1-9 01:11:48
EXCEL可以V下  SAS就不清楚了

藤椅
Polaris008 发表于 2012-1-9 07:29:20
Excel vlookup可以弄,但数据库比较大,速度太慢,SAS试了好几次都没搞定。

板凳
darkworld 发表于 2012-1-9 09:56:27
data c;
   merge a(in=c) b(in=d);
   by idcard;
   if c and not d;
run;

报纸
darkworld 发表于 2012-1-9 09:57:14
dame, the data file name can not be c, whatever, i think you can get the idea.

地板
shenliang_111 发表于 2012-1-9 10:53:33
  1. data a;
  2. input  name $ sex $ idcard $20.;
  3. cards;
  4. 张三       男      110105199001011212
  5. 李四       男      120103199002011100
  6. 王二       男      110104199203040507
  7. ;
  8. data b;
  9. input name $ sex $ idcard $20.;
  10. cards;
  11. 张三       男      110105199001011212
  12. 沈沈       女      111111111111111111
  13. ;
  14. /*method one*/
  15. data a;
  16. modify a b;
  17. by name idcard;
  18. if _iorc_=0 then remove;
  19. else _error_=0;
  20. run;
  21. /*method two*/
  22. data result;
  23. if 0 then set b;
  24. if _n_=1 then do;
  25.    declare hash h(dataset:'b');
  26.    h.definekey('name','idcard');
  27.    h.definedata('name','sex','idcard');
  28.    h.definedone();
  29. end;
  30. set a;
  31. if h.find()=0 then delete;
  32. else output;
  33. run;
  34. /*method two.2*/
  35. data _null_;
  36. if 0 then set a;
  37. if _n_=1 then do;
  38.    declare hash h(dataset:'a');
  39.    h.definekey('name','idcard');
  40.    h.definedata('name','sex','idcard');
  41.    h.definedone();
  42. end;
  43. set b end=last;
  44. if h.find()=0 then h.remove();
  45. if last then h.output(dataset:'result2');
  46. run;
  47. /*method three---效率低*/
  48. proc sql noprint;
  49. create table result as
  50. select a.* from
  51. a left join b
  52. on a.name=b.name and a.idcard=b.idcard
  53. group by a.name,a.idcard
  54. having count(b.name) eq 0;
  55. quit;
复制代码
已有 2 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
bakoll + 3 + 3 精彩帖子
Polaris008 + 1 + 1 + 1 好的意见建议

总评分: 经验 + 3  论坛币 + 3  学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

7
Polaris008 发表于 2012-1-9 22:36:24
shenliang_111 发表于 2012-1-9 10:53
非常感谢,学习了。

8
baojiwolong 发表于 2012-1-10 11:57:46
Really nice!!!

9
mymine 发表于 2012-1-10 15:16:04
来个比较简单的逻辑运算

data a;
set a;
cls=compress(name||'*'||idcard);
run;
data b;
set b;
cls=compress(name||'*'||idcard);
run;
proc sql;
create table c as
select *
from a
where cls not in (select cls from b);
quit;
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
shenliang_111 + 1 + 1 + 1 思想很有启发

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

10
shenliang_111 发表于 2012-1-10 15:50:39
mymine 发表于 2012-1-10 15:16
来个比较简单的逻辑运算

data a;
  1. proc sql;
  2.       select * from
  3.         (select a.*,catx(' ',name,idcard) as key from a) aa  
  4.             where key not in(select key from (select b.*,catx(' ',name,idcard) as key from b) as bb );
  5.         quit;
复制代码
这样更经凑些!哈哈

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

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