使用proc-sql总结和计算数据集中的具体项目



我的数据集并尝试

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
;

相关内容

最新更新