TABULATE入門2/1

Last-modified: 2011-05-28 (土) 08:45:23
サマリclassdataの使い方
投稿者ふなまさ?
状態
投稿日2011-05-26 (木) 11:45:37

質問

TABULTEで表を作成していて困っています。
/* データの部分 */
data test;
infile cards;
input group $ race iop_range $ ;
cards;
MAIN 1 Low
SUB 2 Medium
MAIN 2 Low
SUB 2 Low
MAIN 2 Medium
;
run;

raceのカテゴリは1~5あり、iop_rangeはLow,Medium,Highがあります。

/* 表作成 */
proc tabulate data = test format=7. missing;
class group race iop_range;
table group*(race all), iop_range / misstext='0';
run;

を実行すると


                                                                     |                                                  |   iop_range   |
                                                                     |                                                  |---------------|
                                                                     |                                                  |  Low  |Medium |
                                                                     |                                                  |-------+-------|
                                                                     |                                                  |   N   |   N   |
                                                                     |--------------------------------------------------+-------+-------|
                                                                     |group                   |race                     |       |       |
                                                                     |------------------------+-------------------------|       |       |
                                                                     |MAIN                    |1                        |      1|      0|
                                                                     |                        |-------------------------+-------+-------|
                                                                     |                        |2                        |      1|      1|
                                                                     |                        |-------------------------+-------+-------|
                                                                     |                        |All                      |      2|      1|
                                                                     |------------------------+-------------------------+-------+-------|
                                                                     |SUB                     |race                     |       |       |
                                                                     |                        |-------------------------|       |       |
                                                                     |                        |2                        |      1|      1|
                                                                     |                        |-------------------------+-------+-------|
                                                                     |                        |All                      |      1|      1|
                                                                     --------------------------------------------------------------------

とMainにはraceは3,4,5が無くてiop_rangeにはHighが無い表が作成され、SUBにはRaceが2しか出力されませんが、race,iop_rangeとも全カテゴリを表示させた表を作成したいです。
classdataオプションを使って具体的にどうやったら良いかご教授いただけないでしょうか。
ちなみに
http://www.sas.com/offices/asiapacific/japan/service/technical/faq/list/body/ba117.htm
を参考にして

data classes;
infile cards;
input group $ race iop_range $ ;
cards;
MAIN 1 Low
SUB 2 Medium
MAIN 3 High
SUB 4 Low
MAIN 5 Medium
;
run;

PROC SQL;
CREATE table _classes AS
SELECT * FROM
(SELECT DISTINCT(group) FROM classes) ,
(SELECT DISTINCT(race) FROM classes),
(SELECT DISTINCT(iop_range) FROM classes) ;
QUIT;

とデータを準備して

proc tabulate data = test format=7. missing classdata = _classes;
class group race iop_range;
table group*(race all),iop_range/ misstext='0';
run;

としたのですが

「ERROR: クラス変数 iop_range はプリロードデータセットにないか、 同じ名前のプライマリデータセット変数と互換性がありません。」
と出てしまいclassdataを使いこなせず困っています。
よろしくお願いします。

回答

  • 上記のプログラムで動きました.何も変えていませんので,もう一度ご確認ください.
    なお,Low Mid High の順で表示したければ,簡単なのは,値を 0,1,2などとしておいて,formatで,
    proc format; value lmh 0="Low" 1="Mid" 2="High";run;とするか,値を0Low, 1Mid, 2High とするかあたりだと思います. -- &new

NOTE: SAS システム初期化処理 :
       処理時間            1.58 秒
       CPU 時間            1.43 秒

1    options nocenter;
2
3    /* データの部分 */
4     data test;
5     infile cards;
6     input group $ race iop_range $ ;
7     cards;

NOTE: データセット WORK.TEST は 5 オブザベーション、 3 変数です。
NOTE: DATA ステートメント 処理 (合計処理時間):
       処理時間            0.01 秒
       CPU 時間            0.01 秒


13    ;
14    run;
15
16   /*classカテゴリ一覧データの作成*/
17    data classes;
18    infile cards;
19    input group $ race iop_range $ ;
20    cards;

NOTE: データセット WORK.CLASSES は 5 オブザベーション、 3 変数です。
NOTE: DATA ステートメント 処理 (合計処理時間):
       処理時間            0.00 秒
       CPU 時間            0.00 秒


26    ;
27    run;
28
29   PROC SQL;
30    CREATE table _classes AS
31    SELECT * FROM
32    (SELECT DISTINCT(group) FROM classes) ,
33    (SELECT DISTINCT(race) FROM classes),
34    (SELECT DISTINCT(iop_range) FROM classes) ;
NOTE:  このクエリの実行には最適化できないデカルト積の結合が含まれます。
NOTE: テーブル WORK._CLASSES (行数 30、列数 3) が作成されました。

35    QUIT;
NOTE: PROCEDURE SQL 処理 (合計処理時間):
       処理時間            0.03 秒
       CPU 時間            0.03 秒


36
37
38   proc tabulate data = test format=7. missing classdata = _classes;
39    class group race iop_range;
40    table group*(race all),iop_range/ misstext='0';
41    run;

NOTE: データセット WORK.TEST から 5 オブザベーションを読み込みました。
NOTE: データセット WORK._CLASSES から 30 オブザベーションを読み込みました。
NOTE: PROCEDURE TABULATE 処理 (合計処理時間):
       処理時間            0.08 秒
       CPU 時間            0.06 秒


-----------------------------------------------------------------
|                                       |       iop_range       |
|                                       |-----------------------|
|                                       | High  |  Low  |Medium |
|                                       |-------+-------+-------|
|                                       |   N   |   N   |   N   |
|---------------------------------------+-------+-------+-------|
|group              |race               |       |       |       |
|-------------------+-------------------|       |       |       |
|MAIN               |1                  |      0|      1|      0|
|                   |-------------------+-------+-------+-------|
|                   |2                  |      0|      1|      1|
|                   |-------------------+-------+-------+-------|
|                   |3                  |      0|      0|      0|
|                   |-------------------+-------+-------+-------|
|                   |4                  |      0|      0|      0|
|                   |-------------------+-------+-------+-------|
|                   |5                  |      0|      0|      0|
|                   |-------------------+-------+-------+-------|
|                   |All                |      0|      2|      1|
|-------------------+-------------------+-------+-------+-------|
|SUB                |race               |       |       |       |
|                   |-------------------|       |       |       |
|                   |1                  |      0|      0|      0|
|                   |-------------------+-------+-------+-------|
|                   |2                  |      0|      1|      1|
|                   |-------------------+-------+-------+-------|
|                   |3                  |      0|      0|      0|
|                   |-------------------+-------+-------+-------|
|                   |4                  |      0|      0|      0|
|                   |-------------------+-------+-------+-------|
|                   |5                  |      0|      0|      0|
|                   |-------------------+-------+-------+-------|
|                   |All                |      0|      1|      1|
-----------------------------------------------------------------

{2011-05-27 (金) 23:04:06};