STATA statistical code for estimation of Millimet et al. (2002) econometric worklife model
The STATA code for estimating the Millimet et a;. (2002) econometric worklife model can be found below. The code will need to be adjusted to fit your purposes. However, the basic portions are here.
use 1992-2013, clear
drop if A_W==0
keep if A_A>=16 & A_A<86
*drop if A_MJO==0
*drop if A_MJO==14
lab var curr_wkstate “1= active in current period”
gen prev_wkstate = prev_W>1
lab var prev_wkstate “1= active in previous period”
gen age = A_A
gen age2 = age*age
gen married = A_MA<4
gen white = A_R==1
gen male = A_SE==1
gen mang_occ = A_MJO<3 gen tech_occ = A_MJO>2 & A_MJO<7 gen serv_occ = A_MJO>6 & A_MJO<9 gen oper_occ = A_MJO>8
gen occlevel = 0
replace occlevel = 1 if mang_occ==1
replace occlevel = 2 if tech_occ==1
replace occlevel = 3 if serv_occ==1
replace occlevel = 4 if oper_occ ==1
gen lessHS = A_HGA<=38 gen HS = A_HGA==39 gen Coll = A_HGA>42
gen someColl = A_HGA>39 & A_HGA<43 gen white_age = white*age gen white_age2 = white*age2 gen married_age = married*age gen child_age = HH5T*age /* gen mang_occ_age = mang_occ*age gen tech_occ_age = tech_occ*age gen serv_occ_age = serv_occ*age gen oper_occ_age = oper_occ*age */ merge m:1 age using mortalityrates keep if _m==3 drop _m gen edlevel = 1*lessHS + 2*HS + 3*someColl + 4*Coll save anbasemodel, replace */ Active to Active and Active to Inactive probabilities local g = 0 local e = 1 forvalues g = 0/1 { forvalues e = 1/4 { use anbasemodel, clear xi: logit curr_wkstate age age2 white white_age white_age2 married married_age HH5T i.year_out if prev_wk==1 & male==`g’ & HS==1 *Gives you conditional probability *summing these figures gives the average predicted probabilities predict AAprob keep if occlevel==`e’ *collapse (mean) AAprob mortality, by(age) collapse (mean) AAprob mortality (rawsum) MARS [aweight=MARS], by(age) gen AIprob = 1-AAprob replace AAprob = AAprob*(1-mortality) replace AIprob = AIprob*(1-mortality) save Active_probs, replace *Calculates Inactive first period probabiliteis use anbasemodel, clear xi: logit curr_wkstate age age2 white white_age white_age2 married married_age HH5T i.year_out if prev_wk==0 & male==`g’ & HS==1 predict IAprob keep if occlevel==`e’ *collapse (mean) IAprob mortality , by(age) collapse (mean) IAprob mortality (rawsum) MARS [aweight=MARS], by(age) gen IIprob = 1-IAprob save Inactive_probs, replace *Calculates WLE for Active and Inactive merge 1:1 age using Active_probs drop _m order AAprob AIprob IAprob IIprob *Set the probablilties for end period T+1 *Note the top age changes to 80 in the later data sets gen WLE_Active = 0 replace WLE_Active = AAprob[_n-1]*(1+AAprob) + AIprob[_n-1]*(0.5 + IAprob) gen WLE_Inactive = 0 replace WLE_Inactive = IAprob[_n-1]*(0.5+AAprob) + IIprob[_n-1]*IAprob gen WLE_Active_2 = 0 replace WLE_Active_2 = WLE_Active if age==85 gen WLE_Inactive_2 = 0 replace WLE_Inactive_2 = WLE_Inactive if age==85 local x = 1 local y = 80 – `x’ forvalues x = 1/63 { replace WLE_Active_2 = AAprob*(1+WLE_Active_2[_n+1]) + AIprob*(0.5 + WLE_Inactive_2[_n+1]) if age==`y’ replace WLE_Inactive_2 = IAprob*(0.5 + WLE_Active_2[_n+1]) + IIprob*WLE_Inactive_2[_n+1] if age==`y’ local x = `x’ + 1 local y = 80 – `x’ } keep age WLE_Active_2 WLE_Inactive_2 rename WLE_Active_2 WLE_Active_`g’_`e’ rename WLE_Inactive_2 WLE_Inactive_`g’_`e’ save WLE_`g’_`e’, replace keep age WLE_Active_`g’_`e’ save WLE_Active_`g’_`e’, replace use WLE_`g’_`e’, clear keep age WLE_Inactive_`g’_`e’ save WLE_Inactive_`g’_`e’, replace di `e’ /**End of Active to Active and Active to Inactive probabilities*/ local e = `e’ + 1 } local g = `g’ + 1 } local g = 0 local e = 1 forvalues g = 0/1 { forvalues e = 1/4{ if `e’ == 1 { use WLE_Active_`g’_`e’, clear save WLE_Active_`g’_AllOccLevels, replace use WLE_Inactive_`g’_`e’, clear save WLE_Inactive_`g’_AllOccLevels, replace } if `e’ > 1 {
use WLE_Active_`g’_AllOccLevels, replace
merge 1:1 age using WLE_Active_`g’_`e’
drop _m
save WLE_Active_`g’_AllOccLevels, replace
use WLE_Inactive_`g’_AllOccLevels, replace
merge 1:1 age using WLE_Inactive_`g’_`e’
drop _m
save WLE_Inactive_`g’_AllOccLevels, replace
}
local e = `e’ + 1
}
if `g’ ==1 {
use WLE_Active_0_AllOccLevels, clear
merge 1:1 age using WLE_Active_1_AllOccLevels
drop _m
save WLE_Active_BothGenders_AllOccLevels, replace
use WLE_Inactive_0_AllOccLevels, clear
merge 1:1 age using WLE_Inactive_1_AllOccLevels
drop _m
save WLE_Inactive_BothGenders_AllOccLevels, replace
}
local g = `g’ + 1
}
!del anbasemodel.dta