program def barplot *! 1.4.0 NJC 14 April 1999 * 1.3.0 NJC 26 January 1999 * 1.2.0 NJC 16 July 1998 * 1.1.0 NJC 14 April 1998 * 1.0.0 NJC 30 March 1998 version 6.0 syntax varlist(min=2) [if] [in] /* */ [ , Width(str) Base(str) Months XLAbel(str) BY(varname) JOIN * ] tokenize `varlist' local nvars : word count `varlist' local x ``nvars'' local `nvars' local ylist "`*'" tempvar Width Base touse id mark `touse' `if' `in' markout `touse' `x' if `nvars' == 2 { markout `touse' `1' } if "`width'" != "" { capture confirm variable `width' if _rc { confirm number `width' } } else local width 1 gen `Width' = `width' local basevar 0 if "`base'" != "" { capture confirm variable `base' if _rc { confirm number `base' } else local basevar 1 } else local base 0 gen `Base' = `base' preserve qui { keep if `touse' keep `by' `varlist' `Width' `Base' sort `by' `varlist' `Width' `Base' by `by' `varlist' `Width' `Base' : keep if _n == 1 expand 6 if `basevar' { tempvar minx egen `minx' = min(`x'), by(`Base') replace `minx' = - `minx' } if "`join'" != "" { sort `by' `minx' `Base' `x' `ylist' } else gsort `by' `minx' `Base' - `x' `ylist' gen byte `id' = mod(_n,6) local i 1 while `i' < `nvars' { replace ``i'' = `Base' if (`id' <= 1 | `id' >= 4) & ``i'' < . local i = `i' + 1 } replace `x' = `x' - 0.5 * `Width' /* */ if `id' == 1 | `id' == 2 | `id' == 5 replace `x' = `x' + 0.5 * `Width' /* */ if `id' == 3 | `id' == 4 | `id' == 0 } if `"`xlabel'"' == `""' { if "`months'" != "" { local xlabel "xla(1,2,3,4,5,6,7,8,9,10,11,12)" } else local xlabel "xla" } else local xlabel `"xla(`xlabel')"' local connect : di _dup(20) "L" local symbol : di _dup(20) "i" if "`by'" != "" { local byby "by(`by')" } gra `varlist', c(`connect') sy(`symbol') `xlabel' `options' `byby' end