
use ZA5900_v3-0-0.dta, replace
renvars, lower // Switch variable names to lower case
// Fix country variable
generate cntry = c_alphan
replace cntry = "GB" if cntry == "GB-GBN"
replace cntry = "DE" if cntry == "DE-E" | cntry == "DE-W"
replace cntry = "BE" if cntry == "BE-BRU" | cntry == "BE-WAL" | cntry == "BE-FLA"
// Generate country name variable
kountry cntry, from(iso2c)
encode NAMES_STD, gen(country)
drop NAMES_STD
// Happiness variable
recode v55 (1 = 6) (2 = 5) (3 = 4) (4 = 3) (5 = 2) (6 = 1) (7 = 0) (0 8 9 = .), gen(lsat)
label define lsat 0 "Completely unhappy" ///
1 "Very unhappy" ///
2 "Fairly unhappy" ///
3 "Neither happy nor unhappy" ///
4 "Fairly happy" ///
5 "Very happy" ///
6 "Completely happy"
label val lsat lsat
label var lsat "Happiness"
// Plot means by country
preserve
statsby mean_ = _b[_cons] ///
loci = (_b[_cons] - 1.96 * _se[_cons]) ///
hici = (_b[_cons] + 1.96 * _se[_cons]) ///
, by(country) total clear: ///
regress lsat
replace country = 1000 if country == .
label define country 1000 "{bf: Total}", modify
egen order_ = rank(mean_), unique
labmask order_, value(country) decode
twoway (rcap mean_ mean_ order_, horizontal) ///
(rspike loci hici order_, horizontal) ///
, legend(off) ylabel(1/41, valuelabels ang(h) labsize(*.8)) ///
xlabel(3.5 (.5) 5.0, grid format(%6.1f)) name(lsat, replace) ///
xmtick(3.5 (.25) 5.0, grid) ///
ytitle("") xtitle("Average happiness") xscale(alt) ysize(8) ///
note(" " ///
"{it:Note:} Happiness ranges from 0 ('Completely unhappy') to 6 ('Completely happy')" ///
"{it:Source:} ISSP 2012, doi:10.4232/1.12339" , span size(*.8))
restore