TABULATEプロシジャで列の合計に対するパーセンテージを求める方法

[OS] ALL
[リリース] SAS 8.2以降
[キーワード] Base, TABULATE, PCTN, COLPCTN, COLPCTSUM

[質問]

TABULATEプロシジャで下記のような表を作りました。
PCTN(度数のパーセンテージ)は、全件を100%とした値になりますが、列を100%とした値にするには、どのように指定すればいいですか。


 ------------------------------------------------------------
 |                                |           a1            |
 |                                |-------------------------|
 |                                |    はい    |   いいえ   |
 |                                |------------+------------|
 |                                |    PctN    |    PctN    |
 |--------------------------------+------------+------------|
 |group          |gender          |            |            |
 |---------------+----------------|            |            |
 |A              |男              |       30.00|       10.00|
 |               |----------------+------------+------------|
 |               |女              |       10.00|       10.00|
 |               |----------------+------------+------------|
 |               |All             |       40.00|       20.00|
 |---------------+----------------+------------+------------|
 |B              |gender          |            |            |
 |               |----------------|            |            |
 |               |男              |       10.00|       10.00|
 |               |----------------+------------+------------|
 |               |女              |       10.00|       10.00|
 |               |----------------+------------+------------|
 |               |All             |       20.00|       20.00|
 |--------------------------------+------------+------------|
 |All                             |       60.00|       40.00|
 ------------------------------------------------------------

上記の表を作成したプログラムは、下記のとおりです。


PROC FORMAT;
  VALUE $genderf
        '1' = '男'
        '2' = '女'
;
  VALUE ynf
        1 = 'はい'
        2 = 'いいえ'
;
RUN;

DATA sample;
  INPUT group $ gender $ a1 @@;
  FORMAT gender genderf. a1 ynf.;
CARDS;
A  1 2   A 1 1
A  1 1   A 1 1
A  2 2   A 2 1
B  1 1   B 2 2
B  2 1   B 1 2
;
RUN;

PROC TABULATE DATA=sample;
  CLASS group gender a1;
  TABLES (group*(gender ALL)) ALL,a1*PCTN
  / MISSTEXT='0' PRINTMISS;
;
RUN;

[回答]

SAS 8から追加された統計量キーワードCOLPCTNを使用して、列に対するパーセンテージを求められます。


PROC TABULATE DATA=sample;
  CLASS group gender a1;
  TABLES (group*(gender ALL)) ALL,a1*COLPCTN
  / MISSTEXT='0' PRINTMISS;
;
RUN;

SAS8では、度数や合計に関して、下記の統計量キーワードが追加されています。

度数 COLPCTN
PAGEPCTN ページ
REPPCTN
ROWPCTN
合計 COLPCTSUM
PAGEPCTSUM ページ
REPPCTSUM
ROWPCTSUM

なお、SAS6で列を100%とした表を出力するには、次のようなTABLESステートメントを記述します。


TABLES (group*(gender ALL)) ALL,a1*PCTN<group*gender group*ALL ALL>

列を100%とした表の出力


 ------------------------------------------------------------
 |                                |           a1            |
 |                                |-------------------------|
 |                                |    はい    |   いいえ   |
 |                                |------------+------------|
 |                                |  ColPctN   |  ColPctN   |
 |--------------------------------+------------+------------|
 |group          |gender          |            |            |
 |---------------+----------------|            |            |
 |A              |男              |       50.00|       25.00|
 |               |----------------+------------+------------|
 |               |女              |       16.67|       25.00|
 |               |----------------+------------+------------|
 |               |All             |       66.67|       50.00|
 |---------------+----------------+------------+------------|
 |B              |gender          |            |            |
 |               |----------------|            |            |
 |               |男              |       16.67|       25.00|
 |               |----------------+------------+------------|
 |               |女              |       16.67|       25.00|
 |               |----------------+------------+------------|
 |               |All             |       33.33|       50.00|
 |--------------------------------+------------+------------|
 |All                             |      100.00|      100.00|
 ------------------------------------------------------------