在 PROC SQL/SQL 中根据不同年份的相同 ID 创建指标
Creating an indicator based on the same ID in different years in PROC SQL/SQL
我想根据 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 年购买了 Kitchen,然后在 2021 年购买了 Home,反之亦然,则他们被视为整体。本例中的 ID 2 不是整体的,因为 Home 和 Kitchen 是在同一年购买的。
输出应如下所示:
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 只出现一次,则所有东西都是同一年购买的,否则有不同年份购买的产品。
您只需要在每个 ID
的 Year
列上有一个不同的计数。不需要两步。
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 ...
不知道哪个看起来更自然。如果您有大量数据,则第二种方法可能更快。
我想根据 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 年购买了 Kitchen,然后在 2021 年购买了 Home,反之亦然,则他们被视为整体。本例中的 ID 2 不是整体的,因为 Home 和 Kitchen 是在同一年购买的。 输出应如下所示:
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 只出现一次,则所有东西都是同一年购买的,否则有不同年份购买的产品。
您只需要在每个 ID
的 Year
列上有一个不同的计数。不需要两步。
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 ...
不知道哪个看起来更自然。如果您有大量数据,则第二种方法可能更快。