use acountry asex aage ayear a602 a612 aweight using GGS_Wave1_V.4.2.dta, clear
// Create outcome variable
recode a612 (1 2 1601 = 1 "(Likely) infertile") ///
(3 4 1501 1602 = 0 "(Likely) fertile") ///
(2001 . .a .b .c = .x "Don't know"), ///
gen(infertility)
replace infertility = 0 if a602 == 1 // Also fertile when currently pregnant
// Create country identifier
gen cntry = ""
replace cntry = "BG" if acountry == 11
replace cntry = "RU" if acountry == 12
replace cntry = "GE" if acountry == 13
replace cntry = "DE" if acountry == 14
replace cntry = "FR" if acountry == 15
replace cntry = "HU" if acountry == 16
replace cntry = "IT" if acountry == 17
replace cntry = "NL" if acountry == 18
replace cntry = "RO" if acountry == 19
replace cntry = "NO" if acountry == 20
replace cntry = "AT" if acountry == 21
replace cntry = "EE" if acountry == 22
replace cntry = "BE" if acountry == 23
replace cntry = "AU" if acountry == 24
replace cntry = "LT" if acountry == 25
replace cntry = "PL" if acountry == 26
replace cntry = "CZ" if acountry == 28
// Recode gender variable
gen sex = ""
replace sex = "Men" if asex == 1
replace sex = "Women" if asex == 2
// Drop unnecessary countries
drop if inlist(cntry, "IT", "AU", "NL")
// Prevalence plot by country
preserve
// Drop unnecesary age groups
keep if aage <= 39
keep if aage >= 34
svyset [pweight = aweight] // Declare weight
// Create temporary files and postfile
tempname foo
tempname infert
postfile `foo' str2 cntry str5 sex perc_infert perc_infert_ll perc_infert_ul using `infert' , replace
levelsof cntry, local(levels1)
levelsof sex, local(sex1)
// Calculate proportions by country and sex
foreach sex of local sex1 {
foreach country of local levels1 {
// Calculate proportions
capture proportion infertility if cntry == "`country'" & sex == "`sex'"
*matrix list r(table)
matrix coefs = r(table)
local perc = coefs[1,2] * 100
local perc_ll = coefs[5,2] * 100
local perc_ul = coefs[6,2] * 100
di "`country'" _skip(2) `perc_ll' _skip(2) `perc' _skip(2) `perc_ul'
if "`perc'" != "" { // Make sure that the loop doesn't break if empty
post `foo' ("`country'") ("`sex'") (`perc') (`perc_ll') (`perc_ul')
}
}
}
postclose `foo'
// Use posted data set
use `infert', clear
// Sort countries by size for women
egen order_ = rank(-perc_infert) if sex == "Women", unique
labmask order_, value(cntry)
// Plot for women
twoway (dot perc_infert order_ if sex == "Women", horizontal) ///
(rcap perc_infert_ll perc_infert_ul order_ if sex == "Women", horizontal) ///
, ylabel(1/14, val) legend(off) ///
ytitle("") xtitle("% of {bf:women} aged 35{c 0150}39 reporting (suspected) infertility") ///
/*caption("{it:Note:} Error bars denote 95 % confidence intervals", size(small) span)*/ ///
name(infert3539women, replace)
// Drop women's order
drop order_
// Sort countries by size for men
egen order_ = rank(-perc_infert) if sex == "Men", unique
labmask order_, value(cntry)
// Plot for men
twoway (dot perc_infert order_ if sex == "Men", horizontal) ///
(rcap perc_infert_ll perc_infert_ul order_ if sex == "Men", horizontal) ///
, ylabel(1/13, val) legend(off) ///
ytitle("") xtitle("% of {bf:men} aged 35{c 0150}39 reporting (suspected) infertility") ///
/*caption("{it:Note:} Error bars denote 95 % confidence intervals", size(small) span)*/ ///
name(infert3539men, replace)
// Combine graphs
graph combine infert3539women infert3539men ///
, ysize(8) col(1) xcommon ///
caption("{it:Source:} Generations and Gender Survey Wave 1 (2005{c 0150}2011}" ///
"{it:Note:} Error bars denote 95 % confidence intervals", size(vsmall) span)
restore
// Plot infertility by age
// Recode age into groups
recode aage (20/24 = 1 "20–24") ///
(25/29 = 2 "25–29") ///
(30/34 = 3 "30–34") ///
(35/39 = 4 "35–39") ///
(40/45 = 5 "40–45") ///
(1/19 = .a "Below 20 y") ///
(46/85 = .b "46+ y") ///
, gen(age)
// Save valuelabels in temporary do-file
tempfile valuelabels
label save age using `valuelabels'
svyset [pweight = aweight] // Declare weight
// Create temporary files and postfile
tempname foo
tempname infertage
postfile `foo' str2 cntry str5 sex age perc_infert perc_infert_ll perc_infert_ul using `infertage' , replace
levelsof cntry, local(levels1)
levelsof sex, local(sex1)
// Calculate proportion by age group, country, and sex
foreach sex of local sex1 {
foreach country of local levels1 {
forvalues x = 1/5 {
// Calculate proportions
capture proportion infertility if age == `x' & cntry == "`country'" & sex == "`sex'"
*matrix list r(table)
matrix coefs = r(table)
local perc = coefs[1,2] * 100
local perc_ll = coefs[5,2] * 100
local perc_ul = coefs[6,2] * 100
di "`country'" _skip(2) `x' _skip(2) `perc_ll' _skip(2) `perc' _skip(2) `perc_ul'
if "`perc'" != "" { // Make sure that the loop doesn't break if
post `foo' ("`country'") ("`sex'") (`x') (`perc') (`perc_ll') (`perc_ul')
}
}
}
}
postclose `foo'
// Use posted values
use `infertage', clear
drop if perc_infert == . // Drop empty rows
// Define and set saved value labels again
do `valuelabels'
label val age age
// Plot for women by country and age
twoway (rarea perc_infert_ll perc_infert_ul age if sex == "Women", fcolor(gs15) cmissing(no)) ///
(line perc_infert age if sex == "Women", cmissing(no)) ///
, by(cntry, cols(3) legend(off) note("") ///
caption("{it:Source:} Generations and Gender Survey Wave 1 (2005{c 0150}2011)" ///
"{it:Note:} Gray areas denote 95 % confidence intervals", size(vsmall) span)) ///
ytitle("% of {bf:women} reporting (suspected) infertility") xtitle("Age group") ///
xlabel(1/5, val alternate) ///
ysize(8) name(infertage, replace)