collapse (mean) incocomp, by(quintile)
graph dot incocomp, ///
over(quintile, relabel(1 `""1" "(poorest)""' 5 `""5" "(richest)""')) ///
vertical /// // Labels with line break
ytitle("Income comparison orientation") ///
yscale(range(1.5 3.0)) ///
ylabel(1.5 (.25) 3.0, format(%6.2f)) /// // Format axis numbering
exclude0 ///
b1title("Income quintile averages") /// // Label over() axis
name(byquintile, replace) ///
fxsize(50) // Reduce size for combining
restore
collapse (mean) incocomp, by(cntry)
// Create neatly ordered variable for x-axis
egen order = rank(-incocomp), unique
encode cntry, gen(geo)
labmask order, value(geo) decode
graph dot incocomp, over(order, label(alternate)) vertical ///
ytitle("Income comparison orientation") ///
name(bycountry, replace) ///
ylabel(1.5 (.25) 3.0, format(%6.2f)) exclude0 yscale(off) ///
b1title("Country averages") fxsize(100)
graph combine byquintile bycountry, xsize(6) ycommon imargin(zero)

restore
collapse (mean) incocomp, by(quintile cntry)
// Get data into proper shape
sort cntry quintile
reshape wide incocomp, i(cntry) j(quintile)
// Create ordered variable for x-axis labels
gen diff = incocomp5 - incocomp1 // Income comparison gap
egen order = rank(incocomp5), unique
encode cntry, gen(geo)
labmask order, value(geo) decode
sort order
// Create variables as marker labels
gen incocomp1l = 1
gen incocomp3l = 3
gen incocomp5l = 5
twoway (pcspike incocomp1 order incocomp5 order, lcolor(gs14)) ///
(scatter incocomp1 order, mlabel(incocomp1l) mlabpos(0) msymbol(none)) ///
(scatter incocomp5 order, mlabel(incocomp5l) mlabpos(0) msymbol(none)) ///
, xlab(1/23, valuelabels ang(v)) ///
ytitle("Average income comparison orientation") ///
ylabel(, format(%6.1f)) ///
xtitle("") ///
name(bycountry, replace) ///
legend(label(1 "Test") ///
label(2 "1 First quintile (poorest)") ///
label(3 "5 Fifth quintile (richest)") ///
order(2 3) ring(0) pos(5))