**************************************************************;
* TAB030401s4.sas *;
* proc tabulate を使おう *;
* section 4 : PCT系統計量 *;
* 2003.4.1, 翔 *;
* 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
*/
/*****************************************************
統計量のなかで,比率をあらわすPCT系統計量について,とりあげます.
前もっていっておくと,比率を扱うには,PCT系統計量を使う
以外にも方法があり,それは次のセクションで述べるつもりです.
PCT系統計量は,全部で10種類あり,いずれも
パーセンテージ,構成比を表示するのに使います.
大別すると,分類変数用のPCTN系と分析変数用のPCTSUM系があります.
分類変数 分析変数
件数比率 合計比率
----------------- -------- --------
パーセント PCTN PCTSUM
横パーセント ROWPCTN ROWPCTSUM
縦パーセント COLPCTN COLPCTSUM
シートパーセント PAGEPCTN PAGEPCTSUM
レポートパーセント REPPCTN REPPCTSUM
まず,基本であるPCTNとPCTSUMの例を示します.
*/
proc tabulate data=creditcard formchar=" " noseps missing format=comma9.;
class xretail xgender xincome;
var xusage;
table all xincome
,(all xgender)*(n pctn*f=7.1)
/rts=10;
run;
/*
xgender
All female male
N PctN N PctN N PctN
All 1,450 100.0 302 20.8 1,148 79.2
xincome
. 34 2.3 2 0.1 32 2.2
1 673 46.4 128 8.8 545 37.6
100 114 7.9 59 4.1 55 3.8
300 158 10.9 50 3.4 108 7.4
500 154 10.6 25 1.7 129 8.9
700 138 9.5 19 1.3 119 8.2
1000 179 12.3 19 1.3 160 11.0
*/
proc tabulate data=creditcard formchar=" " noseps missing format=comma11.;
class xretail xgender xincome;
var xusage;
table all xincome
,(all xgender)*xusage*(n sum pctsum*f=7.1)
/rts=10;
run;
/*
xgender
All female male
xusage xusage xusage
N Sum PctSum N Sum PctSum N Sum PctSum
All 1,450 172,200,103 100.0 302 40,910,012 23.8 1,148 131,290,091 76.2
xincome
. 34 5,480,001 3.2 2 600,000 0.3 32 4,880,001 2.8
1 673 78,730,045 45.7 128 17,790,003 10.3 545 60,940,042 35.4
100 114 12,650,010 7.3 59 7,060,003 4.1 55 5,590,007 3.2
300 158 17,530,014 10.2 50 6,910,004 4.0 108 10,620,010 6.2
500 154 19,550,005 11.4 25 3,920,000 2.3 129 15,630,005 9.1
700 138 15,210,007 8.8 19 2,010,000 1.2 119 13,200,007 7.7
1000 179 23,050,021 13.4 19 2,620,002 1.5 160 20,430,019 11.9
*/
/*
上の例で明らかなように,PCTNは,件数Nの全体に対する構成比です.
もちろん件数Nをわざわざ並列しなくても,PCTNだけ表示できます.
同様にPCTSUMは,合計SUMの全体に対する構成比です.
*/
/********************************************************
PCTN,PCTSUMの前に,ROW,COL,PAGE,REPをつけることで,
全体に対する比率ではなく,横,縦,シート,レポート全体を100%
とした比率を表示できます.なお,REPPCTNとPCTN,
REPPCTSUMとPCTSUMは,結局同じことです.
*/
proc tabulate data=creditcard formchar=" " noseps missing format=comma9.;
class xretail xgender xincome;
var xusage;
table all xincome
,(all xgender)*(n rowpctn*f=7.1)
/rts=10;
run;
/*
xgender
All female male
N RowPctN N RowPctN N RowPctN
All 1,450 100.0 302 20.8 1,148 79.2
xincome
. 34 100.0 2 5.9 32 94.1
1 673 100.0 128 19.0 545 81.0
100 114 100.0 59 51.8 55 48.2
300 158 100.0 50 31.6 108 68.4
500 154 100.0 25 16.2 129 83.8
700 138 100.0 19 13.8 119 86.2
1000 179 100.0 19 10.6 160 89.4
*/
proc tabulate data=creditcard formchar=" " noseps missing format=comma9.;
class xretail xgender xincome;
var xusage;
table all xincome
,(all xgender)*(n colpctn*f=7.1)
/rts=10;
run;
/*
xgender
All female male
N ColPctN N ColPctN N ColPctN
All 1,450 100.0 302 100.0 1,148 100.0
xincome
. 34 2.3 2 0.7 32 2.8
1 673 46.4 128 42.4 545 47.5
100 114 7.9 59 19.5 55 4.8
300 158 10.9 50 16.6 108 9.4
500 154 10.6 25 8.3 129 11.2
700 138 9.5 19 6.3 119 10.4
1000 179 12.3 19 6.3 160 13.9
*/
/**************************************************************
PCTNとPCTSUMには,どこまでを範囲を100%とするか(分母)をコントロールすることも
できます.表の構成が複雑になると,それに合わせてこの分母指定も非常に複雑に
なりますから,ここでは簡単な例示にとどめます.
*/
proc tabulate data=creditcard formchar=" " noseps missing format=comma9.;
class xretail xgender xincome;
var xusage;
table xincome
,all*(n pctn*f=7.1) xgender*(n pctn<xgender>*f=7.1)
/rts=10;
run;
/*
xgender
All female male
N PctN N PctN N PctN
xincome
. 34 2.3 2 5.9 32 94.1
1 673 46.4 128 19.0 545 81.0
100 114 7.9 59 51.8 55 48.2
300 158 10.9 50 31.6 108 68.4
500 154 10.6 25 16.2 129 83.8
700 138 9.5 19 13.8 119 86.2
1000 179 12.3 19 10.6 160 89.4
*/
/*
PCTNの後ろに<>で分母の範囲を指定しています.
<xgender>というのは,xgenderで分類する前を100%とするという意味です.
PCTSUMの分母指定をつかえば,ローンの極度と平残から消化率を出すこともできます.
ここでは,説明のために,年間総利用料を極度,エンターテイメントの年間利用料を平残とみなして,消化率表示の例を
示します.
*/
proc tabulate data=creditcard formchar=" " noseps missing format=comma11.;
class xincome;
var xusage xenter;
table xincome
,n
xusage*mean="極度"
xenter*mean="平残"
xenter*pctsum<xusage>="消化率"*f=8.1
/rts=10;
run;
/*
xusage xenter xenter
N 極度 平残 消化率
xincome
. 34 161,177 29,118 18.1
1 673 116,984 10,951 9.4
100 114 110,965 1,667 1.5
300 158 110,949 2,975 2.7
500 154 126,948 11,039 8.7
700 138 110,217 13,043 11.8
1000 179 128,771 17,821 13.8
*/
/*
PCT<>型指定は,便利な反面,それ以上に文法がややこしいことを覚えておいてください.
交差がもっと複雑な表になると,<>内に複数の変数交差を意味を考えて書き込まなければならないからです.
たとえば,つぎにような感じです.
pctn<all xusage xgender xusage*xgender>
でも,この規則は,私もちゃんと理解できていないので,うまく説明できません.
理解したければ,SASのマニュアルを読み解いてください.
比率を表示する場合のいくつかは,次のセクションで紹介する方法を応用することを
おすすめします.
*/
/*
極度 ・・・ 1ヶ月間で使っていい金額の上限。限度額。限度枠。ショッピング枠、キャッシング枠、ローン枠とか種類がある。
平残 ・・・ 1ヶ月間の平均残高。例えば、1月に使った額、2月に使った額、・・・、12月に使った額を1年(12ヶ月)で平均する。
消化率・・・ 平残÷極度。使える枠(限度額)のうち、どのくらい使ってもらえているかを示す数字。
*/
**********************************************************************;
************** E N D *************************************************;
**********************************************************************;
質問・意見
質問・意見一覧
一覧に表示する項目はありません.