Stataで棒グラフ

年度(date1_fiscal)別の年齢(age)分布を示したいので、年代別(20歳台、30歳台・・・)に集計した結果を棒グラフで示してみましょう。年度によって人数が異なるので、人数で積み上げた棒グラフと割合を示した棒グラフを作成します。

まず、各年代のダミー変数age_cat1-5を作成します。

generate age_cat = floor(age/10)
tabstat age, stat(min max n) by(age_cat)
tabulate age_cat, generate(age_cat)
tabulate age_cat1 age_cat, missing
tabulate age_cat2 age_cat, missing
tabulate age_cat3 age_cat, missing
tabulate age_cat4 age_cat, missing
tabulate age_cat5 age_cat, missing

人数で積み上げた棒グラフは下記コマンドで作成できます。

graph hbar (sum) age_cat1 age_cat2 age_cat3 age_cat4 age_cat5, xsize(3.7) ysize(3.7) ///
over(date1_fiscal, label(labsize(small))) stack ///
yalternate ///
ylabel(0(1000)5000, labsize(small) nogrid format(%9.0g)) ///
ytick(0(1000)5000) ///
bar(1, color(sandb)) bar(2, color(ltblue)) bar(3, color(lime)) bar(4, color(yellow)) bar(5, color(khaki)) ///
blabel(bar, size(vsmall) position(center)) ///
legend(label(1 “18-29”) label(2 “30-39”) label(3 “40-49”) label(4 “50-59”) label(5 “60-80 yr”) position(6) rows(1) size(small) symysize(0.6) symxsize(0.6)) ///
title(“Age distribution of 69,470 male checkups”, size(small) span position(11))

全体を100%にした割合を示すには、percentagesオプションを追加します。

graph hbar (sum) age_cat1 age_cat2 age_cat3 age_cat4 age_cat5 if male==1, xsize(3.7) ysize(3.7) ///
over(date1_fiscal, label(labsize(small))) stack percentages ///
yalternate ///
ylabel(0 “0” 20 “20” 40 “40” 60 “60” 80 “80” 100 “100%”, labsize(small) nogrid format(%9.0g)) ///
ytick(0(10)100) ///
ytitle(“”) ///
bar(1, color(sandb)) bar(2, color(ltblue)) bar(3, color(lime)) bar(4, color(yellow)) bar(5, color(khaki)) ///
legend(label(1 “18-29”) label(2 “30-39”) label(3 “40-49”) label(4 “50-59”) label(5 “60-80 yr”) position(6) rows(1) size(small) symysize(0.6) symxsize(0.6)) ///
title(“Age distribution of 69,470 male checkups”, size(small) span position(11))