【问题标题】:How Do I find the Duration Between Observations for each By Group in SAS?如何在 SAS 中找到每个按组的观察之间的持续时间?
【发布时间】:2019-05-10 12:12:22
【问题描述】:

我想按组计算观察之间的持续时间。到目前为止,我已经尝试在带有 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

【问题讨论】:

    标签: sas lag duration


    【解决方案1】:
    data want;
       set have;
       by group notsorted;
       difference=dif(date);
       if first.group then difference=.;
    run;
    

    【讨论】:

    • 虽然此代码可能会回答问题,但提供有关此代码为何和/或如何回答问题的额外上下文可提高其长期价值。
    【解决方案2】:

    您可以使用一些函数来获得所需的结果。如另一个答案中所述,您可以使用 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 的值将是日期的最后一个值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-28
      • 2019-09-24
      • 2018-11-18
      • 1970-01-01
      • 1970-01-01
      • 2013-07-30
      相关资源
      最近更新 更多