*Written for Stata 8.0 by Kerry L. Papps (klp27@cornell.edu) *28 April 2005, update suggested by Guilherme F. de Avila 26 November 2013 *This ado-file writes formatted descriptive statistics to a text file *The syntax is: *outsum varlist [[weight]] [if exp] [in range] using filename [, append nolabel noparen bracket nonobs nonotes replace comma quote title(textlist) ctitle(textlist) addnote(textlist)] *The options are the same as those for outreg program define outsum version 9.2 syntax varlist [aweight fweight iweight] [if] [in] using/ [, APpend NOLabel NOPAren BRacket NONOBs NONOTes replace COMma QUOte TItle(string) CTitle(string) ADDNote(string)] tokenize `varlist' foreach i in if in { if "``i''"=="" { local `i' "*" } } if "`quote'"=="" { local noquote "noquote" } if strpos("`using'",".")==0 local suffix ".out" preserve quietly { while "`1'" ~= "" { keep `if' keep `in' local nobs=_N su `1' [`weight'`exp'] local mean=r(mean) local sd=r(sd) local varlabel: variable label `1' tempfile `1' clear set obs 2 gen str32 varname="" gen str8 stats="" replace varname="`1'" in 1 replace varname="`varlabel'" if "`varlabel'"~="" & varname~="" & "`nolabel'"=="" replace stats=string(round(`mean',0.0001)) in 1 replace stats="("+string(round(`sd',0.0001))+")" in 2 if "`noparen'"~="" { replace stats=string(round(`sd',0.0001)) in 2 } if "`bracket'"~="" { replace stats="["+string(round(`sd',0.0001))+"]" in 2 } save "``1''" restore, preserve mac shift } clear set obs 1 gen str32 varname="Variable" gen str8 stats="(1)" replace stats="`ctitle'" if "`ctitle'"~="" tempfile stats tokenize `varlist' while "`1'" ~= "" { append using "``1''" save `stats', replace mac shift } if "`nonobs'"=="" { local N=_N+1 set obs `N' replace varname="Observations" in `N' replace stats="`nobs'" in `N' } save `stats', replace if "`append'"=="" { if "`title'"~="" { clear set obs 1 gen str32 varname="`title'" gen str8 stats="" append using `stats' } if "`nonotes'"=="" { local N=_N+1 set obs `N' if "`bracket'"=="" replace varname="Standard deviations in parentheses" in `N' else replace varname="Standard deviations in brackets" in `N' } if "`addnote'"~="" { local N=_N+1 set obs `N' replace varname="`addnote'" in `N' } outsheet using "`using'", `noquote' nonames `replace' `comma' } else { clear insheet using "`using'`suffix'", nonames rename v1 varname gen type=1 replace type=2 if varname=="" replace varname=varname[_n-1] if varname=="" gen order1=_n local rowobs=_N sort varname type local i=0 foreach var of varlist v* { local i=`i'+1 } foreach j of numlist 2/`i' { local k=`j'-1 local type`j': type v`j' local v`j'st=substr("`type`j''",1,3) if "`v`j'st'"~="str" { gen v`j'st=string(v`j') replace v`j'st="" if v`j'st=="." drop v`j' rename v`j'st v`j' } capture drop v`j'st rename v`j' stats`k' } order varname stats* tempfile statsold save `statsold' use `stats', clear rename stats stats`i' replace stats`i'="("+"`i'"+")" in 1 if "`ctitle'"~="" { replace stats="`ctitle'" in 1 } gen type=1 replace type=2 if varname=="" replace varname=varname[_n-1] if varname=="" gen order2=_n sort varname type save `stats', replace use `statsold', clear merge varname type using `stats' sort order1 order2 replace order1=`rowobs'-0.5 if order1==. & varname[`rowobs']=="Observations" replace order1=`rowobs'+1 if order1==. & stats1[`rowobs']~="" local rowobs=`rowobs'-1 replace order1=`rowobs'-0.5 if order1==. & stats1[`rowobs']~="" local rowobs=`rowobs'-2 replace order1=`rowobs'-0.5 if order1==. & stats1[`rowobs']~="" sort order1 order2 replace varname="" if type==2 drop type order1 order2 _merge outsheet using "`using'`suffix'", `noquote' nonames replace `comma' } } end