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 | A_MJO==15
gen curr_wkstate = A_W>1
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