我想按组计算两次观察之间的持续时间。到目前为止,我已经尝试在数据步骤中使用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
答案 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;