Sas 使用proc sql汇总并计算数据集中特定的项

Sas 使用proc sql汇总并计算数据集中特定的项,sas,Sas,我的数据集和尝试 data mydata; input Category $ Item $; datalines; A 1 A 1 A 2 B 3 B 1 ; proc sql; create table mytable as select *, count(Category) as Total_No_in_Category, count(Category)-count(item, "3") as No_of_not_3_in_the_same_category

我的数据集和尝试

data mydata;
input Category $ Item $;
datalines;
A 1
A 1 
A 2
B 3
B 1
;

proc sql;
create table mytable as 
    select *, count(Category) as Total_No_in_Category, count(Category)-count(item, "3") as No_of_not_3_in_the_same_category from mydata
    group by Category;
run;
结果

Category     No_of_not_3_in_the_same_category   Total_No_in_Category


  A                      3                          3
  A                      3                          3
  A                      3                          3
  B                      2                          2
  B                      2                          1
我的预期结果

 Category   No_of_not_3_in_the_same_ category   Total_No_in_Category
    A                          2                       3
    B                          1                       2

我想知道如何仅使用proc-SQL来实现预期的结果。非常感谢。

两个参数
COUNT(项,“3”)
函数调用不是摘要函数。这将导致原始表中的所有行自动与聚合计算(那些
count()
)重新合并。重新合并是SAS
Proc SQL
的专有功能,不是ANSI SQL标准的一部分

您似乎想要唯一的非3项值的数量,因此需要

COUNT(DISTINCT ...expression...)
在查询中。
…表达式…
可以是一个
case
子句,通过不包含
case
子句的
else
部分,将
item=“3”
转换为null

例如:

create table want as
select
  category
  , count(*) as freq
  , count(distinct case when item ne "3" then item end) as n_unq_item_not_3
  from mydata
  group by category
  ;