我需要帮助来编写宏或数组,以便在SAS中执行以下练习

我需要帮助来编写宏或数组,以便在SAS中执行以下练习,sas,Sas,数据有五列(ptid开始\结束\方案持续时间)。 我需要以这样的方式处理这些数据,它将计算下一行的开始日期和上一行的结束日期之间的差异。如果它小于或等于90天。然后它将检查下一行和上一行之间的方案。如果方案相等或是彼此的适当子集,则这两行将合并新方案将是具有更大持续时间的方案。新的开始和结束日期将是这两个合并行的开始日期的最小值和这两个合并行的结束日期的最大值。它将继续这样做。 此练习将由ptid wise完成。 任何线索将不胜感激。 数据集在共享链接中可用。要准确地解读您想要的数据并不容易,但

数据有五列(ptid开始\结束\方案持续时间)。 我需要以这样的方式处理这些数据,它将计算下一行的开始日期和上一行的结束日期之间的差异。如果它小于或等于90天。然后它将检查下一行和上一行之间的方案。如果方案相等或是彼此的适当子集,则这两行将合并新方案将是具有更大持续时间的方案。新的开始和结束日期将是这两个合并行的开始日期的最小值和这两个合并行的结束日期的最大值。它将继续这样做。 此练习将由ptid wise完成。 任何线索将不胜感激。
数据集在共享链接中可用。

要准确地解读您想要的数据并不容易,但请尝试使用这种简单的方法,在相同的行中获取正确的日期值

如果执行以下步骤,则将正确的日期保存为“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;

请发布您尝试过的内容,您希望从样本数据和问题中的数据中输出的内容,而不是外部。这个问题,不需要宏解决方案,一个数据步骤就可以了。