1

次の表があります。

Id  Type 
1   A
2   B
3   C
4   A

各タイプの行数をカウントする新しいテーブルを作成したいと思います。カウントする型ごとにテーブルを作成するのは簡単ですが、見た目も性能も良くしたいので、1回のクエリで可能でしょうか?以下のようなクエリを思いついたのですが、うまくいきません。エラーには、「WHEN 句 2 の結果は、前の結果と同じデータ型ではありません」とありました。助けていただければ幸いです。事前に感謝します。

PROC SQL;
   CREATE TABLE WORK.Statistics_Count AS
   SELECT 
      COUNT(Id) as total,
      COUNT(CASE WHEN Type = "A" then Id else . end) as typeA,
      COUNT(CASE WHEN Type = "B" then Id else . end) as typeB,
      COUNT(CASE WHEN Type = "C" then Id else . end) as typeC,
      COUNT(CASE WHEN Type <> "A" then Id else . end) as nonTypeA
   FROM WORK.ListTable;
QUIT; 
4

5 に答える 5

2

SASの解決策は、そのようなことにPROC SQLを使用しないことです。SQL は常に、例外を使用してコード化するのが少し遅くなるか、難しく/乱雑になります (NotTypeA がなければ、これはより簡単になります)。SAS では、PROC TABULATE と PROC FORMAT を使用すると、後で簡単に転置できます。もう少しコードが増えますが、より柔軟になります。

data have;
input Id Type  $;
datalines;
1  A
2  B
3  C
4  A
;;;;
run;

proc format lib=work;
value $typeF (multilabel notsorted)
'A'='TypeA'
'B'='TypeB'
'C'='TypeC'
'B','C'='NonTypeA'
;;;;
run;

proc tabulate data=have out=want;
format type $typef.;
class type/mlf preloadfmt order=data;
tables type*n;
run;

proc transpose data=want out=want_t(drop=_NAME_);
var N;
id type;
run;
于 2013-03-11T14:58:57.413 に答える
1

以下のコードを試してください:

Select Type , count(Type) as cnt
from WORK.Statistics_Count
group by Type

コメントに従ってコードが更新されました。

    Select Type, count(Type) as cnt from  ( 
Select Type from WORK.Statistics_Count
where Type in ('A','B','C')

Union All

Select 'Others' as Type from WORK.Statistics_Count
where Type not in ('A','B','C'))z
group by Type
于 2013-03-11T05:59:32.480 に答える
1

これを試して:

select type,count(*) NoofRows from tbl group by type
于 2013-03-11T06:22:30.137 に答える
0

次の手順を実行すると、でカウントを見つけることができますSELECT

SELECT COUNT(*)
FROM WORK.ListTable
GROUP BY Type

MySQL GROUP BY(集計)関数を参照してください。

于 2013-03-11T06:00:48.130 に答える