|
|
9#

楼主 |
发表于 2010-2-16 12:47:54
|
只看该作者
Re: 求助:Macro或者循环
[code:306uwv4n]
data raw;
input m1 $ m2 $;
datalines;
A01 A02
A01 A03
A01 A04
A02 A03
A02 A04
A03 A04
A05 A07
A06 A07
A07 A08
A11 A13
A14 A15
A15 A16
A09 A10
A10 A11
A03 A07
A03 A15
;
proc sql;
create table group_list as
select m1 as m from raw
union
select m2 as m from raw;
quit;
data group_list;
set group_list end=eof;
id=_n_;
group=_n_;
if eof then call symputx('nobs',_n_);
run;
data final(drop=m rc);
length m $8;
if _n_ = 1 then do;
declare hash h(dataset:"group_list",hashexp:16);
h.defineKey('m');
h.defineData('id');
h.defineDone();
call missing(m,id);
end;
set raw;
rc=h.find(key:m1);
id1=id;
rc=h.find(key:m2);
rename id=id2;
run;
data _null_;
length m $8;
if _n_=1 then do;
declare hash h(dataset:"group_list",ordered:'yes',hashexp:16);
h.defineKey('id');
h.defineData('id','group','m');
h.defineDone();
call missing(id,group,m);
end;
set final end=eof;
rc=h.find(key:id2);
old_group_val=group;
rc=h.find(key:id1);
new_group_val=group;
do i=1 to &nobs;
rc=h.find(key:i);
if group=old_group_val then rc=h.replace(key:i,data:i,data:new_group_val,data:m);
end;
if eof then rc=h.output(dataset:'group_list');
run;
data final(keep=m1 m2 group);
retain m1 m2 group;
if _n_ = 1 then do;
declare hash h(dataset:"group_list",hashexp:16);
h.defineKey('id');
h.defineData('group');
h.defineDone();
call missing(id,group);
end;
set final;
rc=h.find(key:id1);
run;[/code:306uwv4n] |
|