TABULATE入門3

Last-modified: 2015-10-19 (月) 10:44:42

**************************************************************;
* TAB030331s3.sas                                            *;
* proc tabulate を使おう                                     *;
* section 3 : 分析変数と統計量                               *;
* 2003.3.31, 翔                                              *;
* 2008.3.17, 改定1                                           *;
**************************************************************;

options nocenter;

libname mydata "c;\";

/*
前セッションと同じく
1年間にクレジットカードを利用したホテル利用者の特徴を学習させることを目的としたのデータ。1,450人分を使って,実行例を示します.
*/

data creditcard;
  infile "c:\train_space.txt"   firstobs=2 dlm='09'x; /*外部ファイルから入力*/

          input id      hotel   xgender $       xage    xincome  xmarital $     xusage  xretail xrest   xenter  xtrans  xother;  /*読み込むデータを指定*/
run;

proc print data=creditcard(obs=5);run;
/*
 OBS   id   hotel   xgender   xage   xincome   xmarital   xusage   xretail   xrest   xenter   xtrans   xother

   1    1     0     female     60       .       single    300000    100000       1        0        0    30000
   2    2     1     male       40       .       single     30000     10000       0        0        0    30000
   3    3     0     male       40       .       single    100000    100000       1        0    10000   100000
   4    4     0     male       30       .       single    300000    300000   10000   100000    30000    10000
   5    5     0     male       40       .       single     10000     10000       1        0        0        1

*/

/*****************************************************
ここまでは,Freqと同じく,度数(件数)集計を扱ってきましたが,
このセクションでは,度数以外の統計量について扱います.
まず,小売の年間利用料X性別毎に,いままでのような件数ではなく,年間総利用料の平均額を
表示させてみましょう.
*/

proc tabulate data=creditcard  formchar="           " noseps missing format=comma9.;
  class xmarital xgender;
  var   xusage;
  table xmarital*xusage*mean
       ,xgender;
run;

/*
                                  xgender

                             female     male

 xmarital
 married  xusage   Mean       134,589   115,402
 single   xusage   Mean       136,282   112,137

*/

/*
いままでどおり class文で,地区と性別を分類変数に宣言するに加え,
var文で,年間総利用料xusageを分析変数として宣言します.
次に,table文では,xmaritalに分析変数xusageを"*"で交差させ,
さらに,平均を表示するための統計量キーワード mean を連結します.
要は,度数表指定に,分析変数と統計量を交差で追記すればいいわけです.
この場合,表側に追記しましたが,表頭でもかまいません.
どうちがうのかを答えるかわりに,平均と件数,最大値,最小値を同時に
表示させる表を作成します.
*/


proc tabulate data=creditcard  formchar="           " noseps missing format=comma9.;
  class xmarital xgender;
  var   xusage;
  table xmarital*xusage*(n min mean max)
       ,xgender;
run;

/*
                                  xgender

                             female     male

 xmarital
 married  xusage   N              146       783
                   Min              1         0
                   Mean       134,589   115,402
                   Max        300,000   300,000
 single   xusage   N              156       365
                   Min              1         0
                   Mean       136,282   112,137
                   Max        300,000   300,000

*/


/*
分析変数と統計量は,同じ次元で指定しなくてもかまいません.
分析変数を表側に,統計量を表頭に指定してもよく,
結局,表のセル上で,1つの分析変数と1つの統計量が決まっていれば
いいのです.もちろん,わざわざややこしく指定する必要はありませんが,
どのような表にしたいかで,そのような指定になってしまう場合があります.
例を示します.
*/

proc tabulate data=creditcard  formchar="           " noseps missing format=comma9.;
  class xmarital xgender;
  var   xusage xage;
  table xmarital*(xusage xage)
       ,xgender*(mean p50);
run;

/*
                                            xgender

                                  female               male

                              Mean       P50      Mean       P50

 xmarital
 married      xusage          134,589   100,000   115,402   100,000
              xage                 52        60        54        60
 single       xusage          136,282   100,000   112,137   100,000
              xage                 46        40        42        40

*/


/******************************************************
表示できる統計量は,
COLPCTN
COLPCTSUM
CSS
CV
MAX
MEAN
MIN
N
NMISS
P1
P5
P10
P25
P50
P75
P90
P95
P99
PAGEPCTN
PAGEPCTSUM
PCTN
PCTSUM
PROBT
QRANGE
RANGE
REPPCTN
REPPCTSUM
ROWPCTN
ROWPCTSUM
STD
STDERR
SUM
SUMWGT
T
USS
VAR
とこれだけありますが,だいたい名前で想像つくものも多いと思います.
ここでは,よく使いそうなものを説明しておきます.
n : 度数,これは分析変数を必要としません.
  分類変数のみの場合のデフォルト統計量で,セクション1,2では,
  これが,省略されていたわけです.
mean : 平均値
p50  : 中央値,50%点
min,max : 最小,最大値
sum : 合計
nmiss : 欠損値数
これ以外でも,PCT系統計量は便利ですが,これらについては後のセクションで説明します.

言い忘れましたが,分析変数は,数値データでなくてはいけません.
数値であれば,2値だろうが順序尺度だろうが構いません.
それに対して平均値をとって意味があるかどうかは,分析者の判断です.
*/

/*******************************************************
件数以外の統計量を表示する場合,表示フォーマットは,小数点以下の桁まで
表示したいときがあります.
交差単位で,フォーマットを指定する場合,キーワードf=を使います.

*/

proc tabulate data=creditcard  formchar="           " noseps missing format=comma9.;
  class xmarital xgender;
  var   xusage xage;
  table xmarital*(xusage xage*f=7.2)
       ,xgender*(mean p50);
run;

/*

                                            xgender

                                  female               male

                              Mean       P50      Mean       P50

 xmarital
 married      xusage          134,589   100,000   115,402   100,000
              xage                 52        60        54        60
 single       xusage          136,282   100,000   112,137   100,000
              xage                 46        40        42        40

*/

/****************************************************
最後に,このセクションのテーマとは,はずれる話ですが,
各変数や統計量にラベルをつけることができます.
その例を示します.
*/

proc format;
  value $sex male="男" female="女";
  value $area married="既婚" single="未婚";
run;


proc tabulate data=creditcard  formchar="           " noseps missing format=comma9.;
  class xmarital xgender;
  var   xusage xage;
  table xmarital="配偶者有無"*(xusage="年間総利用料" xage="年齢"*f=7.2)
       ,xgender="性別"*(mean="平均" p50="中央値");
  format xmarital $area. xgender $sex.;
run;

/*

                                             性別

                                    女                  男

                              平均     中央値     平均     中央値

 配偶者有無
 既婚         年間総利用料    134,589   100,000   115,402   100,000
              年齢              51.99     60.00     54.05     60.00
 未婚         年間総利用料    136,282   100,000   112,137   100,000
              年齢              45.96     40.00     42.30     40.00

*/


**********************************************************************;
************** E N D *************************************************;
**********************************************************************;

質問・意見

サマリ 質問の要旨を簡潔にお願いします。
お名前
状態
メッセージ

質問・意見一覧

一覧に表示する項目はありません.