楼主: nomad5
2867 12

求高手写代码 [推广有奖]

11
ntsean 发表于 2011-7-10 10:32:43
................................................

12
ntsean 发表于 2011-7-10 10:42:10
第三第四个if有问题吧
coolsky2004 发表于 2011-7-7 22:41
/**************** begin*****************/
求高手写代码,附件是数据集。

要求:FLAG= "Yes" , in the following  cases:
   
(1) TYPE="Vomiting"  ;
   
(2) TYPE="Retching",  and its duration >= 5 minutes ;
   
(3) TYPE="Retching",  and it is preceded or followed by a "Vomiting", and the time  between "Retching" and "Vomiting"

13
nomad5 发表于 2011-7-14 09:58:13
根据别人写的改的,大家点评一下,合理吗?

proc sort data=test.demo out=demo;
by id descending stdt descending endt;
run;

data aa;
set demo;
by id descending stdt descending endt;
type_1=lag1(type); stdt_1=lag1(stdt); endt_1=lag1(endt);
type_2=lag2(type); stdt_2=lag2(stdt); endt_2=lag2(endt);
type_3=lag3(type); stdt_3=lag3(stdt); endt_3=lag3(endt);
type_4=lag4(type); stdt_4=lag4(stdt); endt_4=lag4(endt);
type_5=lag5(type); stdt_5=lag5(stdt); endt_5=lag5(endt);
if first.id then do;
type_1=''; type_2='';type_3='';type_4='';type_5='';
stdt_1=.; stdt_2=.; stdt_3=.; stdt_4=.; stdt_5=.;
endt_1=.; endt_2=.; endt_3=.; endt_4=.; endt_5=.;
end;


if type='Vomiting' then flag='yes';

if type='Retching' then do;
  if endt-stdt>=5*60 then flag='yes';
  if type_1='Vomiting' and stdt-endt_1<=1*60 then flag='yes';
  if type_1='Retching' and endt_1-stdt<=1*60 then do;            if type_2='Vomiting' and endt-stdt_1>=5*60 then flag='yes';
    else if type_2='Retching' and endt_2-stdt_1<=1*60 then do;
      if type_3='Vomiting' and endt-stdt_2>=5*60 then flag='yes';
      else if type_3='Retching' and endt_3-stdt_2<=1*60 then do;
         if type_4='Vomiting' and endt-stdt_3>=5*60 then flag='yes';
        else if type_4='Retching' and endt_4-stdt_3<=1*60 then do;
           if type_5='Vomiting' and endt-stdt_4>=5*60 then flag='yes';
          else if type_5='Retching' and endt_5-stdt_4<=1*60 then flag='yes';
        end;
      end;
    end;
  end;
end;

run;

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-30 10:19