SAS first.dot last.dot date calculation

时间:2016-12-29 20:32:47

标签: sas

尝试创建一个变量,用于计算当前记录日期与上一记录日期之间的天数(按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;

1 个答案:

答案 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;