我有一份患者数据和他们的访问日期。我将在他们访问的90天内了解他们行为的变化。
我有这样的数据。,
PERSN Reg_date out_date Formulartyp
225 11-apr-12 03-jun-13 Gles
225 03-sep-13 06-sep-13 Täta
458 13-mar-13 03-apr-13 Täta
458 22-jul-13 07-aug-13 Täta
458 22-aug-13 28-nov-13 Gles
559 11OCT2013 25OCT2013 Täta
559 01-nov-13 04-dec-13 Gles
897 08-feb-12 11-jan-13 Gles
897 18-jan-13 05-feb-13 Täta
897 26-feb-13 30-apr-13 Täta
897 14MAY2013 01OCT2013 Gles
897 08OCT2013 29OCT2013 Täta
565 08-jan-13 17-jun-13 Gles
565 03-sep-13 27-dec-13 Gles
878 07-dec-12 09-jan-13 Täta
878 16-jan-13 31MAY2013 Gles
554 19-dec-12 08-jan-13 Gles
554 22-mar-13 16-apr-13 Täta
554 15MAY2013 16-jul-13 Gles
554 09-sep-13 17-sep-13 Täta
554 24-sep-13 29OCT2013 Gles
我想找出out_date和下一个reg_date之间的差异(以天为单位),然后找出是否存在formulartyp的差异。
我正在尝试使用first.persnr和lag函数,但我无法得到它。
答案 0 :(得分:0)
一种方法是使用LAG功能...... 我正在给出一个粗略的代码。根据您的要求修改
data compared;
attrib date_diff formulartyp_diff length=8.;
set indata;
prev_persn=lag(persn);
prev_out=lag(out_date);
if(persn eq prev_persn and formulartyp ne lag(formulartyp)) then do;
formulartyp_diff=1;
end;
if(persn eq prev_persn) then do;
date_diff=input(reg_date,date9.)-input(prev_out,date9.);
end;
run;
答案 1 :(得分:0)
我倾向于不使用滞后函数,我更喜欢使用retain从前一个观察中获取变量的值。分配需要在数据步骤中完成。 您需要使用适当的信息将日期转换为sas日期(自1960年1月1日以来的天数)以计算日差。数据需要按患者和日期排序。
data visits;
input
@1 PERSN 3.
@5 Reg_date date9.
@17 out_date date9.
@29 Formulartyp $4.
;
format Reg_date out_date date9.;
datalines;
225 11-apr-12 03-jun-13 Gles
225 03-sep-13 06-sep-13 Täta
458 13-mar-13 03-apr-13 Täta
458 22-jul-13 07-aug-13 Täta
458 22-aug-13 28-nov-13 Gles
559 11OCT2013 25OCT2013 Täta
559 01-nov-13 04-dec-13 Gles
897 08-feb-12 11-jan-13 Gles
897 18-jan-13 05-feb-13 Täta
897 26-feb-13 30-apr-13 Täta
897 14MAY2013 01OCT2013 Gles
897 08OCT2013 29OCT2013 Täta
565 08-jan-13 17-jun-13 Gles
565 03-sep-13 27-dec-13 Gles
878 07-dec-12 09-jan-13 Täta
878 16-jan-13 31MAY2013 Gles
554 19-dec-12 08-jan-13 Gles
554 22-mar-13 16-apr-13 Täta
554 15MAY2013 16-jul-13 Gles
554 09-sep-13 17-sep-13 Täta
554 24-sep-13 29OCT2013 Gles
;
run;
proc sort data=visits;
by PERSN Reg_date;
run;
data visits;
set visits;
by PERSN;
retain LagOut_date LagFormulartyp;
if not first.PERSN then do;
NDays=Reg_date-LagOut_date;
/*boolean variable:1 if the condition is satisfied, 0 otherwise*/
Change=(LagFormulartyp^=Formulartyp);
end;
LagFormulartyp=Formulartyp;
LagOut_date=Out_date;
drop LagFormulartyp LagOut_date;
run;
如果您愿意,可以在NDays> = 90
上进行过滤