TABULATEプロシジャで、存在しないCLASS変数の値を表に含める
[OS]ALL
[リリース] 8.1, 8.2
[キーワード] TABULATE, CLASSDATA
[質問]
TABULATEプロシジャで多次元の表を作成するとき、存在しないクラス変数の値を表に含めることはできますか?
表1 shop 東京1 ---------------------------------------------------------------- | | date | | |---------------------| | | 01-01-01 | 01-01-02 | | |----------+----------| | | 数量 | 数量 | |----------------------------------------+----------+----------| |code | | | |----------------------------------------| | | |S01 | 3| 1| |----------------------------------------+----------+----------| |S02 | 1| 1| |----------------------------------------+----------+----------| |S03 | 2| 1| ---------------------------------------------------------------- shop 東京2 ----------------------------------------------------- | | date | | |----------| | | 01-01-01 | | |----------| | | 数量 | |----------------------------------------+----------| |code | | |----------------------------------------| | |S01 | 3| |----------------------------------------+----------| |S03 | 2| -----------------------------------------------------
表2 shop 東京2 ---------------------------------------------------------------- | | date | | |---------------------| | | 01-01-01 | 01-01-02 | | |----------+----------| | | 数量 | 数量 | |----------------------------------------+----------+----------| |code | | | |----------------------------------------| | | |S01 | 3| .| |----------------------------------------+----------+----------| |S02 | .| .| |----------------------------------------+----------+----------| |S03 | 2| .| ----------------------------------------------------------------
[回答]SAS System 8から追加されたCLASSDATAオプションを使って、出力するクラス変数の値を制御できます。表に含めるクラス変数の値の組み合わせをデータセットにしておき、TABULATEプロシジャで「CLASSDATA=データセット名」を指定します。ご質問の例の場合、クラス変数SHOP、CODE、DATEの全組み合わせを含めた次のようなCLASSDATAデータセットを作ります。
CLASSDATA データセット OBS shop code date 1 東京1 S01 01-01-01 2 東京1 S02 01-01-01 3 東京1 S03 01-01-01 4 東京2 S01 01-01-01 5 東京2 S02 01-01-01 6 東京2 S03 01-01-01 7 東京1 S01 01-01-02 8 東京1 S02 01-01-02 9 東京1 S03 01-01-02 10 東京2 S01 01-01-02 11 東京2 S02 01-01-02 12 東京2 S03 01-01-02
プログラム例 OPTIONS PAGENO=1; /* サンプルデータセットの作成*/ DATA sales; INPUT shop $ code $ date yymmdd10. +1 suryo; FORMAT date yymmdd8.; CARDS; 東京1 S01 2001/01/01 3 東京1 S02 2001/01/01 1 東京1 S03 2001/01/01 2 東京2 S01 2001/01/01 3 東京2 S03 2001/01/01 2 東京1 S01 2001/01/02 1 東京1 S02 2001/01/02 1 東京1 S03 2001/01/02 1 ; RUN; /* CLASSDATAデータセットの作成*/ PROC SQL; CREATE table _class AS SELECT * FROM (SELECT DISTINCT(shop) FROM sales) , (SELECT DISTINCT(code) FROM sales) , (SELECT DISTINCT(date) FROM sales) ; QUIT; PROC TABULATE DATA=sales CLASSDATA=_class ; CLASS shop code date; VAR suryo; TABLES shop,code,date*suryo='数量'*f=10. ; KEYLABEL sum=' '; RUN; |