我需要帮助来编写一个宏或数组来在SAS中进行以下练习

时间:2016-06-25 08:46:57

标签: sas

数据有五个列(ptid start_dt end_dt养护持续时间。)。Data Set 我需要处理这些数据,以便计算下一行的开始日期和上一行的结束日期之间的差异。如果它小于或等于90天。然后它将检查之间的方案。下一行和上一行。如果方案相等或相互适当的子集,那么这两行将被合并。新的方案将是具有更长持续时间的方案。新的开始和结束日期将是最小的两个合并行的开始日期和这两个合并行的结束日期的最大值。它将继续这样做。 这项工作将由ptid明智地完成。 任何线索将不胜感激。 数据集在共享链接中可用。

1 个答案:

答案 0 :(得分:0)

要完全破译你想要的东西并不容易,但尝试这是一种简单的方法,可以在彼此相同的行中获得正确的日期值。

如果您执行以下步骤,您将正确的日期保存为'prev_date'和'next_date'(假设您的数据集按照您的需要排序),然后您就可以应用您的逻辑:

data __new;
set your_data_set;

    rown = _n_;
    rlast = _n_ - 1;
    rnext = _n_ + 1;

run;


proc sql;

Create table lagged as

    Select  a.ptid 
        ,a.start_dt 
        ,a.end_dt 
        ,a.regimen 
        ,a.duration

        ,a.rown
        ,b.start_dt as prev_date
        ,c.end_dt as next_date

from __new as a

left join __new as b

on a.rlast = b.rown

left join __new as c

on a.rnext = c.rown

;quit;