webuse womenwage2, clear des * Add value labels for wagecat label define wagecat 5 "$5,000 or less" 10 "$5,001 to $10,000" /// 15 "$10,001 to $15,000" 20 "$15,001 to $20,000" /// 25 "$20,001 to $25,000" 30 "$25,001 to $30,000" /// 40 "$30,001 to $40,000" 50 "$40,001 to $50,000" /// 51 "More than $50,000" label values wagecat wagecat fre wagecat * wage1 and wage2 are already in the dataset but we will * re-compute them to show how it is done. rename (wage1 wage2) (xwage1 xwage2) recode wagecat (5=.)(10=5)(15=10)(20=15)(25=20) /// (30=25)(40=30)(50=40)(51=50), gen(wage1) recode wagecat(51=.), gen(wage2) label variable wage1 "Wage lower endpoint ($1000s)" label variable wage2 "Wage upper endpoint ($1000s)" * List a few cases set seed 123456 bysort wagecat: gen firstcase = 1 if _n==1 list wagecat wage1 wage2 if firstcase == 1 * Run intreg intreg wage1 wage2 c.age c.age#c.age i.nev_mar i.rural school tenure, nolog * AMEs margins, dydx(*) use https://www3.nd.edu/~rwilliam/statafiles/intreg, clear des fre ycat list ycat y1 y2 in 1/10 sum y * intreg with collapsed Y intreg y1 y2 x1 x2 x3, nolog * OLS regression with original Y reg y x1 x2 x3 * oprobit with collapsed Y oprobit ycat x1 x2 x3, nolog *** Example 1 revisited *** webuse womenwage2, clear intreg wage1 wage2 c.age c.age#c.age i.nev_mar i.rural school tenure, nolog oprobit wagecat c.age c.age#c.age i.nev_mar i.rural school tenure, nolog reg wage c.age c.age#c.age i.nev_mar i.rural school tenure * intreg doesn't work that well, so lets try log(wages) instead gen logwage1 = log(wage1) gen logwage2 = log(wage2) gen logwage = log(wage) intreg logwage1 logwage2 c.age c.age#c.age i.nev_mar i.rural school tenure, nolog oprobit wagecat c.age c.age#c.age i.nev_mar i.rural school tenure, nolog reg logwage c.age c.age#c.age i.nev_mar i.rural school tenure