我正在使用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年差异,不一定在下面的日期模式中,因为下面只是一个样本。
我无法想到这样做的方法。非常感谢任何建议/指导。
答案 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;