尝试创建一个变量,用于计算当前记录日期与上一记录日期之间的天数(按patid
分组)。在我的尝试中,我显然遗漏了一些东西,不幸的是我做了很多东西。
任何答案都将不胜感激。
data sample;
informat patid $1. test_date mmddyy10.;
input patid test_date;
format test_date date9.;
datalines;
a 10/01/2005
a 10/05/2005
a 10/17/2005
b 10/02/2005
b 10/18/2005
b 10/22/2005
;
run;
我希望我的数据集看起来像这样:
data desire;
informat patid $1. test_date mmddyy10. dif;
input patid test_date dif;
format test_date date9.;
datalines;
a 10/01/2005 0
a 10/05/2005 4
a 10/17/2005 12
b 10/02/2005 0
b 10/18/2005 16
b 10/22/2005 4
;
run;
我的尝试:
data increment;
set sample;
by patid;
if first.patid then do;
dys_btwn_trmnt = 0;
end;
else do;
dys_btwn_trmnt=dif(test_date);
end;
run;
然后我想我可能需要保留,但没有成功 -
data increment;
set sample;
by patid;
retain dys_btwn_trmnt 0;
if first.patid then do;
dys_btwn_trmnt = 0;
end;
else do;
dys_btwn_trmnt=dif(test_date);
end;
run;
答案 0 :(得分:4)
这是有条件地执行滞后函数(在本例中为DIF()
函数)时会发生什么的示例。滞后函数返回前一次观察的值。相反,它们从通过执行函数创建的堆栈返回值。通过不对每个观察执行该函数,并非所有值都被放置到堆栈上。
简单的解决方案是为每个观察运行DIF()
函数,然后使用FIRST。条件来固定组中第一次观察的值。
data increment;
set sample;
by patid;
dys_btwn_trmnt=dif(test_date);
if first.patid then dys_btwn_trmnt=0;
run;