Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql SAS中的数据,但与逻辑卡在一起_Sql_Sas - Fatal编程技术网

Sql SAS中的数据,但与逻辑卡在一起

Sql SAS中的数据,但与逻辑卡在一起,sql,sas,Sql,Sas,我正在使用SAS数据集成研究可以是SAS代码或SQL代码,试图解决给定的业务规则之一。业务规则是: 要了解员工对相同费用类型的索赔,并在30天内购买。例如,一个人每周购买一次碳粉,购买相同费用类型的碳粉 我有以下格式的数据: StaffNo|Date |Trip |Desc | InvoiceNumber | ExpenseType | Amount -------------------------------------------------------------

我正在使用SAS数据集成研究可以是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
对不起,上面没有对齐,复制粘贴到您的记事本将有正确的对齐

事情是这样的,根据样本记录,我需要找出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表达式。早上好,无论你在哪里。