在PROC SQL/SQL中基于同一ID在不同年份创建一个指标



我想创建一个基于ID和产品类型的指标。我的数据:

Year ID Purchase_Category
2020 1  Kitchen
2020 2  Home
2020 2  Kitchen
2020 3  Home
2021 1  Home
2021 2  Kitchen
2021 3  Kitchen

如果具有相同ID的人在2020年购买了厨房,然后在2021年购买了家,反之亦然,那么他们被认为是整体的。在这种情况下,id2不是整体的,因为家庭和厨房是在同一年购买的。输出应该如下所示:

ID Indicator
1  Holistic
2  Not Holistic
3  Holistic

可以这样做:

SELECT ID, CASE COUNT(*) WHEN 1 THEN 'Not Holistic' ELSE 'Holistic' END AS INDICATOR
FROM (SELECT ID, YEAR, COUNT(*) FROM DATA GROUP BY ID, YEAR)
GROUP BY ID

首先,确定每个ID的不同年份,然后从该集合中,如果ID只出现一次,则所有产品都是在同一年购买的,否则有不同年份购买的产品。

您只需要对每个IDYear列进行不同的计数。不需要两步

select ID,
case when count(distinct "Year") > 1
then 'Holistic' else 'Not Holistic' end as Indicator
from T
group by ID

也可以这么说:

case when max("Year") > min("Year") then ...
我不知道哪一个看起来更自然。如果你有大量的数据,第二种方法可能更快。

最新更新