如何找到SAS中每个组的观察之间的持续时间?

时间:2019-05-10 12:12:22

标签: sas lag duration

我想按组计算两次观察之间的持续时间。到目前为止,我已经尝试在数据步骤中使用by语句使用滞后。但是,这不能创建我想要的结果。

假设我从“组”和“日期”开始,如何创建差异列,如下所示?

谢谢!

    Group       Date       Difference
  Group 1    August 1         - 
  Group 1    August 3         2
  Group 1    August 6         3
  Group 1    August 10        4
  Group 2    Sept 1           -
  Group 2    September 20     19
  Group 2    September 25     5 
  Group 3     June 1          -
  Group 3     June 5          4

2 个答案:

答案 0 :(得分:1)

您可以使用一些功能来获得所需的结果。如另一个答案所述,您可以使用dif函数,该函数将返回数据集中的current_obs-previous_obs。或者,您可以使用retain语句。

proc sort data=have;
by group date;
run;

data want(drop=last_date);
set have;
by group date;
retain last_date;
if first.date then Difference = .;
else Difference = date - last_date;
* Set the variable last_date equal to the current date;
last_date = date;
run;

如果省略drop=,则last_date的值将是date的最后一个值。

答案 1 :(得分:0)

data want;
   set have;
   by group notsorted;
   difference=dif(date);
   if first.group then difference=.;
run;