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

Date 使用SAS按组计算日期之间的持续时间,date,sas,retain,Date,Sas,Retain,我正在计算一个孩子被寄养多久。然而,我有一些问题。我的数据应该如下所示: 对于每个个体(ID),我需要计算持续时间(结束日期-开始日期)。但是,我还需要应用一条规则,规定如果在同一类型的寄养中,结束日期和开始日期之间的间隔少于5天,则应将其视为连续安置。如果在同一个人的同一类型寄养中,从结束日期到开始日期之间的间隔超过五天,则为新安置。如果这是一种新型的寄养,那就是一种新的安置方式。变量“持续时间”是如何计算的 我尝试了下面的代码,但它没有正确的工作方式+我不知道如何应用我的“五天”规则 非常

我正在计算一个孩子被寄养多久。然而,我有一些问题。我的数据应该如下所示:

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

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


非常感谢您的帮助

在这里使用一组retain语句来实现这一点:

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为结束日期,sd为开始日期)

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;