我必须找到2个变量组合的不同计数。我使用以下2个查询来查找计数:
select count(*) from
( select V1, V2
from table1
group by 1,2
) a
select count(distinct catx('-', V1, V2))
from table1
逻辑上,上述两个查询都应该给出相同的计数,但我得到的计数不同。注意
知道为什么我会得到不同的输出吗?哪个是查找2列或更多列的不同组合计数的最佳方法?
感谢。
答案 0 :(得分:7)
运行第一个sql代码时,SAS日志给出了答案。使用'group by'需要汇总函数,否则会被忽略。因此,计数将返回总行数,而不是组合的2个变量的不同计数。 只需将count(*)添加到子查询中,您将获得两种方法相同的答案。
select count(*) from
( select V1, V2, count(*)
from table1
group by 1,2
) a
答案 1 :(得分:1)
在子查询中使用distinct作为第一个查询.. 当您执行分组但不包括任何聚合函数时,它会丢弃该组。 所以你仍然会有v1和v2的重复组合。
答案 2 :(得分:0)
似乎GROUP BY在SAS中不起作用。除非在查询中有聚合函数,否则不能使用它来删除重复项。我在查询输出的日志中找到了这个 -
注意:GROUP BY子句已被丢弃,因为没有SELECT 子句和相关的可选HAVING子句 table-expression引用了一个汇总函数。
这回答了这个问题。
答案 3 :(得分:-1)
您也可以按部分忽略该组,只需在子查询中添加一个不同的部分。您编写的第二个查询也更有效