* Replicate Chemin: clear matrix drop _all set mem 512m set more off * 1) Set paths to programs and data - * `basepath' is the path to your PnK folder * `p' is for the wave raw data local basepath = "C:\data\PnK" // master data path local p "\1991-92_Round" global datapath1 = "`basepath'`p'1" // path to round 1 data global datapath2 = "`basepath'`p'2" // path to round 2 data global datapath3 = "`basepath'`p'3" // path to round 3 data global roodmanpath "`basepath'\roodman" // path to Roodman data * paths to .do files global progpath1 "`basepath'\PnKDoFiles\Wave123" // path to do files for R1-3 global progpath2 "`basepath'\PnKDoFiles\Wave4" // path to do files R4 * paths to working data folders global workingpath1 "`basepath'\working\R1-3" // working data files for round 1-3 global workingpath2 "`basepath'\working\R4" // working data files for round 4 * 2) Open the data file PSM_Prep_all.DTA created in md&rpj_pNk_Master.do use "${workingpath1}\PSM_Prep_all.DTA", clear * Data management gen male = sex == 1 recode edslg (0=0) (1/5=1) (6/10=2) (11/12=3) (else=4), gen(hgrade) gen agriincome1 = cropproductionincome gen sharecropincome_net1 = sharcropincome - sharecropexpend gen agriincome_net1 = agriincome1 - agricost rename flcitpp agriincome gen agriincome_net = agriincome - agricost rename flciscrp sharecropincome rename flciscpp sharecropexpenditure label var agriincome "gross income from agriculture " label var sharecropincome_net "net income from sharecropping" label var agriincome_net "net income from agriculture " gen sumnonagri = wagenonag gen sumagri = wageag * Create village dummies: replace thanaid = floor(upzvill/10) xi i.thanaid *ren senfe nonfarm * Macros for summary stats and village dummies global Cheminmeans "hgrade male agey agehhhh no_of_adultmales relhhh_1_trland relhhh_2_trland relhhh_3_trland highedufat maxed cssv nonfarm livestockvalue hhsize sumnonagri sumagri agesq age4 no_of_adultfemales agriincome agriincome_net maxedhhh other halaa injury agricost flopt highedumat marital mliv fliv flopi equipment transport other dairy nfexpfv nferevw" global treatvilldumm "_Ithanaid_2 _Ithanaid_3 _Ithanaid_4 _Ithanaid_5 _Ithanaid_6 _Ithanaid_7 _Ithanaid_8 _Ithanaid_9 _Ithanaid_10 _Ithanaid_11 _Ithanaid_12 _Ithanaid_13 _Ithanaid_14 _Ithanaid_15 _Ithanaid_16 _Ithanaid_17 _Ithanaid_18 _Ithanaid_19 _Ithanaid_20 _Ithanaid_21 _Ithanaid_22 _Ithanaid_23 _Ithanaid_24" * Summary stats, replicating Chemin's table 1 - appendix 1 in our paper: sum ${Cheminmeans} * additional outcome variables - @ 3k missing observations because families do not have children sum fedec517_rpj medec517_rpj if pid == 1 gen adult_male_not_present = 1 - adultmalepres gen adult_female_not_present = 1- adultfemalepres sum adult_male_not_present adult_female_not_present if pid == 1 * Macros for RHS variables for all 3 logit specifications used by Chemin global Chemin1 "hgrade male agey agehhhh no_of_adultmales relhhh_1_trland relhhh_2_trland " global Chemin2 "hgrade male agey agehhhh no_of_adultmales relhhh_1_trland relhhh_2_trland cssv nonfarm livestockvalue hhsize sumnonagri sumagri agesq age4 no_of_adultfemales agriincome_net sexhhh relhhh_3_trland maxedhhh highedufat highedumat flopt flopi mliv fliv marital equipment transport other halaa injury nfexpfv nferevw agricost dairy" global Chemin3 "male agey agehhhh no_of_adultmales maxed cssv nonfarm livestockvalue hhsize sumnonagri sumagri agesq age4" *********************************** ***Replicate Chemin's Table 1 - table 1 in our paper: *Logit 1, Chemin specification 1: logit elig_defacto_treatpp $Chemin1 $treatvilldumm estimates store Spec1 *Logit 2, Chemin specification 2: *logit elig_defacto_treatpp $Chemin2 $treatvilldumm if agey > 15 logit elig_defacto_treatpp $Chemin2 $treatvilldumm estimates store Spec2 *Logit 3, Chemin specification 3: logit elig_defacto_treatpp $Chemin3 $treatvilldumm gen sample_3 = e(sample) predict ps3 estimates store Spec3 estout Spec1 Spec2 Spec3, cells(b(star fmt(%9.3f)) p(par)) starlevels(* 0.1 ** 0.05 *** 0.01) stats(N r2_p, fmt(%9.0g %9.3f) labels("Number of Obs." "Pseudo-R2")) /// legend label collabels(, none) varlabels(_cons Constant hgrade "Highest grade completed" male "Sex (male=1)" agey "Age" agehhh "Age household head" /// no_of_adultmales "No adult male in household" relhhh_1_trland "Landholdings HH head parents" relhhh_2_trland "Landholdings HH head brother" /// maxed "Education" cssv "Savings" nonfarm "Have non-farm enterprise" /// livestockvalue "Livestock value" hhsize "Household size" sumnonagri "Non-agricultural wage" sumagri "Agricultural wage" /// agesq "Age squared" age4 "Age power of 4" sexhhh "Sex of HH head" no_of_adultfemales "No adult female in household" agriincome "Agricultural income" /// relhhh_3_trland "Landholdings HH head sister" maxedhhh "Highest grade completed HH head" highedufat "Education father" highedumat "Education mother" /// flopt "Household land" flopi "Irrigated land" mliv "Mother still alive" fliv "Father still alive" marital "Marital status (married=1)" /// equipment "Equipment assets" transport "Transport assets" other "Other assets" halaa "Landed assets" injury "Injuries" /// nfexpfv "Non-farm enterprise expenses/week" nferevw "Non-farm enterprise revenues/week" agricost "Agricultural costs" /// dairy "Dairy products sales") /// // flopi fliv equipment transport nfexpfv nferevw dairy relhhh_3_trland highedufat highedumat mliv fliv injury agricost maxedhhh halaa) /// drop(_Ithanaid* ) posthead("") prefoot("") postfoot("") varwidth(26) // modelwidth(12) delimiter("") **** *** Prep for replicating Chemin's Table 2, our table 2: gen control1 = thanaid <= 24 // all treated vs non-part in treatvill gen control1a = control1 == 1 & elig_defactopp ~= 0 // all treated vs elig non-part r eatvill - eligpbility calculated on total land owned gen elig_defactopp1 = flopt < 50 | part1pp // land after gen control1aa = control1 == 1 & elig_defactopp1 ~= 0 //eligibility calculated on land operated (flopt), Chemin uses this variable gen control2 = ~(elig_defacto_treatpp == 0 & thanaid <= 25) // treated vs all individuals in control villages (excludes non-participants in treated villages) *Chemin's table 2, row 1:all treated, part vs non-part in treatvill, Chemin's replication: logit elig_defacto_treatpp $Chemin3 $treatvilldumm if control1 predict ps2 estimates store Ch2 *Chemin's table 2, row 1, part in treatvill vs elig non-part in treatvill, excludes not elig non-part in treatvill; logit elig_defacto_treatpp $Chemin3 $treatvilldumm if control1a predict ps2a estimates store Ch2a *Chemin's table 2, row 1, part in treatvill vs elig non-part in treatvill, excludes not elig non-part in treatvill; uses different elig criteria logit elig_defacto_treatpp $Chemin3 $treatvilldumm if control1aa predict ps2aa estimates store Ch2aa *Chemin's table 2, row 2: compare part in treatvill with all indiv in control vill, excludes non-part in treatvill: logit elig_defacto_treatpp $Chemin3 if control2 // $treatvilldumm predict ps2b estimates store Ch2b save "${workingpath1}\Chemin_Logit_Prep3.0.DTA", replace ******************* /* data for R preserve keep if sample_3 & lnnonlandwomen ~= . save "${workingpath1}\temp_4_r.dta", replace restore */ ******************************** use "${workingpath1}\Chemin_Logit_Prep3.0.DTA", clear ***PSM*** /*Run psm but before matching: sort data randomly*/ set seed 1000 generate x=uniform() sort x ***************************************** *Replicating Chemin's Table 2, our table 2 **************************** *Stratification matching for Chemin replication, log of expenditure per capita only, for table 2, row 1 - our table 2, row 3: mat results = J(3,3,.) local i = 1 local rownames "" foreach v in 5 10 20 { tempvar groupvars att g egen `groupvars' = cut(lnconsweekpc), group(`v') // strata 5, 10 and 20 tab `groupvars', sum(lnconsweekpc) gen `att' = . gen `g' = `groupvars' levels `g', local(gr) qui foreach j of local gr { psmatch2 elig_defacto_treatpp male agey agehhh no_of_adultmales maxed cssv nonfarm livestockvalue hhsize sumnonagri sumagri /// agesq age4 _Ithanaid_2 _Ithanaid_3 _Ithanaid_4 _Ithanaid_5 _Ithanaid_6 _Ithanaid_7 _Ithanaid_8 _Ithanaid_9 _Ithanaid_10 /// _Ithanaid_11 _Ithanaid_12 _Ithanaid_13 _Ithanaid_14 _Ithanaid_15 _Ithanaid_16 _Ithanaid_17 _Ithanaid_18 _Ithanaid_19 _Ithanaid_20 /// _Ithanaid_21 _Ithanaid_22 _Ithanaid_23 _Ithanaid_24 if control1 & `g' == `j', out(lnconsweekpc) replace `att' = r(att) if `g' == `j' } sum `att' * to get significance level: reg `att' if elig_defacto_treatpp == 1 & control1 // tests if att is significantly differnt from zero mat results[`i', 1] = `v' mat results[`i', 2] = _b[_cons] matrix a = vecdiag(e(V)) matrix b = (e(b)\a)' local b = b[1,1] local se = b[1,2] local se = sqrt(`se') local t = `b'/`se' local no = e(N) local p = 2*ttail(`no',abs(`t')) * di "`t' `p' `b'" mat results[`i', 3] = `p' * reg att if elig_defactopp == 1 & ~control1 // tests if att is significantly differnt from zero drop `att' `groupvars' `g' local ++i } ***** Table 2 row 3: mat colnames results = no_strata beta p_value mat list results *Stratification matching for Chemin replication, log of expenditure per capita only, for table 2, row 2 - our table 2, row 4: mat results2 = J(3,3,.) local i = 1 local rownames "" foreach v in 5 10 20 { tempvar groupvars att2 g1 egen `groupvars' = cut(lnconsweekpc), group(`v') //strata 5, 10 and 20 tab `groupvars', sum(lnconsweekpc) gen `att2' = . gen `g1' = `groupvars' levels `g1', local(gr) qui foreach j of local gr { psmatch2 elig_defacto_treatpp male agey agehhh no_of_adultmales maxed cssv nonfarm livestockvalue hhsize sumnonagri sumagri /// agesq age4 if control2 & `g1'==`j', out(lnconsweekpc) replace `att2' = r(att) if `g1'==`j' } sum `att2' * to get significance level: reg `att2' if elig_defacto_treatpp == 1 & control2 // tests if att is significantly differnt from zero * reg att if participating_memberpp == 0 & elig & ~control2 // tests if att is significantly differnt from zero mat results2[`i', 1] = `v' mat results2[`i', 2] = _b[_cons] matrix a = vecdiag(e(V)) matrix b = (e(b)\a)' local b = b[1,1] local se = b[1,2] local se = sqrt(`se') local t = `b'/`se' local no = e(N) local p = 2*ttail(`no',abs(`t')) * di "`t' `p' `b'" mat results2[`i', 3] = `p' drop `att2' `groupvars' `g1' local ++i } ***** Table 2 row 4: mat colnames results2 = no_strata beta p_value mat list results2 *Kernel matching for Chemin replication, log of expenditure per capita only, for table 2, row 1 - our table 2, row 3: *bandwith 0.01 0.02 0.05: * lnconsweekpc only mat results3 = J(3,5,.) local i = 1 local rownames "" foreach k in .01 .02 .05 { psmatch2 elig_defacto_treatpp, outcome(lnconsweekpc ) /// // sdlnconsweekpc lnnonlandwomen labsupwomMD1 labsupmenMD1 fedec517_rpj medec517_rpj pscore(ps2) kernel k(normal) bwidth(`k') local diff = r(att) local semean = r(seatt) * local i = 1 mat results3[`i', 1] = `k' mat results3[`i', 2] = `diff' mat results3[`i', 3] = `semean' local sd = `semean' * sqrt(`diff') sum _treated local n = r(sum) - 1 local pdiff = 2*ttail(`n', abs(`diff'/`semean')) local tdiff = `diff' / `semean' mat results3[`i', 4] = `pdiff' mat results3[`i', 5] = `tdiff' local rownames = "`rownames' `v'" local ++i } mat rownames results3 = `rownames' mat colnames results3 = k diff semean pvalue tvalue mat list results3 * for all outcomes - we only report results for log of per capita expenditure in the paper mat results3 = J(21,5,.) local i = 1 local rownames "" foreach v in lnconsweekpc sdlnconsweekpc lnnonlandwomen labsupwomMD1 labsupmenMD1 fedec517_rpj medec517_rpj { foreach k in .01 .02 .05 { psmatch2 elig_defacto_treatpp, outcome(`v') /// // pscore(ps2) kernel k(normal) bwidth(`k') local diff = r(att) local semean = r(seatt) * local i = 1 * local k = .05 * local v = "lnconsweekpc" mat results3[`i', 1] = `k' mat results3[`i', 2] = `diff' mat results3[`i', 3] = `semean' local sd = `semean' * sqrt(`diff') sum _treated local n = r(sum) - 1 local pdiff = 2*ttail(`n', abs(`diff'/`semean')) local tdiff = `diff' / `semean' mat results3[`i', 4] = `pdiff' mat results3[`i', 5] = `tdiff' local k1 = string(`k') local k1 = subinstr("`k1'",".","_",1) local rownames "`rownames' `v'`k1'" local ++i } } di "`rownames'" mat rownames results3 = `rownames' mat colnames results3 = k diff semean pvalue tvalue mat list results3 *Kernel matching for Chemin replication, log of expenditure per capita only, for table 2, row 1 - our table 2, row 4: *bandwith 0.01 0.02 0.05: * lnconsweekpc only mat results4 = J(3,5,.) local i = 1 local rownames "" foreach k in .01 .02 .05 { psmatch2 elig_defacto_treatpp, outcome(lnconsweekpc ) /// pscore(ps2b) kernel k(normal) bwidth(`k') local diff = r(att) local semean = r(seatt) * local i = 1 mat results4[`i', 1] = `k' mat results4[`i', 2] = `diff' mat results4[`i', 3] = `semean' local sd = `semean' * sqrt(`diff') sum _treated local n = r(sum) - 1 local pdiff = 2*ttail(`n', abs(`diff'/`semean')) local tdiff = `diff' / `semean' mat results4[`i', 4] = `pdiff' mat results4[`i', 5] = `tdiff' local rownames = "`rownames' `v'" local ++i } mat rownames results4 = `rownames' mat colnames results4 = k diff semean pvalue tvalue mat list results4 * all outcomes - we only report results for log of per capita expenditure in the paper mat results5 = J(21,5,.) local i = 1 local rownames "" foreach v in lnconsweekpc sdlnconsweekpc lnnonlandwomen labsupwomMD1 labsupmenMD1 fedec517_rpj medec517_rpj { foreach k in .01 .02 .05 { psmatch2 elig_defacto_treatpp, outcome(`v') /// // pscore(ps2b) kernel k(normal) bwidth(`k') local diff = r(att) local semean = r(seatt) * local i = 1 mat results5[`i', 1] = `k' mat results5[`i', 2] = `diff' mat results5[`i', 3] = `semean' local sd = `semean' * sqrt(`diff') sum _treated local n = r(sum) - 1 local pdiff = 2*ttail(`n', abs(`diff'/`semean')) local tdiff = `diff' / `semean' mat results5[`i', 4] = `pdiff' mat results5[`i', 5] = `tdiff' local k1 = string(`k') local k1 = subinstr("`k1'",".","_",1) local rownames "`rownames' `v'`k1'" local ++i } } di "`rownames'" mat rownames results5 = `rownames' mat colnames results5 = k diff semean pvalue tvalue mat list results5 ********************************************************************************************************** * Table 3 * Replicate Chemin's table 3 - our table 3 * Kernel matching, bandwith 0.05 * Replicates Table 3, 1st column in our paper, we run PSM only for logit specification 3 as does Chemin mat results6 = J(21, 5, .) local i = 1 local rownames "" foreach v in lnconsweekpc sdlnconsweekpc lnnonlandwomen labsupwomMD1 labsupmenMD1 fedec517_rpj medec517_rpj { foreach k in .01 .02 .05 { psmatch2 elig_defacto_treatpp, outcome(`v') pscore(ps3) kernel k(normal) bwidth(`k') local diff = r(att) local semean = r(seatt) * local i = 1 mat results6[`i', 1] = `k' mat results6[`i', 2] = `diff' mat results6[`i', 3] = `semean' local sd = `semean' * sqrt(`diff') sum _treated local n = r(sum) - 1 local pdiff = 2*ttail(`n', abs(`diff'/`semean')) local tdiff = `diff' / `semean' mat results6[`i', 4] = `pdiff' mat results6[`i', 5] = `tdiff' local k1 = string(`k') local k1 = subinstr("`k1'",".","_",1) local rownames "`rownames' `v'`k1'" local ++i } } mat rownames results6 = `rownames' mat colnames results6 = k diff semean pvalue tvalue mat list results6 **************************************************************************************************** * Replicates figure 2 in our paper: psmatch2 elig_defacto_treatpp, outcome(lnnonlandwomen) pscore(ps3) kernel k(normal) bwidth(0.01) psgraph **************************************************************************************************** * Our table 4: * Impacts segregated by gender: * female and male MF borrowers: *maleparthh and femaleparthh are indicators that a male or female borrower is in the household *maleNfemaleparthh is male and female in one household - but it is not used gen femalepartpureborr = femaleparthh | maleNfemaleparthh // same as femaleparthh gen malepartpureborr = maleparthh | maleNfemaleparthh // same as maleparthh gen elig_female_in_male_borrower_hh = elig_defacto_treat == 1 & maleparthh == 1 & femaleparthh ~= 1 // no need for this variable to be "female" - can be eligble household with male borrower * Assess impact of women - all outcome variables * kernel matching, 0.05 * female borrowers vs all females in households with no borrowers to assess the effect of female borrowing: mat results7 = J(7, 5, .) local i = 1 local k = 0.05 // local rownames "" foreach v in lnconsweekpc sdlnconsweekpc lnnonlandwomen labsupwomMD1 labsupmenMD1 fedec517_rpj medec517_rp { psmatch2 elig_defacto_treatpp $Chemin3 if elig_defacto_treatpp == 1 & femaleparthh /// | ~ maleparthh, outcome(`v') kernel k(normal) bwidth(`k') logit // neighbor(1) local diff = r(att) // extract att & seatt and store in resutls matrix local semean = r(seatt) * local i = 1 mat results7[`i', 1] = `k' mat results7[`i', 2] = `diff' mat results7[`i', 3] = `semean' local sd = `semean' * sqrt(`diff') sum _treated // extract p- & t-values local n = r(sum) - 1 local pdiff = 2*ttail(`n', abs(`diff'/`semean')) local tdiff = `diff' / `semean' mat results7[`i', 4] = `pdiff' mat results7[`i', 5] = `tdiff' local k1 = string(`k') local k1 = subinstr("`k1'",".","_",1) local rownames "`rownames' `v'`k1'" cap drop _treated_`v' cap drop _support_`v' cap drop _weight_`v' gen _treated_`v' = _treated gen _support_`v' = _support gen _weight_`v' = _weight local ++i } mat rownames results7 = `rownames' mat colnames results7 = k diff semean pvalue tvalue mat list results7 * extract critical gamma - for sensitivity analysis, not all results reported in paper mat results7_ = J(7,3, .) local j = 1 local rownames "" foreach v in lnconsweekpc sdlnconsweekpc lnnonlandwomen labsupwomMD1 labsupmenMD1 fedec517_rpj medec517_rp { tempvar v1 gen `v1' = `v' - _`v' if _treated_`v' == 1 & _support_`v'==1 rbounds `v1', gamma(1(.1)2.2) mat outmat = r(outmat) mat results7_[`j', 1] = `j' local j1 = 0 local j2 = 0 local rownames "`rownames' `v'" forval i = 1/13 { if (outmat[`i', 2] > 0.05 | outmat[`i', 3] > 0.05 ) & `j1' == 0 { // sign+ > 5% mat results7_[`j', 2] = outmat[`i', 1] local j1 = 1 } if outmat[`i', 6] < 0 & outmat[`i', 7] > 0 & `j2' == 0 { mat results7_[`j',3] = outmat[`i', 1] local j2 = 1 } if `i' == 13 & `j1' == 0 { mat results7_[`j', 2] = 2.3 } if `i' == 13 & `j2' == 0 { mat results7_[`j', 3] = 2.3 } } local ++j drop `v1' } di "Critical Gamma for each outcome variable for female borrowing" mat colnames results7_ = i gamma_sign_plus gamma_sign_CI mat rownames results7_ = `rownames' mat list results7_ * Assess impact of Male borrowing - all outcome variables * kernel matching, 0.05: * compare outcomes for hh with male only borrowers and all other groups mat results8 = J(7, 5, .) local i = 1 local k = 0.05 local rownames "" foreach v in lnconsweekpc sdlnconsweekpc lnnonlandwomen labsupwomMD1 labsupmenMD1 fedec517_rpj medec517_rpj { psmatch2 elig_female_in_male_borrower_hh $Chemin3 if femaleparthh ~= 1, /// outcome(`v') kernel k(normal) bwidth(`k') logit local diff = r(att) local semean = r(seatt) * local i = 1 mat results8[`i', 1] = `k' mat results8[`i', 2] = `diff' mat results8[`i', 3] = `semean' local sd = `semean' * sqrt(`diff') sum _treated local n = r(sum) - 1 local pdiff = 2*ttail(`n', abs(`diff'/`semean')) local tdiff = `diff' / `semean' mat results8[`i', 4] = `pdiff' mat results8[`i', 5] = `tdiff' local k1 = string(`k') local k1 = subinstr("`k1'",".","_",1) local rownames "`rownames' `v'`k1'" cap drop _treated_`v' cap drop _support_`v' cap drop _weight_`v' gen _treated_`v' = _treated gen _support_`v' = _support gen _weight_`v' = _weight local ++i } di "estimated att for male borrowing mat rownames results8 = `rownames' mat colnames results8 = k diff semean pvalue tvalue mat list results8 * extract critical gamma - for sensitivity analysis, not all results reported in paper mat results8_ = J(7,3, .) local j = 1 local rownames "" foreach v in lnconsweekpc sdlnconsweekpc lnnonlandwomen labsupwomMD1 labsupmenMD1 fedec517_rpj medec517_rp { tempvar v1 gen `v1' = `v' - _`v' if _treated_`v' == 1 & _support_`v'==1 rbounds `v1', gamma(1(.1)2.2) mat outmat = r(outmat) mat results8_[`j', 1] = `j' local j1 = 0 local j2 = 0 local rownames "`rownames' `v'" forval i = 1/13 { if (outmat[`i', 2] > 0.05 | outmat[`i', 3] > 0.05 ) & `j1' == 0 { // sign+ > 5% mat results8_[`j', 2] = outmat[`i', 1] local j1 = 1 } if outmat[`i', 6] < 0 & outmat[`i', 7] > 0 & `j2' == 0 { mat results8_[`j',3] = outmat[`i', 1] local j2 = 1 } if `i' == 13 & `j1' == 0 { mat results8_[`j', 2] = 2.3 } if `i' == 13 & `j2' == 0 { mat results8_[`j', 3] = 2.3 } } local ++j drop `v1' } di in yellow "Critical Gamma for each outcome variable for male borrowing" mat colnames results8_ = i gamma_sign_plus gamma_sign_CI mat rownames results8_ = `rownames' mat list results8_ ***************************************** * Sensitivity analysis for ps3, replicates table 5 in our paper /* foreach v in lnconsweekpc sdlnconsweekpc lnnonlandwomen labsupwomMD1 labsupmenMD1 fedec517_rpj medec517_rpj { psmatch2 elig_defacto_treatpp, outcome(`v') pscore(ps3) kernel k(normal) bwidth(0.01) } */ * for women non-land assets only - USED in text - this impact is vulnerable to unubservables despite being * statistically significant. * Nearest neighbour - reported in paper psmatch2 elig_defacto_treatpp, outcome(lnnonlandwomen) pscore(ps3) neighbor(1) gen lnnonlandwomens = lnnonlandwomen - _lnnonlandwomen if _treated==1 & _support==1 rbounds lnnonlandwomens, gamma(1 (0.05) 1.50) * bandwidth 0.05 psmatch2 elig_defacto_treatpp, outcome(lnnonlandwomen ) pscore(ps3) kernel k(normal) bwidth(0.05) gen lnnonlandwomens2 = lnnonlandwomen - _lnnonlandwomen if _treated==1 & _support==1 rbounds lnnonlandwomens2, gamma(1 (0.05) 1.50) * for all outcome variables drop _lnnonlandwomen lnnonlandwomens foreach v in lnconsweekpc sdlnconsweekpc lnnonlandwomen labsupwomMD1 labsupmenMD1 fedec517_rpj medec517_rpj { psmatch2 elig_defacto_treatpp, outcome(`v') pscore(ps3) kernel k(normal) bwidth(0.01) qui gen `v's =`v' - _`v' if _treated == 1 & _support == 1 rbounds `v's, gamma(1 (0.1) 2.0) mat `v' = r(outmat) } * list all the outcome variables foreach v in lnconsweekpc sdlnconsweekpc lnnonlandwomen labsupwomMD1 labsupmenMD1 fedec517_rpj medec517_rpj { mat list `v' }