【问题标题】:How to calculate difference between dates of changes in 2 columns in SAS Enterprise Guide?如何计算 SAS Enterprise Guide 中 2 列的更改日期之间的差异?
【发布时间】:2022-09-27 17:57:29
【问题描述】:

我在 SAS Enterprise Guide 中有如下表。

数据类型及含义:

  • ID - 数字 - 客户端 ID
  • DT - 日期 - 更改日期
  • OFFER_1 - 字符 - 当前报价
  • OFFER_2 - 字符 - 更改后的报价

原始数据集中的值没有排序,但如果对解决方案很重要,可以排序。

ID   | DT        | OFFER_1  | OFFER_2
-----|-----------|----------|----------
123  | 01MAY2020 | PR       | PR
123  | 05MAY2020 | PR       | P
123  | 10MAY2020 | P        | P
123  | 11MAY2020 | P        | P
123  | 20MAY2020 | P        | PR
123  | 21MAY2020 | PR       | M
123  | 25MAY2020 | M        | M
777  | 30MAY2020 | PR       | M
223  | 02JAN2020 | PR       | PR
223  | 15MAR2020 | PR       | PR
402  | 20MAR2020 | M        | M
33   | 11AUG2020 | M        | PR
11   | 20JAN2020 | PR       | M
11   | 05FEB2020 | M        | M

我需要创建新列“COL1”,其中将包含信息:

  • 如果客户将提议从 PR 更改为 P 或 M,则计算他在再次返回 PR 之前最多持续了多少天,或者如果他没有返回 PR,则在更改后他已经处于 P 或 M 的天数
  • 如果他没有将 PR 更改为 P 或 M \"COL1\" = 0

所以,结果我需要下面的东西:

ID   | DT        | OFFER_1  | OFFER_2  | COL1
-----|-----------|----------|----------|---------
123  | 01MAY2020 | PR       | PR       | 15
123  | 05MAY2020 | PR       | P        | 15
123  | 10MAY2020 | P        | P        | 15
123  | 11MAY2020 | P        | P        | 15
123  | 20MAY2020 | P        | PR       | 15
123  | 21MAY2020 | PR       | M        | 15
123  | 25MAY2020 | M        | M        | 15
777  | 30MAY2020 | PR       | M        | 1
223  | 02JAN2020 | PR       | PR       | 0
223  | 15MAR2020 | PR       | PR       | 0
402  | 20MAR2020 | M        | M        | 0
33   | 11AUG2020 | M        | PR       | 0
11   | 20JAN2020 | PR       | M        | 16
11   | 05FEB2020 | M        | M        | 16

因为:

  • ID = 123,在“COL1”中有 15 - 因为将 PR 更改为 P 或 M 并持续了最多 15 天(从 2020 年 5 月 5 日到 2020 年 5 月 20 日),然后再次返回 PR,将 PR 更改为 P 或 M 2 次但第二次变化持续了 4 天并且 15 > 4
  • ID = 777,在 \"COL1\" 中有 1 - 因为将 PR 更改为 P 或 M 并且最多持续 1 天 (30MAY2020)
  • ID = 223,在 \"COL1\" 中有 0 - 因为他没有将 PR 更改为 P 或 M
  • ID = 402,在 \"COL1\" 中有 0 - 因为他没有将 PR 更改为 P 或 M
  • ID = 33,在 \"COL1\" 中有 0 - 因为他没有将 PR 更改为 P 或 M
  • ID = 11,在 \"COL1\" 中有 16 个 - 因为将 PR 更改为 P 或 M 并且持续了最多 16 天(从 2020 年 1 月 20 日到 2020 年 2 月 5 日)并且没有再次返回到 PR

如何在 PROC SQL 或普通 SAS 代码中的 SAS Enterprise Guide 中做到这一点?

  • 同样,不要重复问题,更新原始问题。
  • 哦,对不起,我只是没有准确地解释问题,所以解决方案没有解决问题。你知道内格多吗?
  • 如果您第一次没有足够准确地解释问题,请更新帖子。这就是编辑功能的重点。
  • 好的,我会记住的,Negdo :),与此同时,您知道如何解决所描述的问题吗?
  • 有人知道吗?

标签: date sas proc-sql enterprise-guide 4gl


【解决方案1】:

我将尝试逐步解释此步骤。

首先,我们需要获取报价的所有更改,所以我建议过滤所有行,其中OFFER_1 <> OFFER_2

所以结果表(t2)看起来像这样(假设我们只检查ID = 123 上的逻辑

ID   | DT        | OFFER_1  | OFFER_2  | COL1
-----|-----------|----------|----------|---------
123  | 05MAY2020 | PR       | P        | 15
123  | 20MAY2020 | P        | PR       | 15
123  | 21MAY2020 | PR       | M        | 15

然后,我建议加入我们的新表,t2, 旧的t1,加入订单:

on t1.ID = t2.ID and t1.DT < t2.DT

计算difference = t2.DT - t1.DT 离开max(difference)

这对你有意义吗?

【讨论】:

    猜你喜欢
    • 2022-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-25
    • 2022-08-21
    • 2010-11-08
    • 1970-01-01
    相关资源
    最近更新 更多