*! version 1.1.2 19 May 1997 STB-40 gr24.1 * better treatment of missing values * fixes bug in sorting of string variables * version 1.1.0 8 March 1997 * N.J. Cox, University of Durham program define vbar version 5.0 local varlist "req ex max(6)" local options "SOrt(string) RSOrt(string) LABY(string) BY(string)" local options "CAtegory SEPbars PERC PROP PBYG PBYV * `options'" local if "opt" local in "opt" local weight "fweight aweight iweight" parse "`*'" parse "`varlist'", parse(" ") local nvars: word count `varlist' local nopts = ("`sort'" != "") + ("`rsort'" != "") + ("`by'" != "") if `nopts' > 1 { di in red "may only specify one of -sort-, -rsort-, -by-" exit 198 } if ("`laby'" != "") & ("`by'" != "") { di in red "may only specify one of -laby- and -by-" exit 198 } if ("`perc'" != "") & ("`prop'" != "") { di in red "may only specify one of -perc- and -prop-" exit 198 } local nopts = ("`pbyg'" != "") + ("`pbyv'" != "") if `nopts' > 1 { di in red "may only specify one of -pbyg- and -pbyv-" exit 198 } else if `nopts' == 1 { if ("`perc'" == "") & ("`prop'" == "") { di in red /* */ "must specify -perc- or -prop- with -pbyg- or -pbyv-" exit 198 } } if ("`pbyg'" != "") & ("`by'" == "") { di in red "must specify -by- with -pbyg-" exit 198 } if ("`sepbars'" != "") & ("`category'" == "") { di in red "must specify -category- with -sepbars-" exit 198 } preserve if "`if'" != "" | "`in'" != "" { qui keep `if' `in' } qui for `varlist', q(!): /* */ capture drop if @ == . // capture drop if @ == !! if "`by'" != "" { confirm variable `by' sort `by' local byvar "`by'" local by "by(`by')" } qui if "`sort'" != "" | "`rsort'" != "" { confirm variable `sort' `rsort' /* one will be blank */ /* must trap string variables which cannot be multiplied by weights */ local vartype: type `sort' `rsort' local notstr = substr("`vartype'",1,3) != "str" tempvar sortvar if "`exp'" != "" & `notstr' { gen `sortvar' `exp' * `sort' `rsort' } else { gen `vartype' `sortvar' = `sort' `rsort' } if "`sort'" != "" { sort `sortvar'} else { gsort - `sortvar' } if "`laby'" != "" { confirm variable `laby' local lblname : value label `laby' } else { tempvar laby gen `laby' = _n } tempvar lavar gen `lavar' = _n local i = 1 if "`lblname'" != "" { /* use labels if `laby' has them */ while `i' <= _N { local value = `laby'[`i'] local label : label `lblname' `value' label def `lavar' `i' "`label'", modify local i = `i' + 1 } } else { /* otherwise use values */ while `i' <= _N { local label = `laby'[`i'] label def `lavar' `i' "`label'", modify local i = `i' + 1 } } label val `lavar' `lavar' local by "by(`lavar')" } if "`category'" == "category" { if `nvars' > 1 { di in r "may only have one variable with -category-" exit 198 } qui tab `varlist' local nvars = _result(2) if `nvars' > 6 | "`sepbars'" == "sepbars" { if "`by'" == "" { tempvar freq gen `freq' = 1 local varlab: variable label `varlist' if "`varlab'" != "" { label var `freq' "`varlab'" } else { label var `freq' "`varlist'" } sort `varlist' local by "by(`varlist')" local varlist "`freq'" } else { di in r "cannot plot more than 6 categories" /* */ " as separate bars with -by- choice" exit 198 } } else { qui tab `varlist', gen(_999) local varlist "_999*" local i = 1 while `i' <= `nvars' { local varlab: variable label _999`i' local index = index("`varlab'","==") + 2 local varlab = substr("`varlab'",`index',.) label var _999`i' "`varlab'" local i = `i' + 1 } } } if "`prop'" == "prop" | "`perc'" == "perc" { if "`exp'" != "" { qui for `varlist': replace @ `exp' * @ /* weights have done their job: macros must be blanked out */ local weight local exp } if "`pbyv'" == "pbyv" & "`category'" == "" { qui for `varlist': su @ // replace @ = @ / _result(18) } else if "`pbyg'" == "pbyg" { tempvar rsum if `nvars' > 1 { /* rsum( ) insists on >= 2 variables */ egen `rsum' = rsum(`varlist') } else gen `rsum' = `varlist' sort `byvar' qui by `byvar': replace `rsum' = sum(`rsum') qui by `byvar': replace `rsum' = `rsum'[_N] qui for `varlist': replace @ = @ / `rsum' } else { tempname gsum scalar `gsum' = 0 qui for `varlist': /* */ su @ // scalar `gsum' = `gsum' + _result(18) qui for `varlist': replace @ = @ / `gsum' } } if "`perc'" == "perc" { qui for `varlist': replace @ = @ * 100 } gra `varlist' [`weight' `exp'] , bar `by' `options' end