|
|
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;
|
|||||