* ************************************* * table1.ado * hacked from ph_table1 by paul hebert * ************************************* capture program drop phsmtfmt program define phsmtfmt, rclass version 10 if "`2'"=="integer" { if inrange(`1',-1,1) return local fmt "%5.0f" else if inrange(`1',-9,9) return local fmt "%6.0f" else if inrange(`1',-99,99) return local fmt "%7.0f" else if inrange(`1',-999,999) return local fmt "%8.0f" else return local fmt "%10.0g" } else { if inrange(`1',-1,1) return local fmt "%5.3f" else if inrange(`1',-9,9) return local fmt "%6.2f" else if inrange(`1',-99,99) return local fmt "%7.1f" else if inrange(`1',-999,999) return local fmt "%8.0f" else return local fmt "%10.0g" } end capture program drop table1 program define table1 *! v1.1 21 april 2011 gmh *! based on ph_table1 created by Paul Hebert syntax varlist [if] [in], by(varname) [stat(name)] [labels] [smartfmt] [cats] [pct] [catvars(varlist)] [STandard] quietly { local varlist: list varlist | catvars levelsof `by' `if' `in', local(lvls) local vallab: value label `by' inspect `by' `if' `in' local num_levels=r(N_unique) if "`labels'"=="" local labwidth=19 else local labwidth=29 local labwthp1=`labwidth'+1 local cw=round((132-`labwthp1'-8-3-(`num_levels'-1))/`num_levels') if `cw'>15 local cw=15 } display display in text %`labwthp1's "" "{c |}" _continue di in text %~`cw's "Total" "{c |}" _continue foreach x of local lvls { if "`vallab'"~="" { local labelstr: label (`by') `x' } else { local labelstr="`x'" } di %~`cw's abbrev("`labelstr'",`cw') "{c |}" _continue } if "`standard'"=="" { display in text %8s "p-value" } else { display in text %8s "std dif" } display in text "{hline `labwthp1'}{c +}" _continue display in text "{hline `cw'}{c +}" _continue foreach x of local lvls { display in text "{hline `cw'}{c +}" _continue } display in text "{hline 8}" * Count line quietly sum `by' `if' `in' local count=r(N) phsmtfmt `count' integer local cntfmt=r(fmt) local cell=string(`count',"`cntfmt'") di in text %-`labwidth's abbrev("Count",`labwidth') " {c |}" _continue di as result %`cw's "`cell'" _continue di as text "{c |}" _continue foreach l of local lvls { quietly { if "`if'"~="" summ `by' `if' & `by'==`l' `in' else summ `by' if `by'==`l' `in' local count=r(N) phsmtfmt `count' integer local cntfmt=r(fmt) local cell=string(`count',"`cntfmt'") } di as result %`cw's "`cell'" _continue di as text "{c |}" _continue } /* Count levels loop */ di * ***************************************** * Start Main variables list here * ***************************************** foreach x in `varlist' { quietly { inspect `x' `if' `in' local unique=r(N_unique) summ `x' `if' `in' local binary=`unique'==2 & r(max)==1 & r(min)==0 } local cat_var: list posof "`x'" in catvars local cat_var=`unique'<=10 & ("`cats'"~="" | `cat_var'>0) if "`labels'"~="" local varlabl: var label `x' if "`labels'"==""| "`varlabl'"=="" local varlabl="`x'" if (`cat_var'==1 | `binary'==1) & "`pct'"~="" local varlabl="`varlabl', % (n)" else if (`cat_var'==1 | `binary'==1) & "`pct'"=="" local varlabl="`varlabl', mean (n)" else local varlabl="`varlabl', mean (sd)" display in text %-`labwidth's abbrev("`varlabl'",`labwidth') " {c |}" _continue * ***************************************** * Do the non catagorical variables first * ***************************************** if `cat_var'==0 { quietly { summ `x' `if' `in', d local mu=r(mean) if `binary'==1 local sd=r(sum) else local sd=r(sd) if `unique'<5 { tab `x' `by' `if' `in', chi2 local p=r(p) *mh if "`standard'"~="" { if `binary'==0 { *** continuous std dif anova `x' `by' `if' `in' if "`if'"~="" summ `x' `if' & `by'==0 `in' ,d else summ `x' if `by'==0 `in' ,d local mu0=r(mean) local sd0=r(sd) if "`if'"~="" summ `x' `if' & `by'==1 `in' ,d else summ `x' if `by'==1 `in' ,d local mu1=r(mean) local sd1=r(sd) local p = 100*(`mu1' - `mu0')/sqrt(.5*(`sd0'^2 + `sd1'^2)) ** end cont std dif } else { if "`if'"~="" summ `x' `if' & `by'==0 `in' ,d else summ `x' if `by'==0 `in' ,d local mu0=r(mean) if "`if'"~="" summ `x' `if' & `by'==1 `in' ,d else summ `x' if `by'==1 `in' ,d local mu1=r(mean) local p = 100*(`mu1' - `mu0')/sqrt(.5*(`mu1'*(1-`mu1') + `mu0'*(1-`mu0'))) } } * end mh * end unique 5 } else { anova `x' `by' `if' `in' if "`standard'"=="" { local p=Ftail(e(df_m),e(df_r),e(F)) } else { if "`if'"~="" summ `x' `if' & `by'==0 `in' ,d else summ `x' if `by'==0 `in' ,d local mu0=r(mean) local sd0=r(sd) if "`if'"~="" summ `x' `if' & `by'==1 `in' ,d else summ `x' if `by'==1 `in' ,d local mu1=r(mean) local sd1=r(sd) local p = 100*(`mu1' - `mu0')/sqrt(.5*(`sd0'^2 + `sd1'^2)) } } if `binary'==1 & "`pct'"~="" local mu=`mu'*100 phsmtfmt `mu' local mufmt=r(fmt) if `unique'==2 phsmtfmt `sd' integer else phsmtfmt `sd' local sdfmt=r(fmt) local cell=string(`mu',"`mufmt'")+" ("+ string(`sd',"`sdfmt'")+")" } /* End quiet */ di as result %`cw's "`cell'" _continue di as text "{c |}" _continue * *********************************** * Now start levels * *********************************** foreach l of local lvls { quietly { if "`if'"~="" summ `x' `if' & `by'==`l' `in' ,d else summ `x' if `by'==`l' `in' ,d local mu=r(mean) if `unique'==2 local sd=r(sum) else local sd=r(sd) if `unique'==2 phsmtfmt `sd' integer else phsmtfmt `sd' local sdfmt=r(fmt) if `binary'==1 & "`pct'"~="" local mu=`mu'*100 phsmtfmt `mu' local mufmt=r(fmt) local cell=string(`mu',"`mufmt'")+" ("+ string(`sd',"`sdfmt'")+")" } /* end quiet */ di as result %`cw's "`cell'" _continue di as text "{c |}" _continue } /* Levels loop */ di as result %8s string(`p',"%5.3f") } /* End No categories loop */ * ******************************* * Categories loop * ******************************* else { quietly: tab `x' `by' `if' `in', chi2 local p=r(p) local vallab: value label `x' di as result %`cw's "" _continue di as text "{c |}" _continue foreach l of local lvls { di as result %`cw's "" _continue di as text "{c |}" _continue } /* Levels loop */ di as result %8s string(`p',"%5.3f") quietly: levelsof `x', local(xcats) foreach cat of local xcats { if "`vallab'"~="" local varlabl: label (`x') `cat' else local varlabl="`cat'" di in text %-`labwidth's abbrev("__`varlabl'",`labwidth') " {c |}" _continue quietly { summ `x' `if' `in' ,d local count=r(N) if "`if'"~="" summ `x' `if' & `x'==`cat' `in' ,d else summ `x' if `x'==`cat' `in' ,d if "`pct'"=="" local mu=r(N)/`count' else local mu=r(N)/`count'*100 local sd=r(N) phsmtfmt `mu' local mufmt=r(fmt) phsmtfmt `sd' integer local sdfmt=r(fmt) local cell=string(`mu',"`mufmt'")+" ("+ string(`sd',"`sdfmt'")+")" } /* end quiet */ di as result %`cw's "`cell'" _continue di as text "{c |}" _continue foreach l of local lvls { quietly { if "`if'"~="" summ `x' `if' & `by'==`l' `in' ,d else summ `x' if `by'==`l' `in' ,d local count=r(N) if "`if'"~="" summ `x' `if' & `x'==`cat' & `by'==`l' `in' ,d else summ `x' if `x'==`cat' & `by'==`l' `in' ,d if "`pct'"=="" local mu=r(N)/`count' else local mu=r(N)/`count'*100 local sd=r(N) phsmtfmt `mu' local mufmt=r(fmt) phsmtfmt `sd' integer local sdfmt=r(fmt) local cell=string(`mu',"`mufmt'")+" ("+ string(`sd',"`sdfmt'")+")" } /* End quiet */ di as result %`cw's "`cell'" _continue di as text "{c |}" _continue } /* Levels loop */ di } /* End cat loop */ } /* End Categories if statement */ } /* End Variables loop */ end