全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
2793 11
2011-08-19
有两个数据集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相同的就相加,不相同的就加入新条目就好。谢谢了
二维码

扫码加我 拉你入群

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

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

全部回复
2011-8-19 19:30:32
复制代码
二维码

扫码加我 拉你入群

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

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

2011-8-19 19:56:26
楼上的SQL步骤也可以用以下程序代替,得出相同结果:
复制代码
二维码

扫码加我 拉你入群

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

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

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;
二维码

扫码加我 拉你入群

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

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

2011-8-20 08:59:52
学习了,不同的解决思路~~
二维码

扫码加我 拉你入群

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

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

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;


二维码

扫码加我 拉你入群

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

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

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群