在SAS SQL情况下计数不同

时间:2017-05-08 08:40:17

标签: sql sas

我有一个数据集

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
  ....

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'值作为缺失值而不计算在内。