楼主: shenliang_111
5016 10

[原创博文] 数据相减的办法 [推广有奖]

  • 3关注
  • 12粉丝

教授

15%

还不是VIP/贵宾

-

威望
0
论坛币
14 个
通用积分
0.4174
学术水平
20 点
热心指数
26 点
信用等级
12 点
经验
17989 点
帖子
478
精华
0
在线时间
1627 小时
注册时间
2011-2-24
最后登录
2025-8-3

楼主
shenliang_111 发表于 2011-8-23 21:47:11 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
对于数据集间的相加,我们可以采用merge,sql中的join或者hash object 等等诸多方法,本人思考的是数据集间如何实现相减,比如
我有数据集
data a
x  y
1 2
3 4
5 6
7 8
9 0

有数据集b
x y
1 2
3 4
7 8

如何实现相减,即构造新的数据集A-B 为
x  y
5 6
9 0
呢?
求高人帮忙
二维码

扫码加我 拉你入群

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

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

关键词:object Merge 如何实现 Data HASH 如何

回帖推荐

yugao1986 发表于3楼  查看完整内容

本帖被以下文库推荐

沙发
Actree 发表于 2011-8-23 21:52:42
很有创意,不错,等到SAS11.6吧

藤椅
yugao1986 发表于 2011-8-23 22:09:27
  1. data a;
  2. input x y;
  3. cards;
  4. 1 2
  5. 3 4
  6. 5 6
  7. 7 8
  8. 9 0

  9. data b;
  10. input x y;
  11. cards;
  12. 1 2
  13. 3 4
  14. 7 8

  15. run;
  16. proc sql;
  17. create table need as
  18. select a.*
  19. from a as a
  20. left join
  21.   b as b
  22.   on a.x=b.x
  23.   where missing(b.x);
  24. quit;

  25. /* or */
  26. proc sql noprint;
  27. create table new as
  28.    select x,y
  29.       from a
  30.       where x not in
  31.          (select x from b);
  32. quit;
复制代码
已有 2 人评分学术水平 热心指数 信用等级 收起 理由
Actree + 1 + 1 + 1 不错
shenliang_111 + 1 + 1 + 1 精彩帖子

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

三人行必有我师

板凳
我不是帅哥 发表于 2011-8-23 22:19:46
data c;
merge a b(in=in1);
by x y;
if not in1;
run;
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
Actree + 1 + 1 + 1 精彩帖子

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

报纸
ntsean 发表于 2011-8-24 07:48:37
用proc sql 的except就可以啦

proc sql;
select * from a
except
select * from b;
quit;

已有 1 人评分学术水平 热心指数 信用等级 收起 理由
shenliang_111 + 1 + 1 + 1 观点有启发

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

地板
shenliang_111 发表于 2011-8-24 10:00:12
ntsean 发表于 2011-8-24 07:48
用proc sql 的except就可以啦

proc sql;
不错..我都忘了SQL里有这个...嘻嘻...

7
guanglei 发表于 2011-8-24 11:43:57
shenliang_111 发表于 2011-8-24 10:00
不错..我都忘了SQL里有这个...嘻嘻...
  1. data a;
  2. input x @@ y;
  3. cards;
  4. 1 2
  5. 3 4
  6. 5 6
  7. 7 8
  8. 9 0
  9. ;
  10. run;

  11. data b;
  12. input x@@ y;
  13. cards;
  14. 1 2
  15. 3 4
  16. 7 8
  17. ;
  18. run;

  19. proc sql;
  20.         create table c as
  21.         select * from a  where x not in (select x from b);
  22. quit;
复制代码


三人行,必有我师焉;择其善者而从之,其不善者而改之

8
soporaeternus 发表于 2011-8-24 12:14:22
楼上,如果以多列同时相同为相同就不行了
Let them be hard, but never unjust

9
dyes0506 发表于 2011-8-25 10:32:36
proc sql;
    select * from a
except corr
   select * from b
;
quit;
从数据到结论过程关键的是人不是软件......

10
guanglei 发表于 2011-8-26 14:58:58
楼主,该种类型的问题也可以用双指针的方法来做,效率要比Excel高很多。可以参考斑竹的那本数据挖掘的书,呵呵

  1. data a;
  2. input x @@ y;
  3. cards;
  4. 1 2
  5. 3 4
  6. 5 6
  7. 7 8
  8. 9 0
  9. ;
  10. run;

  11. data b;
  12. input  x@@ y;
  13. cards;
  14. 1 2
  15. 3 4
  16. 7 8
  17. ;
  18. run;

  19. proc datasets;
  20.         modify b;
  21.         index create idx =(x y)/ nomiss unique;
  22. quit;

  23. data c;
  24. set a;
  25. set b key = idx;
  26. if _Error_ = 1 then do;
  27.         output;
  28. end;
  29. run;
复制代码


三人行,必有我师焉;择其善者而从之,其不善者而改之

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

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