我有一个数据集
Outlet Period Brand Sales
A Jan XX 12
A Jan XY 13
A FEB AB 10
B JAN AC 19
我想计算每个时期内每个时期的不同品牌数量,但不包括品牌CD'。我想查询一下,如下所示,计数在一行中不起作用,但只适用于例2吗?
示例1(品牌CD即使不应该计算在内)
PROC SQL;
CREATE TABLE Test AS
SELECT
Outlet, Period, Brand,
case when Brand not in ('CD') then count (distinct Brand) end as k_Brands_Players2
group by period, outlet;
quit;
示例2(品牌CD未正确计算)
PROC SQL;
CREATE TABLE Test AS
SELECT
Outlet, Period, Brand,
case when Brand not in ('CD') then Brand else ' ' end as Brand_Players,
count(distinct calculated Brand_Players) as k_Brands_Players
group by period, outlet;
quit;
预期输出为:
Outlet Period Brand k_Brands_Players
A Jan XX 2
A Jan XY 2
A Feb AS 3
A FEB QW 3
A Feb XY 3
B Jan KW 1
....
答案 0 :(得分:2)
第一个查询中的问题是您在错误的位置使用COUNT()聚合函数。
case when Brand not in ('CD') then count(distinct Brand) end
所以当BRAND等于' CD'您将获得缺失的价值,否则您将获得不同品牌的数量,包括' CD'品牌。
如果你使用这种结构:
count(distinct case when Brand not in ('CD') then Brand end)
然后COUNT()函数会看到' CD'值作为缺失值而不计算在内。