SAS 9.4:如何用嵌套查询统计成员数>1的分组数量
统计成员数大于1的分组数量(SAS SQL实现)
我有一张包含Group ID(分组ID)和Member ID(成员ID)的表,部分分组包含多个Member ID。需要统计成员数大于1的分组数量,计划用嵌套查询实现。最初以为嵌套查询中不能使用GROUP BY和HAVING,后确认SAS 9.4允许在嵌套查询中使用这两个语句,现给出我的查询语句,请验证或优化以得到正确结果(示例中应返回2):
原查询语句:
select count * from (select count( groupID) as groupsize from dat_table group by groupID having count(mem_id) >1 ) a;
问题分析与优化
原语句存在两处可修正的点:
- 外层查询的
count *语法错误,SAS SQL要求写成count(*) - 内层查询中
count(groupID)属于冗余计算,我们只需要筛选出符合条件的分组,不需要额外计算分组大小
优化后的查询语句:
select count(*) as group_count from ( select groupID from dat_table group by groupID having count(mem_id) > 1 ) a;
说明
- 内层查询按
groupID分组,通过having count(mem_id) > 1筛选出成员数大于1的分组 - 外层查询统计内层结果的行数,即为符合条件的分组数量
- 如果
mem_id存在缺失值,count(mem_id)会自动忽略缺失记录;若需要统计分组内所有行数(包括缺失),可改为count(*)
该语句在SAS 9.4中可正常运行,示例场景下会返回预期结果2。
内容的提问来源于stack exchange,提问作者user2450223
相关产品推荐
相关产品推荐

