【问题标题】:I need help to write a macro or array to do the below exercise in SAS我需要帮助来编写宏或数组以在 SAS 中进行以下练习
【发布时间】:2016-06-25 08:46:57
【问题描述】:

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

【问题讨论】:

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

标签: sas


【解决方案1】:

要准确解读您想要的内容并不容易,但请尝试将此作为一种简单的方法,以便在彼此相同的行中获取正确的日期值。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-03
    • 1970-01-01
    • 1970-01-01
    • 2021-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多