多谢帮助作者: shiyiming 时间: 2010-1-19 02:09 标题: Re: 求助:有哪位会写macro或者多重循环, 在线等,谢谢 days1-days2 ?作者: shiyiming 时间: 2010-1-22 11:32 标题: Re: 求助:有哪位会写macro或者多重循环, 在线等,谢谢 看起来不是很复杂,但是pair怎么赋值?没说清楚?
用%do语句重复应该就可以搞定了。作者: shiyiming 时间: 2010-1-25 04:18 标题: Re: 求助:有哪位会写macro或者多重循环, 在线等,谢谢 问题看起来并不难,但你的问题有点看不太懂.
比如:对于diagnosis=333有三个病人(AAA,BBB,CCC)都有,那么days1/days2该如何定义? 是两两配对(共有三个m值),还是其他定义? 请把问题说得清楚明了一点.作者: shiyiming 时间: 2010-1-26 08:41 标题: 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]作者: shiyiming 时间: 2010-1-26 09:11 标题: Re: 求助:有哪位会写macro或者多重循环, 在线等,谢谢 the last procedure should be replaced by following code according to your request. and hope it is helpful.
[code:ns20t9sl]
proc sql;/*calculate m values and sum them up based on related ids*/
create table c(drop=m) as
select id,id3,p/(abs(d-d2)) as m, sum(calculated m) as sum_m
from bb
group by id3;
quit;[/code:ns20t9sl]