我在sas中合并了两个以上的数据集,但输出并不是我预期的。原始数据集是:
data test;
input id days value date:date9.;
format date date9.;
datalines;
128330 150 3903053 01jul2016
;
run;
合并的基础:
data base1;
input id days1 value1 date1:date9.;
format date1 date9.;
datalines;
128330 0 3849050 01jun2015
128330 0 3827305 01jul2015
128330 0 3822779 01aug2015
128330 30 3771383 01feb2015
128330 0 3756117 01jan2015
128330 0 . 01nov2015
128330 0 3818253 01sep2015
128330 0 . 01oct2015
128330 90 3668595 01may2015
128330 60 3705683 01apr2015
128330 30 3690417 01mar2015
128330 0 3802639 01dec2015
;
run;
data base2;
input id days1 value1 date1:ddmmyy10.;
format date1 date9.;
datalines;
128330 0 3805129 1/01/2016
128330 0 3887603 1/02/2016
128330 30 3890093 1/03/2016
128330 60 3892583 1/04/2016
128330 90 3896073 1/05/2016
128330 120 3899563 1/06/2016
128330 150 3903053 1/07/2016
128330 180 3906543 1/08/2016
128330 210 3906543 1/09/2016
128330 240 3906543 1/10/2016
128330 270 3906543 1/11/2016
128330 300 3906543 1/12/2016
;
run;
data base3;
input id days1 value1 date1:ddmmyy10.;
format date1 date9.;
datalines;
128330 330 3906543 1/01/2017
128330 360 3906543 1/02/2017
128330 390 3906543 1/03/2017
128330 420 3906543 1/04/2017
128330 450 3906543 1/05/2017
128330 480 3906543 1/06/2017
128330 510 3906543 1/07/2017
128330 540 3906543 1/08/2017
128330 570 3906543 1/09/2017
128330 600 3906543 1/10/2017
128330 630 3906543 1/11/2017
;
run;
合并
data merge1;
merge test(in=info) base1 base2 base3;
by id;
if info;
run;
我期待:
我需要合并,因为我的工作基础有数千条记录,我需要通过id合并数据集。 谢谢你的帮助。
答案 0 :(得分:1)
您不能合并这些数据集,因为您有多个数据集,每个ID有多个观察值。在这种情况下,MERGE将按顺序匹配观察值,并且值将被覆盖。请注意,如果您的BASEx数据集各自具有不同的ID值集,那么您从未从一个BASEx数据集中观察到与来自不同BASEx的观测值合并的观测值,那么它实际上可以正常工作。
所以你有一个格式的三个数据集,每个数据集可以有多个你想先连接的id,然后与每个id只有一个观察的其他数据集合并。
data base ;
set base1-base3 ;
by id;
run;
data want ;
merge test base ;
by id;
run;
如果您担心磁盘空间,可以让第一个数据步骤生成视图而不是数据集。
data base / view=base ;
set base1-base3 ;
by id;
run;