需要解决的问题:
原始数据sample:
ID entryTime drug1 time1 drug2 time2
1 13SEP2013 D1 14SEP2013 D2 14SEP2013
2 15OCT2012 T2 16OCT2013 D2 15SEP2013
问题:看看加入试验后(entryTime),多久第一次使用D开头药物(drug1,drug2)。
我用的方法是:
data sample;
set sample;
array drugType[2] drug;
array drugtime[2] time;
*定义新的使用药物时间;
array NewDrugTime[2] newTime1 newTime2;
*把使用了D开头药物的时间写入新的使用药物时间内;
do i=1 to dim(drugType);
if drugType{i} ne "T2" then do;
NewDrugTime{i}=drugTime{i};
return;
end;
end;
run;
data sample ;
set sample;
array NewDrugTime[2] newTime1 newTime2;
*找到最早使用D开头药物的时间,并和进入试验时间相减,得到进入试验后多久第一次使用D开头药物;
minDate=min(of NewDrugTime[*]);/*找最早使用D药物的时间*/
if minDate>=entryTime then do;
FirstDrugD=minDate-entryTime;
end;
run;
以上的code虽然可以达到目的,但感觉太累赘。我尝试把两段code合并在一个data step工作,但发现minDate跑出来的是空值,我怀疑是在第一个data里使用minDate=min(of NewDrugTime[*])时,NewDrugTime还没有写入值。
不知道有没有更好的办法优化下这段代码。