全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
6710 10
2009-12-18
现在有两个数据集,数据集(1)同一个id有很多行不同的数据,每一个id的数据行数都不同,数据集(2)中每个id号只有一行数据。


数据集(1):
Id       x       y       z
111    61    70    55
111    50    33    26
132    56    78    36
132    90    84    56
132    59    43    78
253    44    96    86
145    99    40    73
145   100   69    77

数据集(2):
Id       aa      bb      cc
111   5.23   3.44   0.45
132   3.02   4.78   9.40
145   6.32   2.85   5.66

现在想在数据集(1)中插入3列,当数据集(2)的id和(1)中的id相同时,就给(1)中的同一id的每行数据都赋上(2)中3个变量的值,生成数据集(3)。
注:由于数据量非常大,所以并不知道数据集(1)中每个id实际有多少行。另外,(1)和(2)中的id并不是完全相等,有些(2)中有的,可能(1)中没有,也有可能是反过来的情况。

数据集(3):
Id         aa      bb      cc     x      y      z
111   5.23   3.44   0.45   61   70   55
111   5.23   3.44   0.45   50   33   26
132   3.02   4.78   9.40   56   78   36
132   3.02   4.78   9.40   90   84   56
132   3.02   4.78   9.40   59   43   78
253                                 44   96   86
145   6.32   2.85   5.66   99   40   73
145   6.32   2.85   5.66   10   69   77

我是新手,很多不懂,希望各位大侠帮帮忙,谢谢了!
二维码

扫码加我 拉你入群

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

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

全部回复
2009-12-18 16:19:51
用stata可以试试,
joinby  id using shujuji2
二维码

扫码加我 拉你入群

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

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

2009-12-18 16:49:50
谢谢版主建议!
不过我数据有上亿条,我不知道stata是否可以装下,另外就是,我也不会用stata,sas都是刚刚开始学的……不知道sas是否有命令可以实现我想要的结果?
二维码

扫码加我 拉你入群

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

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

2009-12-18 18:29:22
data a;
input Id       x       y       z;n=_n_;
cards;
111    61    70    55
111    50    33    26
132    56    78    36
132    90    84    56
132    59    43    78
253    44    96    86
145    99    40    73
145   100   69    77
;run;
data b;
input Id       aa      bb      cc;
cards;
111   5.23   3.44   0.45
132   3.02   4.78   9.40
145   6.32   2.85   5.66
;run;
proc sql noprint;create table tmp as
select * from A left join B on A.ID = b.ID order n;
create table final as select id,aa,bb,cc,x,y,z from tmp;
quit;
二维码

扫码加我 拉你入群

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

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

2009-12-19 12:57:08
1# redaring

Here is a simple one sql. Note there is no guarantee of ordering of SQL return values without an 'order by'.

Hope this helps.

data a;
input Id       x       y       z;
cards;
111    61    70    55
111    50    33    26
132    56    78    36
132    90    84    56
132    59    43    78
253    44    96    86
145    99    40    73
145   100   69    77
;

data b;
input Id       aa      bb      cc;
cards;
111   5.23   3.44   0.45
132   3.02   4.78   9.40
145   6.32   2.85   5.66
;

proc sql;
create table tmp as
select coalesce(a.Id, b.Id) as Id,  b.aa,  b.bb,  b.cc, a.x,  a.y, a.z
from  b as b
full join A as a  on A.ID = b.ID
;
quit;

proc  print data=tmp; run;
二维码

扫码加我 拉你入群

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

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

2009-12-19 13:35:01
学习学习 都很实用  有时间自己在揣摩一下
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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