|
|
5#

楼主 |
发表于 2010-1-26 08:41:55
|
只看该作者
Re: 求助:有哪位会写macro或者多重循环, 在线等,谢谢
I did not use MACRO/multiple LOOPs, but a normal SAS.
[code:3l839s5r]data a;
input id $ diag d p;
cards;
a 1 12 .1
a 2 8 .2
a 3 4 .3
b 2 14 .2
b 3 23 .3
c 1 21 .1
c 2 29 .2
d 2 10 .2
;
run;
proc sort data=a; by id; run;
data aa; /*give id a new numeric name*/
do i=1 by 1 until (last.id);
set a;
by id;retain kg;
if first.id then k=1;
else k=0;
kg+k;
id1=kg;
output;
end;
run;
proc sql;/*find the pairs based on same diag*/
create table b(drop=i k kg) as
select d1.*,d2.id1 as id2 ,d2.d as d2
from aa d1 left join aa d2
on d1.diag=d2.diag
where d1.id1^=d2.id1
order by diag;
quit;
data bb; set b;/*create a new id3 based on related two ids*/
id3=catx('_',min(id1,id2),max(id1,id2));
run;
proc sql;/*calculate m values and sum them up based on related ids*/
create table c as
select *,p/(abs(d-d2)) as m, sum(calculated m) as sum_m
from bb
group by id3;
quit;
c:
[/code:3l839s5r] |
|