我的数据集并尝试
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(item, "3")
函数调用不是摘要函数。这将导致原始表中的所有行自动通过聚合计算(那些count()
(重新聚合。重新合并是SASProc SQL
的专有功能,而不是ANSI SQL标准的一部分。
你似乎想要唯一的非3项值的数量,所以你需要一个
COUNT(DISTINCT ...expression...)
在查询中。...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
;