3

我必须找到 2 个变量组合的不同计数。我使用以下 2 个查询来查找计数:

select count(*) from 
(   select V1, V2 
    from table1
    group by 1,2
) a

select count(distinct catx('-', V1, V2)) 
from table1

从逻辑上讲,上述两个查询都应该给出相同的计数,但我得到的计数不同。注意

  • V1 和 V2 都是整数
  • 两个变量都可以有空值,尽管我的表中没有空值
  • 没有负值

知道为什么我可能会得到不同的输出吗?哪个是查找 2 列或更多列的不同组合计数的最佳方法?

谢谢。

4

4 回答 4

7

当您运行第一个 sql 代码时,SAS 日志给出了答案。使用 'group by' 需要一个汇总函数,否则将被忽略。因此,该计数将返回总行数,而不是组合的 2 个变量的不同计数。只需将 count(*) 添加到子查询中,两种方法都会得到相同的答案。

select count(*) from 
(   select V1, V2, count(*) 
    from table1
    group by 1,2
) a
于 2012-11-21T12:46:27.427 回答
2

在第一个查询的子查询中使用 distinct 。当您执行 group by 但不包含任何聚合函数时,它会丢弃 group by。所以你仍然会有 v1 和 v2 的重复组合。

于 2012-11-21T13:28:07.137 回答
0

似乎 GROUP BY 在 SAS 中不起作用。除非您的查询中有聚合函数,否则您不能使用它来删除重复项。我在查询输出的日志中发现了这一点 -

注意: GROUP BY 子句已被丢弃,因为关联表表达式的 SELECT 子句和可选的 HAVING 子句均未引用摘要函数。

这回答了这个问题。

于 2012-11-21T12:50:03.110 回答
-1

您也可以按部分忽略分组,只需在子查询中添加一个不同的。您编写的第二个查询也更有效

于 2014-03-10T07:07:22.867 回答