* (Modified from _coef_table_header.ado) program reghdfe_header if !c(noisily) exit tempname left right .`left' = {} .`right' = {} local width 78 local colwidths 1 30 51 67 local i 0 foreach c of local colwidths { local ++i local c`i' `c' local C`i' _col(`c') } local c2wfmt 10 local c4wfmt 10 local max_len_title = `c3' - 2 local c4wfmt1 = `c4wfmt' + 1 local title `"`e(title)'"' local title2 `"`e(title2)'"' local title3 `"`e(title3)'"' local title4 `"`e(title4)'"' local title5 `"`e(title5)'"' // Right hand header ************************************************ *N obs .`right'.Arrpush `C3' "Number of obs" `C4' "= " as res %`c4wfmt'.0fc e(N) * Ftest if `"`e(chi2)'"' != "" | "`e(df_r)'" == "" { Chi2test `right' `C3' `C4' `c4wfmt' } else { Ftest `right' `C3' `C4' `c4wfmt' } * display R-squared if !missing(e(r2)) { .`right'.Arrpush `C3' "R-squared" `C4' "= " as res %`c4wfmt'.4f e(r2) } *if !missing(e(r2_p)) { * .`right'.Arrpush `C3' "Pseudo R2" `C4' "= " as res %`c4wfmt'.4f e(r2_p) *} if !missing(e(r2_a)) { .`right'.Arrpush `C3' "Adj R-squared" `C4' "= " as res %`c4wfmt'.4f e(r2_a) } if !missing(e(r2_within)) { .`right'.Arrpush `C3' "Within R-sq." `C4' "= " as res %`c4wfmt'.4f e(r2_within) } if !missing(e(rmse)) { .`right'.Arrpush `C3' "Root MSE" `C4' "= " as res %`c4wfmt'.4f e(rmse) } // Left hand header ************************************************* * make title line part of the header if it fits local len_title : length local title forv i=2/5 { if (`"`title`i''"'!="") { local len_title = max(`len_title',`:length local title`i'') } } if `len_title' < `max_len_title' { .`left'.Arrpush `"`"`title'"'"' local title forv i=2/5 { if `"`title`i''"' != "" { .`left'.Arrpush `"`"`title`i''"'"' local title`i' } } .`left'.Arrpush "" // Empty } * Clusters local kr = `.`right'.arrnels' // number of elements in the right header local kl = `.`left'.arrnels' // number of elements in the left header local N_clustervars = e(N_clustervars) if (`N_clustervars'==.) local N_clustervars 0 local space = `kr' - `kl' - `N_clustervars' local clustvar = e(clustvar) forv i=1/`space' { .`left'.Arrpush "" } forval i = 1/`N_clustervars' { gettoken cluster clustvar : clustvar local num = e(N_clust`i') .`left'.Arrpush `C1' "Number of clusters (" as res "`cluster'" as text ") " `C2' as text "= " as res %`c2wfmt'.0fc `num' } HeaderDisplay `left' `right' `"`title'"' `"`title2'"' `"`title3'"' `"`title4'"' `"`title5'"' end program HeaderDisplay args left right title1 title2 title3 title4 title5 local nl = `.`left'.arrnels' local nr = `.`right'.arrnels' local K = max(`nl',`nr') di if `"`title1'"' != "" { di as txt `"`title'"' forval i = 2/5 { if `"`title`i''"' != "" { di as txt `"`title`i''"' } } if `K' { di } } local c _c forval i = 1/`K' { di as txt `.`left'[`i']' as txt `.`right'[`i']' } end program Ftest args right C3 C4 c4wfmt is_svy local df = e(df_r) if !missing(e(F)) { .`right'.Arrpush /// `C3' "F(" /// as res %4.0f e(df_m) /// as txt "," /// as res %7.0f `df' as txt ")" `C4' "= " /// as res %`c4wfmt'.2f e(F) .`right'.Arrpush /// `C3' "Prob > F" `C4' "= " /// as res %`c4wfmt'.4f Ftail(e(df_m),`df',e(F)) } else { local dfm_l : di %4.0f e(df_m) local dfm_l2: di %7.0f `df' local j_robust "{help j_robustsingular##|_new:F(`dfm_l',`dfm_l2')}" .`right'.Arrpush /// `C3' "`j_robust'" /// as txt `C4' "= " as result %`c4wfmt's "." .`right'.Arrpush /// `C3' "Prob > F" `C4' "= " as res %`c4wfmt's "." } end program Chi2test args right C3 C4 c4wfmt local type `e(chi2type)' if `"`type'"' == "" { local type Wald } if !missing(e(chi2)) { .`right'.Arrpush /// `C3' "`type' chi2(" /// as res e(df_m) /// as txt ")" `C4' "= " /// as res %`c4wfmt'.2f e(chi2) .`right'.Arrpush /// `C3' "Prob > chi2" `C4' "= " /// as res %`c4wfmt'.4f chi2tail(e(df_m),e(chi2)) } else { local j_robust /// "{help j_robustsingular##|_new:`type' chi2(`e(df_m)')}" .`right'.Arrpush /// `C3' "`j_robust'" /// as txt `C4' "= " as res %`c4wfmt's "." .`right'.Arrpush /// `C3' "Prob > chi2" `C4' "= " /// as res %`c4wfmt's "." } end