楼主: pussqr
2416 11

[原创博文] 求助合并数据集 [推广有奖]

  • 0关注
  • 0粉丝

大专生

70%

还不是VIP/贵宾

-

威望
0
论坛币
53 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
313 点
帖子
54
精华
0
在线时间
22 小时
注册时间
2008-7-21
最后登录
2014-5-5

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
有两个数据集a和b,他们的列是相适配的,但是b中有a中一部分id,我想合并这两个数据集
a是这样的:
id     x1    x2   x3
1      8     20   3
3      3     0     8
4      2     4     0

b 是这样的:
id   x1   x2  x3
1    0     7    3
4    9    0     5
5    8    5     9

我想合并a和b,得出的结果是这样的
id   x1   x2  x3
1    8     27  6
3   3     0     8
4   11   4     5
5    8    5     9



请问这个应该怎么办?就是id相同的就相加,不相同的就加入新条目就好。谢谢了
二维码

扫码加我 拉你入群

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

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

关键词:合并数据 数据集 怎么办

回帖推荐

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

本帖被以下文库推荐

沙发
yugao1986 发表于 2011-8-19 19:30:32 |只看作者 |坛友微信交流群
  1. data a;
  2. input id $ x1 x2 x3;
  3. cards;
  4. 1      8     20   3
  5. 3      3     0     8
  6. 4      2     4     0
  7. ;
  8. data b;
  9. input id $ x1 x2 x3;
  10. datalines;
  11. 1    0     7    3
  12. 4    9    0     5
  13. 5    8    5     9
  14. ;
  15. data c;
  16.    set a b;
  17. run;
  18. proc sql;
  19. create table d as
  20. select distinct id,
  21.        sum(x1) as x1,
  22.            sum(x2) as x2,
  23.            sum(x3) as x3
  24. from c
  25. group by id;
  26. quit;
复制代码
已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 3 精彩帖子

总评分: 经验 + 3  论坛币 + 3   查看全部评分

三人行必有我师

使用道具

藤椅
zhangzachary 发表于 2011-8-19 19:56:26 |只看作者 |坛友微信交流群
楼上的SQL步骤也可以用以下程序代替,得出相同结果:
  1. proc sort data=c;
  2. by id;
  3. run;

  4. proc summary data=c;
  5. var x1 x2 x3;
  6. by id;
  7. output out=d(drop=_freq_ _type_) sum=;
  8. run;
复制代码
寒冰凤凰 My blog: http://blog.sina.com.cn/u/1058955485

使用道具

板凳
shenliang_111 发表于 2011-8-19 20:50:03 |只看作者 |坛友微信交流群
自己写的很麻烦的程序,,,唉...望楼主参考
data new(drop=x11-x33);
merge a(in=ina)  b(rename=(x1=x11 x2=x22  x3=x33));            
by id;
if ina then do;
x1=sum(x1,x11);
x2=sum(x2,x22);
x3=sum(x3,x33);
end;
else do;
x1=x11;
x2=x22;
x3=x33;
end;
run;

使用道具

报纸
leedx 发表于 2011-8-20 08:59:52 |只看作者 |坛友微信交流群
学习了,不同的解决思路~~

使用道具

地板
bobguy 发表于 2011-8-20 12:16:04 |只看作者 |坛友微信交流群
yugao1986 发表于 2011-8-19 19:30
Here are a couple of ways to do it.

data a;
input id $ x1 x2 x3;
cards;
1      8     20   3
3      3     0     8
4      2     4     0
;
data b;
input id $ x1 x2 x3;
datalines;
1    0     7    3
4    9    0     5
5    8    5     9
;

data want(drop=x11 x22 x33);
  merge a b(rename=(x1=x11 x2=x22 x3=x33));
  by id;
  x1=sum(x1,x11);x2=sum(x2,x22);x3=sum(x3,x33);
  run;

proc print;run;

proc sql;
  select coalesce(a.id,b.id) ,sum(a.x1,b.x1) as x1 ,sum(a.x2,b.x2) as x2,sum(a.x3,b.x3) as x3
  from a
  full join b on a.id=b.id
  order by 1
  ;
  quit;


使用道具

7
yugao1986 发表于 2011-8-21 21:13:48 |只看作者 |坛友微信交流群
bobguy 发表于 2011-8-20 12:16
Here are a couple of ways to do it.

data a;
学习了,"coalesce",记一下
三人行必有我师

使用道具

8
C100 发表于 2011-8-22 15:35:47 |只看作者 |坛友微信交流群
学习了·

使用道具

9
yxy881009 发表于 2011-8-22 16:22:07 |只看作者 |坛友微信交流群
学习了,不错

使用道具

10
pussqr 发表于 2011-8-23 15:02:56 |只看作者 |坛友微信交流群
哇塞,谢谢众多高手!

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-5-1 23:37