|
|
7#

楼主 |
发表于 2009-12-18 09:59:09
|
只看该作者
Re: 如何多对个数据集进行横向合并?
[code:zmpac0jf]data raw;
input name $ time yymmdd8. value;
format time yymmdd8.;
datalines;
a 20000308 1
a 20000603 2
a 20011028 3
a 20001218 3
b 20040308 3
b 20040604 7
b 20041206 3
b 20050213 67
z 20050308 7
z 20050608 55
z 20051208 6
z 20060104 33
;
proc sql;
create table distin as select distinct
name from raw;
quit;
data distin;
set distin;
call symput('name_num',_n_);
v=symget('name_num');
dataname=catx('_','data',v);
run;
proc sql;
create table raw_num as select raw.*,
coalesce(raw.name,distin.name) as name,
distin.*
from raw,distin
where raw.name=distin.name;
quit;
data _null_;
set raw_num;
by name;
if first.name then do;
call execute('data '||dataname||';
set raw_num;run;');
end;
run;
data final;
delete;
%macro mergr(sum_num);
%do i=1 %to &sum_num;
data data_%eval(&i);
set data_%eval(&i);
if v^=%eval(&i) then delete;
rename name=name&i time=time&i value=value&i;
run;
data final;
merge final data_%eval(&i);
run;
%end;
proc datasets nolist;
delete data:;
run;
quit;
%mend;
data _null_;
call execute('%mergr(3)');run;
data final;
set final;
drop v dataname;
run;
[/code:zmpac0jf] |
|