使用SAS按组计算日期之间的持续时间

时间:2019-10-19 23:12:30

标签: date sas retain

我正在尝试计算孩子接受寄养的时间。但是,我遇到了一些问题。我的数据如下所示:

enter image description here

对于每个人(ID),我需要计算持续时间(end_date-start_date)。但是,我还需要应用一条规则,规定如果在同一类型的寄养服务中,结束日期和开始日期之间的间隔时间少于5天,则应将其视为连续放置。如果在同一类型的寄养家庭中,从结束日期到开始日期之间有超过五天的时间,则这是一个新的位置。如果这是一种新型的寄养服务,那就是新的安置方式。变量“ duration”是应如何计算的。

我尝试了以下代码,但是它不能以正确的方式工作+我不知道如何应用“五天”规则。

Proc sort data=have out=want;
by id type descending start_date;
run;

Data want;
set want;
by id type;
retain last_date;
if first.id or first.type then do;
   last_date=end_date;
end;  
if last.id or last.type then duration=(end_date-start_date);
run;

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

在此处使用一堆保留语句来实现这一目标:

data want;
  set have;

  by id ;

  retain true_sd prev_ed prev_type;

  if first.id then call missing(prev_type);

  if type ~= prev_type then do;
     true_sd = sd;
     call missing(prev_ed);
     call missing(prev_type);
  end;

  if sd - prev_ed > 5 then true_sd = sd;

  duration = ed - true_sd;
  output;

  prev_type = type;
  prev_ed = ed;

  format sd ed true_sd prev_ed date.;


 run;

(此处假定类型和id为数字。ed为end_date,sd为start_date)