SAS中的数据但仍然存在逻辑

时间:2018-05-25 10:33:02

标签: sql sas

我正在使用SAS Data Integration Studio(可以是SAS代码或SQL代码)来尝试解决给定的业务规则之一。业务规则是: 要查找工作人员声称的相同费用类型,并在30天内购买日期(例如,一个人每周购买碳粉,购买相同的)(费用类型)

我有这种格式的数据:

StaffNo|Date      |Trip    |Desc  |  InvoiceNumber  | ExpenseType  | Amount
----------------------------------------------------------------------------
1      |01JAN2015 |A       |XX    | ZXC             |100           |50
1      |05JAN2015 |A       |XX    | ZXC             |100           |50
1      |02FEB2015 |A       |XX    | ZXC             |100           |50
1      |03APR2015 |B       |YY    | PPP             |90            |1000
1      |02MAY2015 |B       |YY    | PPP             |90            |1000
2      |01OCT2017 |C       |LO    | 123             |55            |777
2      |02JAN2018 |D       |HI    | 456             |66            |888
2      |02MAY2018 |E       |LL    | 789             |44            |11
3      |11MAR2016 |F       |PO    | 99AA            |122           |88.5
3      |13MAR2016 |G       |PO    | 99AA            |122           |88.5
3      |31DEC2016 |H       |PO    | 99AA            |122           |88.5

很抱歉上面的错位,将它粘贴到你的记事本中会有正确的对齐方式。

根据样本记录,我需要找到在30天内购买相同ExpenseType项目的员工编号1到3。如果找到了,请创建一个带有值的标记' Y'列名为“重复购买”#39;对于具有此模式的所有记录。

在外行术语中,我想找出在30天内购买相同费用类型的相同StaffNo,并且没有规则将第一条记录与第二条记录或最后一条记录进行比较。

请注意,下一行记录的日期可能从1天差异到10年差异,不一定在下面的日期模式中,因为下面只是一个样本。

我无法想到这样做的方法。非常感谢任何建议/指导。

1 个答案:

答案 0 :(得分:0)

SQL中的一种方法使用exists。逻辑是这样的:

proc sql;
    select d.*,
           (case when exists (select 1
                              from data d2
                              where d2.staffno = d.staffno and
                                    d2.ExpenseType = d.ExpenseType and
                                    d2.date < d.date and
                             )
                 then 1 else 0
            end) as repeat_purchase
    from data d;