************ Replication File for Turkey Paper *** March 2014 cd C:\Users\wb200090\Dropbox\ISKUR_2012\PublicUseDataSet\ use TurkeyPublicUseData.dta, clear set matsize 1000 set type double ************ TABLE 1: Is attrition related to treatment status? ************** est drop _all foreach var of var BB_dmiss FF_dmiss { *** Full sample reg `var' maxTreat stratadum1-stratadum457 if eval_course==1, robust sum `var' if maxTreat==0 & e(sample) estadd scalar mean = r(mean) eststo table1a_`i' *** Young Males reg `var' maxTreat stratadum1-stratadum457 if eval_course==1 & MM_my==1, robust sum `var' if maxTreat==0 & e(sample) & MM_my==1 estadd scalar mean = r(mean) eststo table1b_`i' *** Old Males reg `var' maxTreat stratadum1-stratadum457 if eval_course==1 & MM_mo==1, robust sum `var' if maxTreat==0 & e(sample) & MM_mo==1 estadd scalar mean = r(mean) eststo table1c_`i' *** Young Females eststo table1d: reg `var' maxTreat stratadum1-stratadum457 if eval_course==1 & MM_fy==1, robust sum `var' if maxTreat==0 & e(sample) & MM_fy==1 estadd scalar mean = r(mean) eststo table1d_`i' *** Old Females reg `var' maxTreat stratadum1-stratadum457 if eval_course==1 & MM_fo==1, robust sum `var' if maxTreat==0 & e(sample) & MM_fo==1 estadd scalar mean = r(mean) eststo table1e_`i' local i = `i' + 1 } #delimit ; esttab table1a_* table1b_* table1c_* table1d_* table1e_* using RegTables\table1.csv, replace depvar legend label nonumbers drop(stratadum* _cons) b(%9.3f) se star(* 0.10 ** 0.05 *** 0.01) stats(mean N, fmt(%9.3f %9.0g) labels("Control Group Attrition Rate" "Sample Size")) mgroups("Full Sample" "Male Youth" "Older Male" "Female Youth" "Older Female", pattern(1 0 1 0 1 0 1 0 1 0)) title("Is treatment status related to attrition?") addnotes("""") ; #delimit cr *** Result noted in the text, that attrition is unrelated to whether or not they are employed by January 2012 reg employjan12 FF_dmiss stratadum1-stratadum457 if eval_course==1, robust *********** TABLE 2: BALANCE AND SUMMARY STATISTICS ***************** local MM_controls " MIS_course_days MIS_course_hrs privprovider dAccounting dProfessional dCraftsman dTechnical dService dIstanbul MM_female MM_age MM_geq_hs" local BB_controls "ed_yrs prev_train hh hh_size married work20hrs_ever yearswk" ****Course and Admin Data est drop _all *Full Sample local i=1 foreach x of local MM_controls { eststo Tab_bal1_`i': reg `x' maxTreat stratadum1-stratadum457 if eval_course==1, r sum `x' if maxTreat==0 & e(sample) estadd scalar mean = r(mean) estadd scalar csd = r(sd) local i = `i' + 1 } * Baseline Sample local i=1 foreach x of local MM_controls { eststo Tab_bal2_`i': reg `x' maxTreat stratadum1-stratadum457 if eval_course==1 & BB_dmiss==0, r sum `x' if maxTreat==0 & e(sample) estadd scalar mean = r(mean) estadd scalar csd = r(sd) local i = `i' + 1 } * Follow-up Sample local i=1 foreach x of local MM_controls { eststo Tab_bal3_`i': reg `x' maxTreat stratadum1-stratadum457 if eval_course==1 & FF_dmiss==0, r sum `x' if maxTreat==0 & e(sample) estadd scalar mean = r(mean) estadd scalar csd = r(sd) local i = `i' + 1 } #delimit ; esttab Tab_bal1_* Tab_bal2_* Tab_bal3_* using RegTables\table2a.csv, replace legend label nonumbers drop(stratadum* _cons) b(%9.3f) se star(* 0.10 ** 0.05 *** 0.01) stats(mean csd N, fmt(%9.3f %9.3f %9.0g) labels("Control Mean DepVar" "Control SD" "N")) title("Balance and Summary Statistics") addnotes("""") ; #delimit cr ****Survey Data local BB_controls "ed_yrs prev_train hh hh_size married work20hrs_ever yearswk" est drop _all * Baseline Sample local i=1 foreach x of local BB_controls { eststo Tab_bal1_`i': reg BB_`x' maxTreat stratadum1-stratadum457 if eval_course==1 & BB_dmiss_`x'==0, r sum BB_`x' if maxTreat==0 & e(sample) estadd scalar mean = r(mean) estadd scalar csd = r(sd) local i = `i' + 1 } * Follow-up Sample local i=1 foreach x of local BB_controls { eststo Tab_bal2_`i': reg BB_`x' maxTreat stratadum1-stratadum457 if eval_course==1 & FF_dmiss==0 & BB_dmiss_`x'==0, r sum BB_`x' if maxTreat==0 & e(sample) estadd scalar mean = r(mean) estadd scalar csd = r(sd) local i = `i' + 1 } #delimit ; esttab Tab_bal1_* Tab_bal2_* using RegTables\Feb2014\table2b.csv, replace legend label nonumbers drop(stratadum* _cons) b(%9.3f) se star(* 0.10 ** 0.05 *** 0.01) stats(mean csd N, fmt(%9.3f %9.3f %9.0g) labels("Control Mean DepVar" "Control SD" "N")) title("Balance and Summary Statistics") addnotes("""") ; #delimit cr ********************** TABLE 3: Employment Impacts using Survey Data *********************** ** Standardized employment outcome (of variables in table) *** Note this is missing if employed variable is missing, but otherwise is average of whatever variables are not missing foreach var of varlist FF_work4wks1 FF_work20hrs FF_numhrswk FF_inc_mth FF_ihs_inc_mth occstatus FF_workSS FF_inc_frm { sum `var' if maxTreat==0 local thismean = r(mean) local thissd = r(sd) di "`thismean'" di "`thissd'" cap drop z1_`var' gen z1_`var' = (`var'-`thismean')/(`thissd') } egen employedindex2 = rowmean(z1_FF_work4wks1 z1_FF_work20hrs z1_FF_numhrswk z1_FF_inc_mth z1_FF_ihs_inc_mth z1_FF_workSS z1_occstatus) label var employedindex2 "Aggregate Index of Employment Outcomes" replace employedindex2=. if FF_work4wks1==. ******ITT REGS: OVERALL EMPLOYMENT & EARNINGS*** est drop _all local i = 1 foreach var of var FF_work4wks1 FF_work20hrs FF_numhrswk FF_inc_mth FF_ihs_inc_mth occstatus FF_workSS FF_inc_frm employedindex2 { eststo ITT_emp1_`i': reg `var' maxTreat stratadum1-stratadum457 if eval_course==1, robust sum `var' if maxTreat==0 & e(sample) estadd scalar mean = r(mean) estadd scalar csd = r(sd) local i = `i' + 1 } #delimit ; esttab ITT_emp1_* using RegTables\ITT_emp.csv, replace legend label drop(stratadum* _cons) b(%9.3f) se star(* 0.10 ** 0.05 *** 0.01) stats(mean csd N, fmt(%9.3f %9.3f %9.0g) labels("Control Mean DepVar" "Control Std Dev" "N")) title("ITT Impacts on Overall Employment") addnotes("""") ; #delimit cr ****** Lee bounds to account for differential attrition by treatment status ** Attrition difference is 1.4%, relative to response of 94.4% for treated, so need to trim 1.48% from treated ** this corresponds to 42 observations of treatment group * Binary variables set seed 339 cap drop random1 gen random1=uniform() drop if eval_course~=1 gen maxControl=1-maxTreat foreach var of var FF_work4wks1 FF_work20hrs FF_workSS { gen `var'_ltrim=`var' gen `var'_utrim=`var' sort maxControl `var' random1 egen group_`var'=group(maxControl `var') egen rank_`var'=rank(random1), by(group_`var') replace `var'_ltrim=. if rank_`var'<=42 & maxTreat==1 & `var'==0 replace `var'_utrim=. if rank_`var'<=42 & maxTreat==1 & `var'==1 } * Continuous variables foreach var of var FF_numhrswk FF_inc_mth FF_ihs_inc_mth occstatus FF_inc_frm { gen `var'_ltrim=`var' gen `var'_utrim=`var' sort maxControl `var' random1 egen group_`var'=group(maxControl `var') egen rank_`var'=rank(random1), by(group_`var') replace `var'_ltrim=. if rank_`var'<=42 & maxTreat==1 & `var'==0 egen upper_`var'=pctile(`var') if maxTreat==1, p(98.5) replace `var'_utrim=. if maxTreat==1 & `var'>upper_`var' } * Aggregate Index gen employedindex2_ltrim=employedindex2 gen employedindex2_utrim=employedindex2 sort maxControl employedindex2 random1 gen lowscore=employedindex2<=-0.68 egen group_employedindex2=group(maxControl employedindex2) egen rank_employedindex2=rank(random1), by(group_employedindex2) replace employedindex2_ltrim=. if maxTreat==1 & employedindex2<-0.70 replace employedindex2_ltrim=. if maxTreat==1 & employedindex2>-0.70 & employedindex2<-0.68 & rank_employedindex2<=34 egen upper_employedindex2=pctile(employedindex2) if maxTreat==1, p(98.5) replace employedindex2_utrim=. if maxTreat==1 & employedindex2>upper_employedindex2 ** ITT bounds est drop _all local i = 1 foreach var of var FF_work4wks1 FF_work20hrs FF_numhrswk FF_inc_mth FF_ihs_inc_mth occstatus FF_workSS FF_inc_frm employedindex2 { eststo ITT_emp1_`i': reg `var'_ltrim maxTreat stratadum1-stratadum457 if eval_course==1, robust local i = `i' + 1 } local i = 1 foreach var of var FF_work4wks1 FF_work20hrs FF_numhrswk FF_inc_mth FF_ihs_inc_mth occstatus FF_workSS FF_inc_frm employedindex2 { eststo ITT_emp2_`i': reg `var'_utrim maxTreat stratadum1-stratadum457 if eval_course==1, robust local i = `i' + 1 } #delimit ; capture erase ITT_emp.csv; esttab ITT_emp1_* ITT_emp2_* using RegTables\ITT_emp.csv, replace legend label drop(stratadum* _cons) b(%9.3f) se star(* 0.10 ** 0.05 *** 0.01) title("Bounds of ITT Impacts on Overall Employment") addnotes("""") ; #delimit cr *************LATE EMPLOYMENT REGS******************************************* ******LATE REGS: OVERALL EMPLOYMENT*** est drop _all local i = 1 foreach var of var FF_work4wks1 FF_work20hrs FF_numhrswk FF_inc_mth FF_ihs_inc_mth occstatus FF_workSS FF_inc_frm employedindex2 { eststo TOT_emp1_`i': ivreg2 `var' (maxCertAny_E1 = maxTreat) stratadum1-stratadum457 if eval_course==1, robust sum `var' if maxTreat==0 & e(sample) estadd scalar mean = r(mean) estadd scalar csd = r(sd) local i = `i' + 1 } #delimit ; esttab TOT_emp1_* using RegTables\TOT_emp.csv, replace depvar legend label nonumbers drop(stratadum* _cons) b(%9.3f) se star(* 0.10 ** 0.05 *** 0.01) stats(mean csd N , fmt(%9.3f %9.3f %9.0g) labels("Control Mean DepVar" "Control Std Dev" "N")) title("LATE Impacts on Employment") addnotes("""") ; #delimit cr *** late estimate on income for private providers (used in cost-benefit calculation) ivreg2 FF_inc_mth (maxCertAny_E1 = maxTreat) stratadum1-stratadum457 if eval_course==1 & privprovider==1, robust *************** TABLE 4: EMPLOYMENT OUTCOMES IN SOCIAL SECURITY DATA ****************************** est drop _all local i = 1 foreach var of var employjan12 formallyemployedAug2013 incomeAug2013 everemployed everlostjob { eststo ITT_SSC_`i': reg `var' maxTreat stratadum1-stratadum457 if eval_course==1, robust sum `var' if maxTreat==0 & e(sample) estadd scalar mean = r(mean) estadd scalar csd = r(sd) local i = `i' + 1 } #delimit ; capture erase ITT_SSC.csv; esttab ITT_SSC_* using RegTables\ITT_SSC.csv, replace legend label drop(stratadum* _cons) b(%9.3f) se star(* 0.10 ** 0.05 *** 0.01) stats(mean csd N, fmt(%9.3f %9.3f %9.0g) labels("Control Mean DepVar" "Control Std Dev" "N")) title("ITT Impacts on Social Security 2013 Employment") addnotes("""") ; #delimit cr ************* TABLE 5: INDIVIDUAL HETEROGENEITY by age/gender strata gen maxTreat_my=maxTreat*MM_my gen maxTreat_mo=maxTreat*MM_mo gen maxTreat_fy=maxTreat*MM_fy gen maxTreat_fo=maxTreat*MM_fo est drop _all local i = 1 foreach var of var FF_work4wks1 FF_work20hrs FF_numhrswk FF_inc_mth FF_ihs_inc_mth occstatus FF_workSS FF_inc_frm employedindex2 { eststo ITT_emp4_`i': reg `var' maxTreat_my maxTreat_mo maxTreat_fy maxTreat_fo stratadum1-stratadum457 if eval_course==1, robust test maxTreat_my==maxTreat_mo==maxTreat_fy==maxTreat_fo local i = `i' + 1 } #delimit ; capture erase ITT_emp.csv; esttab ITT_emp4_* using RegTables\Feb2014\ITT_emp.csv, replace legend label drop(stratadum* _cons) b(%9.3f) se star(* 0.10 ** 0.05 *** 0.01) stats(mean csd N, fmt(%9.3f %9.3f %9.0g) labels("Control Mean DepVar" "Control Std Dev" "N")) title("ITT Impacts on Overall Employment") addnotes("""") ; #delimit cr ** Lee bounds to account for differential attrition by treatment status for subgroups ** Attrition differs by subgroup, so need different trims *** young males: trim 3.1/94.6 = 3.28% of 584 treated = 19 obs *** older males: trim 3.8/95.4 = 3.98% of 511 treated = 20 obs *** young females: trim 0.1/93.7 = 0.11% of 838 treated = 1 obs *** older females: trim 0.2/94.4 = 0.21% of 1068 treated = 2 obs gen agegender=1 if MM_my==1 replace agegender=2 if MM_mo==1 replace agegender=3 if MM_fy==1 replace agegender=4 if MM_fo==1 bysort agegender: sum FF_work4wks1 FF_work20hrs FF_numhrswk FF_inc_mth FF_ihs_inc_mth occstatus FF_workSS FF_inc_frm employedindex2 if maxTreat==0 & eval_course==1 * Binary variables set seed 339 cap drop random1 gen random1=uniform() cap drop maxControl gen maxControl=1-maxTreat foreach var of var FF_work4wks1 FF_work20hrs FF_workSS { gen `var'_ltrim1=`var' gen `var'_utrim1=`var' sort maxControl `var' random1 egen group1_`var'=group(agegender maxControl `var') egen rank1_`var'=rank(random1), by(group1_`var') replace `var'_ltrim1=. if rank1_`var'<=19 & maxTreat==1 & `var'==0 & MM_my==1 replace `var'_utrim1=. if rank1_`var'<=19 & maxTreat==1 & `var'==1 & MM_my==1 replace `var'_ltrim1=. if rank1_`var'<=20 & maxTreat==1 & `var'==0 & MM_mo==1 replace `var'_utrim1=. if rank1_`var'<=20 & maxTreat==1 & `var'==1 & MM_mo==1 replace `var'_ltrim1=. if rank1_`var'<=1 & maxTreat==1 & `var'==0 & MM_fy==1 replace `var'_utrim1=. if rank1_`var'<=1 & maxTreat==1 & `var'==1 & MM_fy==1 replace `var'_ltrim1=. if rank1_`var'<=2 & maxTreat==1 & `var'==0 & MM_fo==1 replace `var'_utrim1=. if rank1_`var'<=2 & maxTreat==1 & `var'==1 & MM_fo==1 } * Continuous variables foreach var of var FF_numhrswk FF_inc_mth FF_ihs_inc_mth occstatus FF_inc_frm { gen `var'_ltrim1=`var' gen `var'_utrim1=`var' sort maxControl `var' random1 egen group1_`var'=group(agegender maxControl `var') egen rank1_`var'=rank(random1), by(group1_`var') replace `var'_ltrim1=. if rank1_`var'<=19 & maxTreat==1 & `var'==0 & MM_my==1 egen upper1_`var'_MMmy=pctile(`var') if maxTreat==1 & MM_my==1, p(96.7) replace `var'_utrim1=. if maxTreat==1 & `var'>upper1_`var'_MMmy & MM_my==1 replace `var'_ltrim1=. if rank1_`var'<=20 & maxTreat==1 & `var'==0 & MM_mo==1 egen upper1_`var'_MMmo=pctile(`var') if maxTreat==1 & MM_mo==1, p(96.0) replace `var'_utrim1=. if maxTreat==1 & `var'>upper1_`var'_MMmo & MM_mo==1 replace `var'_ltrim1=. if rank1_`var'<=1 & maxTreat==1 & `var'==0 & MM_fy==1 replace `var'_ltrim1=. if rank1_`var'<=2 & maxTreat==1 & `var'==0 & MM_fo==1 } replace FF_numhrswk_utrim1=. if maxTreat==1 & MM_fy==1 & FF_numhrswk==100 replace FF_inc_mth_utrim1=. if maxTreat==1 & MM_fy==1 & FF_inc_mth==2000 replace FF_ihs_inc_mth_utrim1=. if maxTreat==1 & MM_fy==1 & FF_inc_mth==2000 replace occstatus_utrim1=. if maxTreat==1 & MM_fy==1 & occstatus==69 & rank1_occstatus<=1 replace FF_inc_frm_utrim1=. if maxTreat==1 & MM_fy==1 & FF_inc_frm==2000 replace FF_numhrswk_utrim1=. if maxTreat==1 & MM_fo==1 & FF_numhrswk==84 replace FF_inc_mth_utrim1=. if maxTreat==1 & MM_fo==1 & FF_inc_mth==2500 & rank1_FF_inc_mth<=2 replace FF_ihs_inc_mth_utrim1=. if maxTreat==1 & MM_fo==1 & FF_inc_mth==2500 & rank1_FF_inc_mth<=2 replace occstatus_utrim1=. if maxTreat==1 & MM_fo==1 & occstatus==69 & rank1_occstatus<=1 replace FF_inc_frm_utrim1=. if maxTreat==1 & MM_fo==1 & FF_inc_mth==2500 & rank1_FF_inc_mth<=2 * Aggregate Index gen employedindex2_ltrim1=employedindex2 gen employedindex2_utrim1=employedindex2 sort agegender maxControl employedindex2 random1 cap drop lowscore gen lowscore=employedindex2<=-0.68 egen group1_employedindex2=group(agegender maxControl employedindex2) egen rank1_employedindex2=rank(random1), by(group1_employedindex2) replace employedindex2_ltrim1=. if maxTreat==1 & employedindex2<-0.70 & MM_my==1 replace employedindex2_ltrim1=. if maxTreat==1 & employedindex2>-0.70 & employedindex2<-0.68 & rank1_employedindex2<=16 & MM_my==1 egen upper1_employedindex2_MMmy=pctile(employedindex2) if maxTreat==1 & MM_my==1, p(96.7) replace employedindex2_utrim1=. if maxTreat==1 & employedindex2>upper1_employedindex2_MMmy & MM_my==1 replace employedindex2_ltrim1=. if maxTreat==1 & employedindex2<-0.70 & MM_mo==1 replace employedindex2_ltrim1=. if maxTreat==1 & employedindex2>-0.70 & employedindex2<-0.68 & rank1_employedindex2<=18 & MM_mo==1 egen upper1_employedindex2_MMmo=pctile(employedindex2) if maxTreat==1 & MM_mo==1, p(96.0) replace employedindex2_utrim1=. if maxTreat==1 & employedindex2>upper1_employedindex2_MMmo & MM_mo==1 replace employedindex2_ltrim1=. if maxTreat==1 & employedindex2<-0.70 & MM_fy==1 replace employedindex2_utrim1=. if maxTreat==1 & employedindex2>1.8 & MM_fy==1 replace employedindex2_ltrim1=. if maxTreat==1 & employedindex2>-0.70 & employedindex2<-0.68 & rank1_employedindex2<=2 & MM_fo==1 replace employedindex2_utrim1=. if maxTreat==1 & employedindex2>1.87 & MM_fo==1 ** ITT bounds est drop _all local i = 1 foreach var of var FF_work4wks1 FF_work20hrs FF_numhrswk FF_inc_mth FF_ihs_inc_mth occstatus FF_workSS FF_inc_frm employedindex2 { eststo ITT_emp1_`i': reg `var'_ltrim1 maxTreat_my maxTreat_mo maxTreat_fy maxTreat_fo stratadum1-stratadum457 if eval_course==1, robust local i = `i' + 1 } local i = 1 foreach var of var FF_work4wks1 FF_work20hrs FF_numhrswk FF_inc_mth FF_ihs_inc_mth occstatus FF_workSS FF_inc_frm employedindex2 { eststo ITT_emp2_`i': reg `var'_utrim1 maxTreat_my maxTreat_mo maxTreat_fy maxTreat_fo stratadum1-stratadum457 if eval_course==1, robust local i = `i' + 1 } #delimit ; capture erase ITT_emp.csv; esttab ITT_emp1_* ITT_emp2_* using RegTables\Feb2014\ITT_emp.csv, replace legend label drop(stratadum* _cons) b(%9.3f) se star(* 0.10 ** 0.05 *** 0.01) title("Bounds of ITT Impacts on Overall Employment by subgroup") addnotes("""") ; #delimit cr **************** TABLE 7: Impact on Well-being ************************************** ******construct variables needed*** * Asset index gen fourplusrooms=FF_C142>=4 & FF_C142~=. replace fourplusrooms=. if FF_C142==. foreach var of var FF_C128-FF_C141 { replace `var'=. if `var'==99 replace `var'=1 if `var'>1 & `var'~=. } pca FF_C128-FF_C141 fourplusrooms predict assetindex * Total household income gen hhincome=0 replace FF_C146_B=0 if FF_C146_A==2 replace FF_C146_B=. if FF_C146_B==99999|FF_C146_B==999999 replace hhincome=hhincome+FF_C146_B if FF_C146_B~=. replace FF_C147_B=0 if FF_C147_A==2 replace FF_C147_B=. if FF_C147_B==99999|FF_C147_B==999999 replace hhincome=hhincome+FF_C147_B if FF_C147_B~=. replace FF_C148_B=0 if FF_C148_A==2 replace FF_C148_B=. if FF_C148_B==99999|FF_C148_B==999999 replace hhincome=hhincome+FF_C148_B if FF_C148_B~=. replace FF_C149_B=0 if FF_C149_A==2 replace FF_C149_B=. if FF_C149_B==99999|FF_C149_B==999999 replace hhincome=hhincome+FF_C149_B if FF_C149_B~=. replace FF_C150_B=0 if FF_C150_A==2 replace FF_C150_B=. if FF_C150_B==99999|FF_C150_B==999999 replace hhincome=hhincome+FF_C150_B if FF_C150_B~=. replace FF_C151_B=0 if FF_C151_A==2 replace FF_C151_B=. if FF_C151_B==99999|FF_C151_B==999999 replace hhincome=hhincome+FF_C151_B if FF_C151_B~=. replace FF_C152_B=0 if FF_C152_A==2 replace FF_C152_B=. if FF_C152_B==99999|FF_C152_B==999999 replace hhincome=hhincome+FF_C152_B if FF_C152_B~=. replace FF_C153_B=0 if FF_C153_A==2 replace FF_C153_B=. if FF_C153_B==99999|FF_C153_B==999999 replace hhincome=hhincome+FF_C153_B if FF_C153_B~=. replace FF_C154_B=0 if FF_C154_A==2 replace FF_C154_B=. if FF_C154_B==99999|FF_C154_B==999999 replace hhincome=hhincome+FF_C154_B if FF_C154_B~=. replace FF_C155_B=0 if FF_C155_A==2 replace FF_C155_B=. if FF_C155_B==99999|FF_C155_B==999999 replace hhincome=hhincome+FF_C155_B if FF_C155_B~=. replace FF_C156_B=0 if FF_C156_A==2 replace FF_C156_B=. if FF_C156_B==99999|FF_C156_B==999999 replace hhincome=hhincome+FF_C156_B if FF_C156_B~=. replace FF_C157_B=0 if FF_C157_A==2 replace FF_C157_B=. if FF_C157_B==99999|FF_C157_B==999999 replace hhincome=hhincome+FF_C157_B if FF_C157_B~=. * doesn't appear people are counting own wages, so add these replace hhincome=hhincome + 12*FF_inc_mth replace hhincome=. if FF_C146_A==. * top code at 99th percentile of control group distribution sum hhincome if maxTreat==0 & eval_course==1, de replace hhincome=74000 if hhincome>74000 & hhincome~=. *** IHS of household income gen ihs_hhincome=log(hhincome + (hhincome^2+1)^(1/2)) if hhincome~=. est drop _all local i = 1 foreach var of var FF_jobexpect2yr FF_mhealth FF_subjwellbeing FF_subjwellbeingin5 hhincome ihs_hhincome assetindex { eststo ITT_wb_`i': reg `var' maxTreat stratadum1-stratadum457 if eval_course==1, robust sum `var' if maxTreat==0 & e(sample) estadd scalar mean = r(mean) estadd scalar csd = r(sd) local i = `i' + 1 } #delimit ; capture erase RegTables\ITT_wellbeing.csv; esttab ITT_wb_* using RegTables\ITT_wellbeing.csv, replace legend label drop(stratadum* _cons) b(%9.3f) se star(* 0.10 ** 0.05 *** 0.01) stats(mean csd N, fmt(%9.3f %9.3f %9.0g) labels("Control Mean DepVar" "Control Std Dev" "N")) title("ITT Impacts on Well-being") addnotes("""") ; #delimit cr ************ Impact on social outcomes - listed in pre-analysis plan, and as available upon request in paper *********** gen hhheadorspouse=FF_C159==1 replace hhheadorspouse=. if FF_C159>2 * decision making gen decision1=FF_C111==1 gen decision2=FF_C112==1 gen decision3=FF_C113==1 gen decision4=FF_C115==1 gen decision5=FF_C116==1 gen decision6=FF_C118==1 gen decision7=FF_C119==1 egen numdecisions=rsum(decision1-decision7) replace numdecisions=. if FF_C111>7 * pro-gender-equality beliefs gen pg1=FF_C120==4 gen pg2=FF_C121==1 gen pg3=FF_C122<=2 gen pg4=FF_C123==1 gen pg5=FF_C124<=2 gen progender=pg1+pg2+pg3+pg4+pg5 replace progender=. if FF_C120>5 est drop _all local i = 1 foreach var of var hhheadorspouse numdecisions progender { eststo ITT_wb_`i': reg `var' maxTreat stratadum1-stratadum457 if eval_course==1, robust sum `var' if maxTreat==0 & e(sample) estadd scalar mean = r(mean) estadd scalar csd = r(sd) local i = `i' + 1 } #delimit ; capture erase RegTables\Feb2014\ITT_social.csv; esttab ITT_wb_* using RegTables\Feb2014\ITT_social.csv, replace legend label drop(stratadum* _cons) b(%9.3f) se star(* 0.10 ** 0.05 *** 0.01) stats(mean csd N, fmt(%9.3f %9.3f %9.0g) labels("Control Mean DepVar" "Control Std Dev" "N")) title("ITT Impacts on social outcomes") addnotes("""") ; #delimit cr ***************** TABLE 8: are these results different from what people expected ********************* * expected levels sum BB_C108 if eval_course==1 & maxTreat==1, de bysort agegender: sum BB_C108 if eval_course==1 & maxTreat==1, de ** actual control employment levels sum FF_work20hrs if eval_course==1 & maxTreat==0 bysort agegender: sum FF_work20hrs if eval_course==1 & maxTreat==0 * expected changes gen expectedimpact=BB_C109-BB_C108 sum expectedimpact if eval_course==1 & maxTreat==1, de bysort agegender: sum expectedimpact if eval_course==1 & maxTreat==1, de /* * expected change of ISKUR policymakers use ExpectationsData.dta, clear sum q8per tab q3 */ * LATE estimates for comparison bysort agegender: ivreg2 FF_work20hrs (maxCertAny_E1 = maxTreat ) stratadum1-stratadum457 if eval_course==1, robust ****** Table 9: Which course characteristics are associated with better impacts? ******************* ****** Pre-specified causal chain of influence *************** ******* Hypothesis B1: are impacts lower for courses with low attendance or completion rates? eststo clear foreach var of var proportionattend proportioncomplete { cap drop maxTreat_`var' gen maxTreat_`var'=maxTreat*`var' reg FF_work20hrs maxTreat maxTreat_`var' `var' stratadum1-stratadum457 if eval_course==1, robust cluster(ECcode) est sto tableB1bDM_`i' reg employedindex2 maxTreat maxTreat_`var' `var' stratadum1-stratadum457 if eval_course==1, robust cluster(ECcode) est sto tableB1cDM_`i' reg employjan12 maxTreat maxTreat_`var' `var' stratadum1-stratadum457 if eval_course==1, robust cluster(ECcode) est sto tableB1dDM_`i' reg formallyemployedAug2013 maxTreat maxTreat_`var' `var' stratadum1-stratadum457 if eval_course==1, robust cluster(ECcode) est sto tableB1eDM_`i' local i = `i' + 1 } capture erase RegTables\tableB1.csv #delimit ; esttab tableB1bDM_* tableB1cDM_* tableB1dDM_* tableB1eDM_* using RegTables\tableB1.csv, replace depvar legend label drop(stratadum*) noconstant cells(b(star fmt(%9.3f)) se(par)) star(* 0.10 ** 0.05 *** 0.01) stats(r2 N, fmt(%9.3f %9.0g) labels("R-squared" "N")) title("Heterogeneity of Impacts on Employment Outcomes by Attendance/Completion") addnotes("""") ; #delimit cr sum proportionattend proportioncomplete if maxTreat==0 & eval_course==1 *** Hypothesis B2: Measures of Course Quality *** Course has 2+ competitors gen competitors=CP_c41>=3 replace competitors=. if CP_c41==. gen mcomp=competitors if coursetaken==1 egen twopluscomp=max(mcomp), by(ID_NO) label var twopluscomp "Course has two or more competitors" *** Average experience of teachers greater than one year gen avexp=CP_c61>12 replace avexp=. if CP_c61==. gen mavexp=avexp if coursetaken==1 egen highexperience=max(mavexp), by(ID_NO) label var highexperience "Teachers average more than 1 year experience" *** Percentage of course teachers who have university education gen educstaff=CP_c57*100/(CP_c55+CP_c56) replace educstaff=100 if educstaff>100 & educstaff~=. gen meducstaff=educstaff if coursetaken==1 egen educteachers=max(meducstaff), by(ID_NO) label var educteachers "Percent of course teachers with tertiary education" * Number of hours in course above median gen longcourse=MIS_EC10>320 gen lcourse=longcourse if coursetaken==1 replace lcourse=. if MIS_EC10==. & coursetaken==1 egen lengthycourse=max(lcourse), by(ID_NO) est drop _all foreach var of var lengthycourse highexperience educteachers twopluscomp privprovider { cap drop maxTreat_`var' gen maxTreat_`var'=maxTreat*`var' reg FF_work20hrs maxTreat maxTreat_`var' `var' stratadum1-stratadum457 if eval_course==1, robust cluster(ECcode) est sto tableB1b_DM_`i' reg employedindex2 maxTreat maxTreat_`var' `var' stratadum1-stratadum457 if eval_course==1, robust cluster(ECcode) est sto tableB1c_DM_`i' reg employjan12 maxTreat maxTreat_`var' `var' stratadum1-stratadum457 if eval_course==1, robust cluster(ECcode) est sto tableB1d_DM_`i' reg formallyemployedAug2013 maxTreat maxTreat_`var' `var' stratadum1-stratadum457 if eval_course==1, robust cluster(ECcode) est sto tableB1e_DM_`i' local i = `i' + 1 } capture erase RegTables\tableB2dm.csv #delimit ; esttab tableB1b_DM_* tableB1c_DM_* tableB1d_DM_* tableB1e_DM_* using RegTables\tableB2dm.csv, replace depvar legend label drop(stratadum*) noconstant cells(b(star fmt(%9.3f)) se(par)) star(* 0.10 ** 0.05 *** 0.01) stats(r2 N, fmt(%9.3f %9.0g) labels("R-squared" "N")) title("Heterogeneity of Impacts on Employment Outcomes") addnotes("""") ; #delimit cr sum lengthycourse highexperience educteachers twopluscomp privprovider if eval_course==1 & maxTreat==0 ****** Hypothesis B3: Heterogeneity with respect to mechanism participants think is operating eststo clear foreach var of var newskills certifyskills jobfindskills employermatchskills { cap drop maxTreat_`var' gen maxTreat_`var'=maxTreat*`var' reg FF_work20hrs maxTreat maxTreat_`var' `var' stratadum1-stratadum457 if eval_course==1, robust cluster(ECcode) est sto tableB3bDM_`i' reg employedindex2 maxTreat maxTreat_`var' `var' stratadum1-stratadum457 if eval_course==1, robust cluster(ECcode) est sto tableB3cDM_`i' reg employjan12 maxTreat maxTreat_`var' `var' stratadum1-stratadum457 if eval_course==1, robust cluster(ECcode) est sto tableB3dDM_`i' reg formallyemployedAug2013 maxTreat maxTreat_`var' `var' stratadum1-stratadum457 if eval_course==1, robust cluster(ECcode) est sto tableB3eDM_`i' local i = `i' + 1 } capture erase RegTables\Feb2014\tableB3.csv #delimit ; esttab tableB3bDM_* tableB3cDM_* tableB3dDM_* tableB3eDM_* using RegTables\Feb2014\tableB3.csv, replace depvar legend label drop(stratadum*) noconstant cells(b(star fmt(%9.3f)) se(par)) star(* 0.10 ** 0.05 *** 0.01) stats(r2 N, fmt(%9.3f %9.0g) labels("R-squared" "N")) title("Heterogeneity of Impacts on Employment Outcomes by Mechanism") addnotes("""") ; #delimit cr sum newskills certifyskills jobfindskills employermatchskills if eval_course==1 & maxTreat==0 *** B4: Provincial unemployment above or below median gen highue=unemp11_quart3==1|unemp11_quart4==1 est drop _all foreach var of var highue { cap drop maxTreat_`var' gen maxTreat_`var'=maxTreat*`var' reg FF_work20hrs maxTreat maxTreat_`var' `var' stratadum1-stratadum457 if eval_course==1, robust cluster(ECcode) est sto tableB1b_DM_`i' reg employedindex2 maxTreat maxTreat_`var' `var' stratadum1-stratadum457 if eval_course==1, robust cluster(ECcode) est sto tableB1c_DM_`i' reg employjan12 maxTreat maxTreat_`var' `var' stratadum1-stratadum457 if eval_course==1, robust cluster(ECcode) est sto tableB1d_DM_`i' reg formallyemployedAug2013 maxTreat maxTreat_`var' `var' stratadum1-stratadum457 if eval_course==1, robust cluster(ECcode) est sto tableB1e_DM_`i' local i = `i' + 1 } capture erase RegTables\tableB2dm.csv #delimit ; esttab tableB1b_DM_* tableB1c_DM_* tableB1d_DM_* tableB1e_DM_* using RegTables\Feb2014\tableB2dm.csv, replace depvar legend label drop(stratadum*) noconstant cells(b(star fmt(%9.3f)) se(par)) star(* 0.10 ** 0.05 *** 0.01) stats(r2 N, fmt(%9.3f %9.0g) labels("R-squared" "N")) title("Heterogeneity of Impacts on Employment Outcomes") addnotes("""") ; #delimit cr sum highue if eval_course==1 & maxTreat==0 ********** APPENDIX 1: COMPARING PRIVATE AND PUBLIC *************** keep if eval_course==1 keep if privprovider~=. #delimit ; collapse (mean) MIS_course_days MIS_course_hrs dAccounting dProfessional dCraftsman dTechnical dService dIstanbul highexperience educteachers MM_female MM_age MM_geq_hs BB_ed_yrs BB_prev_train BB_hh BB_hh_size BB_married BB_work20hrs_ever BB_yearswk raven totallit tenacity, by(privprovider); * Comparison check matrix R=[1,1,1,1,1,1] matrix colnames R="mean Control" "mean Treat" "sd Control" "sd Treat" "N tot" "p value" #delimit ; quietly foreach var in MIS_course_days MIS_course_hrs dAccounting dProfessional dCraftsman dTechnical dService dIstanbul highexperience educteachers MM_female MM_age MM_geq_hs BB_ed_yrs BB_prev_train BB_hh BB_hh_size BB_married BB_work20hrs_ever BB_yearswk raven totallit tenacity {; ttest `var' if eval_course==1,by(privprovider); matrix A=[r(mu_1),r(mu_2),r(sd_1) ,r(sd_2),r(N_1)+r(N_2) ,r(p)]; matrix rownames A=`var'; matrix list A; matrix R=R\A; matrix list R; }; set linesize 200; matrix list R; ********* TABLE 9: What is it about Private courses? ******************* keep if eval_course==1 *** Matching private provider #delimit ; foreach var in MIS_course_days MIS_course_hrs dAccounting dProfessional dCraftsman dTechnical dService dIstanbul highexperience educteachers MM_female MM_age MM_geq_hs BB_ed_yrs BB_prev_train BB_hh BB_hh_size BB_married BB_work20hrs_ever BB_yearswk raven totallit tenacity {; gen missing_`var'=`var'==.; replace `var'=0 if `var'==.; }; #delimit ; pscore privprovider MIS_course_days MIS_course_hrs dAccounting dProfessional dCraftsman dTechnical dService dIstanbul highexperience educteachers MM_female MM_age MM_geq_hs BB_ed_yrs BB_prev_train BB_hh BB_hh_size BB_married BB_work20hrs_ever BB_yearswk raven totallit tenacity missing_highexperience missing_raven missing_totallit missing_tenacity TS_n2_unemp_nonag2011 TS_n2_emp_ag2011 TS_n2_emp_ind2011 TS_n2_emp_serv2011 TS_n2_lfp_female2011 TS_n2_lfp_male2011 , pscore(pscore1) comsup; #delimit cr gen commonsupport1=comsup==1 *** Propensity-Score Reweighted Specification * now generate weights gen weight=1 if privprovider==1 replace weight=pscore1/(1-pscore1) if privprovider==0 replace weight=. if commonsupport1==0 est drop _all foreach var of var privprovider { cap drop maxTreat_`var' gen maxTreat_`var'=maxTreat*`var' reg FF_work20hrs maxTreat maxTreat_`var' `var' stratadum1-stratadum457 if eval_course==1 [aw=weight], robust cluster(ECcode) est sto table9b_DM_`i' reg employedindex2 maxTreat maxTreat_`var' `var' stratadum1-stratadum457 if eval_course==1 [aw=weight], robust cluster(ECcode) est sto table9c_DM_`i' reg employjan12 maxTreat maxTreat_`var' `var' stratadum1-stratadum457 if eval_course==1 [aw=weight], robust cluster(ECcode) est sto table9d_DM_`i' reg formallyemployedAug2013 maxTreat maxTreat_`var' `var' stratadum1-stratadum457 if eval_course==1 [aw=weight], robust cluster(ECcode) est sto table9e_DM_`i' local i = `i' + 1 } capture erase RegTables\Feb2014\table9dm.csv #delimit ; esttab table9b_DM_* table9c_DM_* table9d_DM_* table9e_DM_* using RegTables\Feb2014\table9dm.csv, replace depvar legend label drop(stratadum*) noconstant cells(b(star fmt(%9.3f)) se(par)) star(* 0.10 ** 0.05 *** 0.01) stats(r2 N, fmt(%9.3f %9.0g) labels("R-squared" "N")) title("Propensity Score Reweighted Interactions") addnotes("""") ; #delimit cr *** Controlling for Interaction of treatment with the propensity score gen maxTreat_pscore1 = maxTreat*pscore1 est drop _all foreach var of var privprovider { cap drop maxTreat_`var' gen maxTreat_`var'=maxTreat*`var' reg FF_work20hrs maxTreat maxTreat_`var' `var' maxTreat_pscore1 pscore1 stratadum1-stratadum457 if eval_course==1, robust cluster(ECcode) est sto table9b_DM_`i' reg employedindex2 maxTreat maxTreat_`var' `var' maxTreat_pscore1 pscore1 stratadum1-stratadum457 if eval_course==1, robust cluster(ECcode) est sto table9c_DM_`i' reg employjan12 maxTreat maxTreat_`var' `var' maxTreat_pscore1 pscore1 stratadum1-stratadum457 if eval_course==1, robust cluster(ECcode) est sto table9d_DM_`i' reg formallyemployedAug2013 maxTreat maxTreat_`var' `var' maxTreat_pscore1 pscore1 stratadum1-stratadum457 if eval_course==1, robust cluster(ECcode) est sto table9e_DM_`i' local i = `i' + 1 } capture erase RegTables\Feb2014\table9dm1.csv #delimit ; esttab table9b_DM_* table9c_DM_* table9d_DM_* table9e_DM_* using RegTables\Feb2014\table9dm1.csv, replace depvar legend label drop(stratadum*) noconstant cells(b(star fmt(%9.3f)) se(par)) star(* 0.10 ** 0.05 *** 0.01) stats(r2 N, fmt(%9.3f %9.0g) labels("R-squared" "N")) title("Propensity Score Reweighted Interactions") addnotes("""") ; #delimit cr *************************************************** **** Pre-analysis plan - Hypothesis C - treatment heterogeneity with respect to individual *** note these are constructed in the file ISKUR_IDC_REG_July23_vDM.do #delimit ; gen computercourse=MM_coursen=="Technician,Design applications"|MM_coursen=="Staff,Computer Information management"|MM_coursen=="Programmer,Microcontroller"| MM_coursen=="Programmer, web"|MM_coursen=="Programmer, computer"|MM_coursen=="Operator, computer (CAD softwares)"|MM_coursen=="Operator, computer"| MM_coursen=="Mechanic, electronics/computer-course"|MM_coursen=="Mechanic, electronics/computer"|MM_coursen=="Designer, web"| MM_coursen=="Designer, computer-aided"|MM_coursen=="Computer Manager"|MM_coursen=="IT support Specialist"| MM_coursen=="Technician, computer technology and programming"; #delimit cr replace computercourse=. if MM_coursen=="" gen mcomputer=computercourse if coursetaken==1 egen computecourse=max(mcomputer), by(ID_NO) *************** Table 6 -heterogeneity with respect to these characteristics ****************** eststo clear foreach var of var expectedbenefit posths prevcourse childunder6 empoweredtowork raven numerate workcentral tenacity longterm { cap drop maxTreat_`var' gen maxTreat_`var'=maxTreat*`var' reg FF_work20hrs maxTreat maxTreat_`var' `var' stratadum1-stratadum457 if eval_course==1, robust est sto tableC1bDM_`i' reg employedindex2 maxTreat maxTreat_`var' `var' stratadum1-stratadum457 if eval_course==1, robust est sto tableC1cDM_`i' reg employjan12 maxTreat maxTreat_`var' `var' stratadum1-stratadum457 if eval_course==1, robust est sto tableC1dDM_`i' reg formallyemployedAug2013 maxTreat maxTreat_`var' `var' stratadum1-stratadum457 if eval_course==1, robust est sto tableC1eDM_`i' local i = `i' + 1 } capture erase RegTables\Feb2014\tableC.csv #delimit ; esttab tableC1bDM_* tableC1cDM_* tableC1dDM_* tableC1eDM_* using RegTables\Feb2014\tableC.csv, replace depvar legend label drop(stratadum*) noconstant cells(b(star fmt(%9.3f)) se(par)) star(* 0.10 ** 0.05 *** 0.01) stats(r2 N, fmt(%9.3f %9.0g) labels("R-squared" "N")) title("Heterogeneity of Impacts on Employment Outcomes by Individual Characteristics") addnotes("""") ; #delimit cr sum expectedbenefit posths prevcourse childunder6 empoweredtowork raven numerate workcentral tenacity longterm if maxTreat==0 & eval_course==1 eststo clear gen maxTreat_dAccounting=maxTreat*dAccounting gen maxTreat_computer=maxTreat*computercourse reg FF_work20hrs maxTreat maxTreat_dAccount maxTreat_computer dAccounting computer stratadum1-stratadum457 if eval_course==1, robust cluster(ECcode) est sto tableC1 reg employedindex2 maxTreat maxTreat_dAccount maxTreat_computer dAccounting computer stratadum1-stratadum457 if eval_course==1, robust cluster(ECcode) est sto tableC2 reg employjan12 maxTreat maxTreat_dAccount maxTreat_computer dAccounting computer stratadum1-stratadum457 if eval_course==1, robust cluster(ECcode) est sto tableC3 reg formallyemployedAug2013 maxTreat maxTreat_dAccount maxTreat_computer dAccounting computer stratadum1-stratadum457 if eval_course==1, robust cluster(ECcode) est sto tableC4 capture erase RegTables\Feb2014\tableCn.csv #delimit ; esttab tableC1 tableC2 tableC3 tableC4 using RegTables\Feb2014\tableCn.csv, replace depvar legend label drop(stratadum*) noconstant cells(b(star fmt(%9.3f)) se(par)) star(* 0.10 ** 0.05 *** 0.01) stats(r2 N, fmt(%9.3f %9.0g) labels("R-squared" "N")) title("Heterogeneity of Impacts on Employment Outcomes by Type of Course") addnotes("""") ; #delimit cr sum dAccounting computercourse if maxTreat==0 & eval_course==1 ****checks on education and training ***Non-ISKUR training between September 2010 and time of follow-up survey gen FF_nISKUR = (FF_C61==1 & FF_C80!=3 & FF_C82!=3) if FF_dInterview==1 & FF_C82!=98 & FF_C82!=99 gen FF_nISKUR_selffin = (FF_nISKUR==1 & FF_C80==1) if FF_dInterview==1 & FF_C80!=98 & FF_C80!=99 ***In education or training at the time of the follow-up survey gen FF_ednow = (FF_C9==6) if FF_dInterview==1 & FF_C9!=98 & FF_C9!=99 reg FF_ednow maxTreat stratadum1-stratadum457 if eval_course==1, r