*** Replication Do File for *** Bruhn, Miriam Gabriel Lara Ibarra and David McKenzie. 2014. *** “The Minimal Impact of a Large-Scale Financial Education Program in Mexico City.” *** Journal of Development Economics, 108: 184-89. *** July 15, 2014 clear all cap log close set mem 200m set more off cd "C:\Users\wb317778\Documents\Research - Current\Financial Literacy Mexico\Paper" use baseline_randomization_and_attendance * --------------------------------- * * Appendix Table A3 (baseline data) * * --------------------------------- * destring age, replace force gen employee=1 if occupation==1 | occupation==5 replace employee=0 if occupation==0 | occupation==2 | occupation==3 | occupation==4 | occupation==6 | occupation==7 | occupation==8 gen paid_late=1 if ccard==1 replace paid_late=0 if ccard==2 gen income_6500=0 if income==1 | income==2 replace income_6500=1 if income==3 | income==4 | income==5 gen expend_6500=0 if expend==1 | expend==2 replace expend_6500=1 if expend==3 | expend==4 | expend==5 **Full sample sum branch client_partner deposit has_card paid_more bachelors female age employee paid_late income_6500 expend_6500 if treatment==0 & client_partner~=99 foreach var in branch client_partner deposit has_card paid_more bachelors female{ xi: reg `var' treatment if client_partner~=99,r } foreach var in age employee paid_late income_6500 expend_6500{ xi: reg `var' treatment i.strata if client_partner~=99,r } **Sample interviewed at follow-up gen q1=lower(folio) sort q1 merge q1 using followup_survey sum branch client_partner deposit has_card paid_more bachelors female age employee paid_late income_6500 expend_6500 if treatment==0 & client_partner~=99 & _m==3 foreach var in branch client_partner deposit has_card paid_more bachelors female{ xi: reg `var' treatment if client_partner~=99 & _m==3,r } foreach var in age employee paid_late income_6500 expend_6500{ xi: reg `var' treatment i.strata if client_partner~=99 & _m==3,r } **Sample found in admin data sum branch client_partner deposit has_card paid_more bachelors female age employee paid_late income_6500 expend_6500 if treatment==0 & client_partner~=99 & encontrado==1 foreach var in branch client_partner deposit has_card paid_more bachelors female{ xi: reg `var' treatment if client_partner~=99 & encontrado==1,r } foreach var in age employee paid_late income_6500 expend_6500{ xi: reg `var' treatment i.strata if client_partner~=99 & encontrado==1,r } * ------------------------- * * Table 1 (attendance data) * * ------------------------- * *Table 1, column 1 replace attended_post=0 if treatment==0 xi: reg attended_post treatment i.strata, r *Table 1, column 2 foreach var in usd_72_now usd_36_now usd_36_later transport testimonials{ gen `var'=0 } replace usd_72_now=1 if incentives_group=="100 now" replace usd_36_now=1 if incentives_group=="50 now" replace usd_36_later=1 if incentives_group=="50 later" replace transport=1 if incentives_group=="Transportation" replace testimonials=1 if incentives_group=="Testimonials" egen strata_analysis=group(branch client_partner income_group) xi: reg attended_post usd_72_now usd_36_now usd_36_later transport testimonials i.strata_analysis, r test usd_72_now=usd_36_now test usd_36_now=usd_36_later *Table 1, column 3 xi: reg attended_post usd_72_now usd_36_now usd_36_later transport testimonials i.strata_analysis if status~=4, r test usd_72_now=usd_36_now test usd_36_now=usd_36_later * ------------------------------------------------------------ * * Table 2 and Appendix Tables A4 - A12 (follow-up survey data) * * ------------------------------------------------------------ * drop if _m==1 drop _m **Interview date egen date1=ends(date_interview), punct(/) tail egen interview_month=ends(date1), punct(/) head destring interview_month, replace * --------- * * Knowledge * * --------- * *Code these as dummies=1 if correct answer was given **Knows what an UDI is gen know_udi=1 if q8==2 replace know_udi=0 if q8==1 | q8==3 | q8==88 label var know_udi "Knows what an UDI is" **Knows bank savings are government insured up to 400,000 UDIs gen know_fdic=1 if q9==2 replace know_fdic=0 if q9==1 | q9==3 | q9==88 label var know_fdic "Knows bank savings are government insured up to 400,000 UDIs" **Knows what a credit report is gen know_cr=1 if q22==1 replace know_cr=0 if q22==2 | q22==3 | q22==88 label var know_cr "Knows what a credit report is" **Knows credit card cycle is 30 days gen know_closedate=1 if q27==3 replace know_closedate=0 if q27==1 | q27==2 | q27==4 | q27==88 replace know_closedate=1 if q271=="30" label var know_closedate "Knows credit card cycle is 30 days" **Knows they have 20 days to pay credit card w/o interest gen know_paydate=1 if q28==2 replace know_paydate=0 if q28==1 | q28==3 | q28==4 | q28==88 label var know_paydate "Knows they have 20 days to pay credit card w/o interest" **Knows that CAT is Costo Anual Total gen know_cat=1 if q29==1 replace know_cat=0 if q29==2 | q29==3 | q29==88 label var know_cat "Knows that CAT is Costo Anual Total" **Knows what AFORE is gen know_afore=1 if q49==1 replace know_afore=0 if q49==2 | q49==3 | q49==88 label var know_afore "Knows what an AFORE is" **Knows retirement age is 65 gen know_retire=1 if q50==2 replace know_retire=0 if q50==1 | q50==3 | q50==88 replace know_retire=1 if q501=="65" label var know_retire "Knows retirement age is 65" egen knowledge=rmean(know_udi know_fdic know_cr know_closedate know_paydate know_cat know_afore know_retire) label var knowledge "Knowledge index - mean of components" **Self-assessed financial literacy gen self_lit =1 if q64==1 | q64==2 | q64==3 replace self_lit=0 if q64==4 | q64==5 label var self_lit "Says their financial knowledge is satisfactory or higher" sum knowledge know_udi know_fdic know_cr know_closedate know_paydate know_cat know_afore know_retire self_lit if treatment==0 foreach var in knowledge know_udi know_fdic know_cr know_closedate know_paydate know_cat know_afore know_retire self_lit{ xi: reg `var' treatment i.strata i.interview_month,r xi: ivreg `var' (attended_post=treatment) i.strata i.interview_month,r } * ---------------- * * Savings behavior * * ---------------- * **Checks bank transactions regularly gen checks_transactions=1 if q5==1 replace checks_transactions=0 if q5==2 | q5==3 label var checks_transactions "Checks bank transactions regularly" **Keeps track of expenses gen tracks_expenses=1 if q6==1 replace tracks_expenses=0 if q6==2 label var tracks_expenses "Keeps track of expenses" **Makes a budget gen makes_budget=1 if q7==1 replace makes_budget=0 if q7==2 label var makes_budget "Makes a budget" **Has a savings goal gen has_goal=1 if q10==1 replace has_goal=0 if q10==2 label var has_goal "Has a savings goal" **Cut expenses in past 3 months gen cut_expenses=1 if q11==1 | q11==2 | q11==3 | q11==4 | q11==5 | q11==7 replace cut_expenses=0 if q11==6 label var cut_expenses "Cut expenses in past 3 months" egen savings_behavior=rmean(checks_transactions tracks_expenses makes_budget has_goal cut_expenses) label var savings_behavior "Savings behavior index - mean of components" sum savings_behavior checks_transactions tracks_expenses makes_budget has_goal cut_expenses if treatment==0 foreach var in savings_behavior checks_transactions tracks_expenses makes_budget has_goal cut_expenses{ xi: reg `var' treatment i.strata i.interview_month,r xi: ivreg `var' (attended_post=treatment) i.strata i.interview_month,r } * ---------------- * * Savings outcomes * * ---------------- * **Has bank savings account gen savings_account=1 if q14==1 replace savings_account=0 if q14==2 label var savings_account "Has bank savings account" **Participates in caja de ahorro gen caja=1 if q16==1 replace caja=0 if q16==2 label var caja "Participates in caja de ahorro" **Participated in tanda during past 6 months gen tanda=1 if q18==1 replace tanda=0 if q18==2 label var tanda "Participated in tanda during past 6 months" **Has other type of savings (except for retirement) gen other_savings=1 if q19==1 replace other_savings=0 if q19==2 label var other_savings "Has other type of savings (except for retirement)" **Has any type of savings egen any_savings=rsum(savings_account caja tanda other_savings) replace any_savings=1 if any_savings>0 & any_savings~=. label var any_savings "Has any type of savings - based on previous questions" **Percent of income saved during past 6 months gen savings_rate=q201 if q20==1 destring savings_rate, force replace replace savings_rate=. if savings_rate==777 label var savings_rate "Percent of income saved during past 6 months" **Saved more than zero during past 6 months gen saved=1 if savings_rate>0 & savings_rate~=. replace saved=0 if savings_rate==0 label var saved "Saved more than zero during past 6 months" **Saves more each month than a year ago gen saves_more=1 if q21==1 replace saves_more=0 if q21==2 | q21==3 label var saves_more "Saves more each month than a year ago" egen savings_outcomes=rmean(any_savings saved saves_more) label var savings_outcomes "Savings outcomes index - mean of components" sum savings_outcomes any_savings saved saves_more if treatment==0 gen got_money=0 replace got_money=1 if attended==0 & attended_post==1 & incentives_group=="100 now" | attended==0 & attended_post==1 & incentives_group=="50 now" | attended==0 & attended_post==1 & incentives_group=="50 later" foreach var in savings_outcomes any_savings saved saves_more{ xi: reg `var' treatment i.strata i.interview_month,r xi: ivreg `var' (attended_post=treatment) i.strata i.interview_month,r xi: reg `var' treatment got_money i.strata i.interview_month,r xi: ivreg `var' (attended_post=treatment) got_money i.strata i.interview_month,r } * ----------------------------- * * Pension outcomes and behavior * * ----------------------------- * ** Affiliated to an AFORE gen affiliated=1 if q51==1 | q51==2 | q51==5 replace affiliated=0 if q51==3 label var affiliated "Affiliated to AFORE" ** Chose AFORE for fees, returns ("good behavior") tab q524, nol gen aforec_fr=1 if q524==1 | q526==1 replace aforec_fr=0 if q524==2 & q526==2 | q51==3 replace aforec_fr=. if q51==99 | q51==4 label var aforec_fr "Afore choice by fees/returns" replace aforec_fr=1 if q52111=="comision baja" replace aforec_fr=1 if q52111=="estaba en bancomer y se cambio a siglo 21 porque le daba mayores rendimientos" replace aforec_fr=1 if q52111=="porque me ofrecian un poco mas de rendimiento" ** Checked AFORE statement in last 6 months ("good behavior") gen check_aforestat=1 if q54==1 replace check_aforestat=0 if q54==2 | q51==3 replace check_aforestat=. if q51==99 | q51==4 label var check_aforestat "Checked AFORE statement" * Has calculated how much money will need upon retirement ("good behavior") gen calc_moneyret=1 if q57==1 replace calc_moneyret=0 if q57==2 | q51==3 label var calc_moneyret "Has ever calculated $ needed for retirement" egen pension_behavior=rmean(aforec_fr check_aforestat calc_moneyret) label var pension_behavior "Pension behavior index - mean of components" * Has plan to save for retirement ("good behavior") gen plan_retire=1 if q58==1 replace plan_retire=0 if q58==2 | q51==3 label var plan_retire "Has plan to save for retirement" sum affiliated pension_behavior aforec_fr check_aforestat calc_moneyret plan_retire if treatment==0 foreach var in affiliated pension_behavior aforec_fr check_aforestat calc_moneyret plan_retire{ xi: reg `var' treatment i.strata i.interview_month,r xi: ivreg `var' (attended_post=treatment) i.strata i.interview_month,r } * -------------------- * * Credit card behavior * * -------------------- * **Has credit card gen credit_card=1 if q31==1 replace credit_card=0 if q31==2 label var credit_card "Has credit card" **Knows credit card limit gen card_limit=1 if q33==1 & q31==1 replace card_limit=0 if q33==2 & q31==1 | q33==88 & q31==1 | q31==2 label var card_limit "Knows credit card limit" **Knows credit card interest rate gen card_rate=1 if q34==1 & q31==1 replace card_rate=0 if q34==2 & q31==1 | q34==88 & q31==1 | q31==2 label var card_rate "Knows credit card interest rate" **Checks credit card statement every month gen card_statement=1 if q35==1 & q31==1 replace card_statement=0 if q35==2 & q31==1 | q31==2 label var card_statement "Checks credit card statement every month" **Paid credit card in full (% of past 6 months) gen paid_full=q371/6 if q31==1 replace paid_full=. if paid_full>1 replace paid_full=0 if q31==2 label var paid_full "Paid credit card in full (% of past 6 months" **Made only the minimum payment (% of past 6 months) gen paid_min=q372/6 if q31==1 replace paid_min=. if paid_min>1 replace paid_min=0 if q31==2 label var paid_min "Made only the minimum payment (% of past 6 months)" **Got cash through credit card (% of past 6 months) gen got_cash=q373/6 if q31==1 replace got_cash=. if got_cash>1 replace got_cash=0 if q31==2 label var got_cash "Got cash through credit card (% of past 6 months)" foreach var in card_limit card_rate card_statement paid_full paid_min got_cash{ egen `var'm=mean(`var') if treatment==0 egen `var'sd=sd(`var') if treatment==0 sort treatment `var'm replace `var'm=`var'm[_n-1] if `var'm==. replace `var'sd=`var'sd[_n-1] if `var'sd==. gen `var'z=(`var'-`var'm)/`var'sd drop `var'm `var'sd } replace paid_minz=-paid_minz replace got_cashz=-got_cashz egen credit_card_behavior=rmean(card_limitz card_ratez card_statementz paid_fullz paid_minz got_cashz) label var credit_card_behavior "Credit card behavior index - mean of z-scores" sum credit_card credit_card_behavior card_limit card_rate card_statement paid_full paid_min got_cash if treatment==0 foreach var in credit_card credit_card_behavior card_limit card_rate card_statement paid_full paid_min got_cash{ xi: reg `var' treatment i.strata i.interview_month,r xi: ivreg `var' (attended_post=treatment) i.strata i.interview_month,r } * -------------------- * * Credit card outcomes * * -------------------- * **Was charged credit card late payment fees (% of past 6 months) gen late_fees=q374/6 if q31==1 replace late_fees=. if late_fees>1 replace late_fees=0 if q31==2 label var late_fees "Was charged credit card late payment fees (% of past 6 months)" **Was charged credit card overdraft fees (% of past 6 months) gen overdraft_fees=q375/6 if q31==1 replace overdraft_fees=. if overdraft_fees>1 replace overdraft_fees=0 if q31==2 label var overdraft_fees "Was charged credit card overdraft fees (% of past 6 months)" **Issuer blocked credit card account during past 6 months gen card_blocked=1 if q38==1 & q31==1 replace card_blocked=0 if q38==2 & q31==1 | q31==2 replace card_blocked=0 if q31==2 label var card_blocked "Issuer blocked credit card account during past 6 months" foreach var in card_blocked late_fees overdraft_fees{ egen `var'm=mean(`var') if treatment==0 egen `var'sd=sd(`var') if treatment==0 sort treatment `var'm replace `var'm=`var'm[_n-1] if `var'm==. replace `var'sd=`var'sd[_n-1] if `var'sd==. gen `var'z=(`var'-`var'm)/`var'sd drop `var'm `var'sd } egen credit_card_outcomes=rmean(card_blockedz late_feesz overdraft_feesz) label var credit_card_outcomes "Credit card outcomes index - mean of z-scores" sum credit_card_outcomes card_blocked late_fees overdraft_fees if treatment==0 foreach var in credit_card_outcomes card_blocked late_fees overdraft_fees{ xi: reg `var' treatment i.strata i.interview_month,r xi: ivreg `var' (attended_post=treatment) i.strata i.interview_month,r } * ------------- * * Loan behavior * * ------------- * **Requested credit from a pawn shop during past 6 months gen pawn_shop=1 if q30==1 | q30==2 replace pawn_shop=0 if q30==3 label var pawn_shop "Has requested credit from a pawn shop during past 6 months" **Applied for loan during past six months gen applied_loan=1 if q41==1 replace applied_loan=0 if q41==2 label var applied_loan "Applied for loan during past six months" **Stopped paying debt during past 6 months gen stopped_payment=1 if q48==1 replace stopped_payment=0 if q48==2 label var stopped_payment "Stopped paying debt during past 6 months" egen loan_behavior=rmean(applied_loan pawn_shop stopped_payment) label var loan_behavior "Loan behavior index - mean of components" sum loan_behavior applied_loan pawn_shop stopped_payment if treatment==0 foreach var in loan_behavior applied_loan pawn_shop stopped_payment{ xi: reg `var' treatment i.strata i.interview_month,r xi: ivreg `var' (attended_post=treatment) i.strata i.interview_month,r } * ------------- * * Loan outcomes * * ------------- * **Currently has loan from any source gen has_loan=1 if q46==1 replace has_loan=0 if q46==2 label var has_loan "Currently has loan from any source" **Current debt as percentage annual income gen debt=q471 if q47==1 replace debt=. if debt==777 label var debt "Current debt as percentage annual income" **Currenlty has no debt gen no_debt=1 if debt==0 replace no_debt=0 if debt>0 & debt~=. label var no_debt "Currenlty has no debt" foreach var in has_loan debt{ egen `var'm=mean(`var') if treatment==0 egen `var'sd=sd(`var') if treatment==0 sort treatment `var'm replace `var'm=`var'm[_n-1] if `var'm==. replace `var'sd=`var'sd[_n-1] if `var'sd==. gen `var'z=(`var'-`var'm)/`var'sd drop `var'm `var'sd } egen loan_outcomes=rmean(has_loanz debtz) label var loan_outcomes "Loan outcomes index - mean of z-scores" sum loan_outcomes has_loan debt if treatment==0 foreach var in loan_outcomes has_loan debt{ xi: reg `var' treatment i.strata i.interview_month,r xi: ivreg `var' (attended_post=treatment) i.strata i.interview_month,r }