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 の両方が整数
  • 私のテーブルには null 値はありませんが、両方の変数が null 値を持つことができます
  • 負の値はありません

異なる出力が得られる理由は何ですか? そして、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 ではそのようには機能しないようです。クエリに集計関数がない限り、重複を削除するために使用することはできません。クエリ出力のログでこれを見つけました-

注: 関連する table-expression の SELECT 句もオプションの HAVING 句も集計関数を参照していないため、GROUP BY 句は破棄されました。

これは質問に答えます。

于 2012-11-21T12:50:03.110 に答える
-1

部分ごとのグループも無視して、サブクエリに個別を追加するだけです。また、あなたが書いた2番目のクエリはより効率的です

于 2014-03-10T07:07:22.867 に答える