SQLプロシジャのDISTINCTについては、「有害事象の発現例数と件数を簡単に出す。」で紹介済みですが、まだまだ魅力が伝わりきってないので再度紹介したいと思います。
data DT1;
input CUST_ID$ NAME$ FOOD$; cards; 001 James BREAD 001 James CANDY 002 Alice BREAD 002 Alice CANDY 002 Alice CANDY ;
|
サンプルは、顧客ID(CUST_ID)で管理されたお客さん(NAME)が購入した食べ物(FOOD)を記録したデータだとします。
このデータから、以下の集計をしたい。
↓↓食べ物(FOOD)毎の「購入者数(C1)」と「購入者の全購入数(C2)」
FOOD
|
C1
|
C2
|
---|---|---|
BREAD
|
2
|
2
|
CANDY
|
2
|
3
|
こういった集計は、SQLのDISTINCTを使えば一発です。
proc sql;
create table OUT1 as select FOOD, count( distinct CUST_ID ) as C1, count( CUST_ID ) as C2 from DT1 group by FOOD; quit; |
簡単に解説
- SQLのCOUNT関数: 引数が非欠損値のレコード数を求める
- DISTINCT: 関数の中に指定すると、引数の値から重複を除いたレコードを計算対象とする
つまり、食べ物(FOOD)毎に以下を求めています。
- count( distinct CUST_ID ): CUST_IDの値から重複を除いた非欠損値の数 = 購入者の人数
- count( CUST_ID ): CUST_IDが非欠損値の数 = 購入者の全購入数
0 件のコメント:
コメントを投稿