在SAS SQL情况下,当
我有一个数据集在SAS SQL情况下,当,sql,sas,Sql,Sas,我有一个数据集 Outlet Period Brand Sales A Jan XX 12 A Jan XY 13 A FEB AB 10 B JAN AC 19 我想计算每个时期内每个时期的不同品牌数量,但不包括品牌“CD”。我想询问一下,count distinct是否在如下所示的一行中不
Outlet Period Brand Sales
A Jan XX 12
A Jan XY 13
A FEB AB 10
B JAN AC 19
我想计算每个时期内每个时期的不同品牌数量,但不包括品牌“CD”。我想询问一下,count distinct是否在如下所示的一行中不起作用,但只在示例2中起作用
示例1(品牌CD被计算在内,即使它不应该被计算在内)
示例2(品牌CD未正确计数)
预期产出为:
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
....
试试这个:-
/*Count distinct will come outside the case when statement*/
PROC SQL;
CREATE TABLE Test AS
SELECT distinct Outlet, Period, Brand, k_Brands_Players
from
YOUR_DATASET_NAME a
LEFT JOIN
(
SELECT
Outlet, Period,
count(distinct(case when Brand not in ('CD') then Brand end)) as k_Brands_Players
FROM YOUR_DATASET_NAME
group by 1,2
) b
on a.Outlet=b.Outlet and a.Period=b.Period;
quit;
如果您有任何问题,请告诉我。第一个查询中的问题是您在错误的位置使用了COUNT()聚合函数。你有
case when Brand not in ('CD') then count(distinct Brand) end
因此,当品牌等于“CD”时,你将得到一个缺失值,否则你将得到不同品牌的数量,包括“CD”品牌
如果改为使用此结构:
count(distinct case when Brand not in ('CD') then Brand end)
然后,COUNT()函数会将“CD”值视为缺失值,而不会对其进行计数。您的数据集的预期输出是什么?我刚刚添加了它,谢谢您的提醒!您发布的数据没有任何记录,brand='CD'编辑了查询以符合所需的输出谢谢!但是我能知道是什么导致了第一个例子中的错误吗?我之前的查询没有在输出中给出品牌名称。将其更改为在第一次查询时将count distinct放入case中。相反,它应该在外面。在第二个查询中,您无法对新形成且不存在于tabledeleted注释中的列进行计数或执行某些操作
case when Brand not in ('CD') then count(distinct Brand) end
count(distinct case when Brand not in ('CD') then Brand end)