【问题标题】:Displaying selected observations performed next day in SAS在 SAS 中显示第二天执行的选定观察
【发布时间】:2014-01-20 23:52:41
【问题描述】:

如果我有一个变量 ID、DATE、过程如下所示的数据集:

'12 01jan2013 a'

'12 01feb2013 b'

'13 14feb2013 c'

'13 15feb2013 a'

'24 01mar2013 c'

'24 02mar2013 a'

'26 01oct2013 a'

'26 02oct2013 a'

我只想输出那些在 Procedure ='a' 的情况下以及在下一天针对每个 ID(按 ID)的 Procedure ="c" 执行的观察结果。所以从上面的例子中我会得到:

'13 15feb2013 a'

'24 02mar2013 a'

您能帮我提供此操作的 SAS 代码吗?

【问题讨论】:

  • 你好,到目前为止你有什么尝试?
  • 我正在使用 'retain' 和 New_date=DATE + 1 以及 'if then do' 语句(按 ID)。但我不知道如何让程序变量具体化。
  • 输出的obs是否必须和昨天的Procedure=c有相同的ID?我使用了您提到的保留语句,并且还使用了 SAS 日期值而不是下面代码中示例数据集中的日期格式。
  • 是的,ID 必须相同。我正在尝试查看 ID 是否在 Prodedure=c 对此 ID 完成后的第二天完成了 Procedure =a。
  • 在您详细说明所需条件后,我通过保留 id 对代码进行了一些更改。干杯。

标签: date sas dataset selection


【解决方案1】:

是的,你在正确的轨道上。 Retain 是一种方法。然后,您可以将日期转换为条件语句的 SAS 日期值(即 1960 年 1 月 1 日之后的天数)。

data test(drop=retaindate rid);
    infile datalines truncover;
    input ID date date9. Procedure $;

    if Procedure = 'c' then do;
        retaindate = date;
        rid = id;
        retain retaindate rid;
    end;
    if Procedure='a' and rid=id and date=retaindate+1 then do;
        output;
    end;
    format date date9.;
    datalines;
    12 01jan2013 a

    12 01feb2013 b

    13 14feb2013 c

    13 15feb2013 a

    24 01mar2013 c

    24 02mar2013 a

    26 01oct2013 a

    26 02oct2013 a
    ;
    run;

【讨论】:

  • 这将在不同的 ID 之间溢出 - 只需要一点 first.ID 逻辑来处理它。
  • 是的,你是对的,我没有在日志中看到。我稍微调整了一下。感谢您通知我。
猜你喜欢
  • 2023-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-29
  • 2021-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多