Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SAS SQL情况下,当_Sql_Sas - Fatal编程技术网

在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)