Sql SAS中的数据,但与逻辑卡在一起
我正在使用SAS数据集成研究可以是SAS代码或SQL代码,试图解决给定的业务规则之一。业务规则是: 要了解员工对相同费用类型的索赔,并在30天内购买。例如,一个人每周购买一次碳粉,购买相同费用类型的碳粉 我有以下格式的数据:Sql SAS中的数据,但与逻辑卡在一起,sql,sas,Sql,Sas,我正在使用SAS数据集成研究可以是SAS代码或SQL代码,试图解决给定的业务规则之一。业务规则是: 要了解员工对相同费用类型的索赔,并在30天内购买。例如,一个人每周购买一次碳粉,购买相同费用类型的碳粉 我有以下格式的数据: StaffNo|Date |Trip |Desc | InvoiceNumber | ExpenseType | Amount -------------------------------------------------------------
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
对不起,上面没有对齐,复制粘贴到您的记事本将有正确的对齐
事情是这样的,根据样本记录,我需要找出1到3号员工在30天内购买了相同的ExpenseType项目。如果发现,请为具有此模式的所有记录创建一个值为“Y”的标志,其列名为“RepeatPurchase”
用外行术语来说,我想找出在30天内购买相同ExpenseType的同一个员工,并且没有规定将第一个记录与第二个或最后一个记录进行比较
请注意,下一行记录的日期差异可能在1天到10年之间,不一定是低于日期的模式,因为下面只是一个示例
我想不出怎么做。非常感谢您提供的任何建议/指导。SQL中存在一种方法。逻辑是这样的:
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;
您好@Gordon Linoff,通过使用ur代码并删除额外的“and”,我得到的错误子查询的计算结果超过一行,这意味着在尝试进行比较时存在重复记录。@B.Dick。当我开始阅读这个问题时,我以为您想过滤掉这些行,所以我使用where编写了查询。然后我意识到您需要一个标志,移动了逻辑,但没有完成case表达式。早上好,无论你在哪里。