Dear Statalist members,
I am learning Stata programming language and try to "replicate" Stata's xtreg model. Of course, my purpose is not to create another version of xtreg. Here is my code:
Code:
cap program drop myxtreg program define myxtreg , eclass prop( xt ) version 14.2 syntax varlist(numeric ts) [if] [in] [,fe re cluster(varname)] marksample touse markout `touse' `cluster', strok xtset `id' `time' tempvar id time gen `id' = `r(panelvar)' gen `time' = `r(timevar)' gettoken depvar iv: varlist tempname a b if "`fe'" != "" { xtreg `depvar' `iv' if `touse', fe matrix `a' = e(b) matrix `b' = e(V) ereturn post `a' `b', depn(`depvar') esample(`touse') ereturn local cmd "myxtreg" } else if "`re'" != "" { xtreg `depvar' `iv' if `touse', re matrix `a' = e(b) matrix `b' = e(V) ereturn post `a' `b', depn(`depvar') esample(`touse') ereturn local cmd "myxtreg" } else if "`cluster'" != "" { xtreg `depvar' `iv' if `touse', vce(cluster `cluster') matrix `a' = e(b) matrix `b' = e(V) ereturn post `a' `b', depn(`depvar') esample(`touse') ereturn local cmd "myxtreg" } else if ("`fe'" != "" & "`cluster'" != "") { xtreg `depvar' `iv' if `touse', fe vce(cluster `cluster') matrix `a' = e(b) matrix `b' = e(V) ereturn post `a' `b', depn(`depvar') esample(`touse') ereturn local cmd "myxtreg" } else if ("`re'" != "" & "`cluster'" != "") { xtreg `depvar' `iv' if `touse', re vce(cluster `cluster') matrix `a' = e(b) matrix `b = e(V) ereturn post `a' `b', depn(`depvar') esample(`touse') ereturn local cmd "myxtreg" } else { xtreg `depvar' `iv' if `touse' matrix `a' = e(b) matrix `b' = e(V) ereturn post `a' `b', depn(`depvar') esample(`touse') ereturn local cmd "myxtreg" } end
this program works when I separately activate the option of fe, re, and cluster(). But it doesn't work when I use the option fe or re and cluster() at the same time. Thus:
use http://www.stata-press.com/data/r14/nlswork.dta
xtset idcode year
myxtreg ln_wage wks_work hours tenure ttl_exp, fe // this identical with
xtreg ln_wage wks_work hours tenure ttl_exp, fe
myxtreg ln_wage wks_work hours tenure ttl_exp, cluster(idcode) // is identical with
xtreg ln_wage wks_work hours tenure ttl_exp, vce(cl idcode)
But....
myxtreg ln_wage wks_work hours tenure ttl_exp, fe cluster( idcode) // does not yield the same result as
xtreg ln_wage wks_work hours tenure ttl_exp, fe vce(cluster idcode)
Can anyone help me point out my mistake in the program code? Any help is much appreciated. Thank you.
Regards,
Afri
Comment