*! version 1.6.6 3/4/00 - bug fix (STB-57: sg152) *! version 1.6.5 2/16/00 - add regress; return 2 for count models *! version 1.6.4 2/15/00 - only check model if no varlist specified *! - numcats = 2 if tobit, cnreg, intreg *! - added poisson, nbreg, zip, zinb, cloglog *! version 1.6.3 - jf added clogit *! version 1.6.2 - sl with logistic *! version 1.6.1 - jf *bug fix in changing blanks to _s in labels *added catnms8 to handle long label names *added number of categories--r(numcats) *added refnm - name of reference category *only give refnm and refval after mlogit *! version 1.6.0 2/14/1999 - jsl: _catnm to V6 capture program drop _pecats program define _pecats, rclass version 6.0 tempname refval valnum rcount scalar `refval' = -999 syntax [varlist(max=1 default=none)] [if] [in] * only return values for models with categorical outcomes if "`varlist'" == "" & ( /* */ "`e(cmd)'"!="logit" & /* */ "`e(cmd)'"!="logistic" & /* */ "`e(cmd)'"!="probit" & /* */ "`e(cmd)'"!="cloglog" & /* */ "`e(cmd)'"!="ologit" & /* */ "`e(cmd)'"!="oprobit" & /* */ "`e(cmd)'"!="mlogit" & /* */ "`e(cmd)'"!="gologit" & /* */ "`e(cmd)'"!="clogit" & /* */ ) { if "`e(cmd)'"=="tobit" /* */ | "`e(cmd)'"=="intreg" /* */ | "`e(cmd)'"=="cnreg" /* */ | "`e(cmd)'"=="regress" /* */ | "`e(cmd)'"!="poisson" /* */ | "`e(cmd)'"!="nbreg" /* */ | "`e(cmd)'"!="zip" /* */ | "`e(cmd)'"!="zinb" { return scalar numcats = 2 } exit } * numeric value of reference category of mlogit if "`e(cmd)'"=="mlogit" { scalar `refval' = e(basecat) } * determine names and values of outcome categories local catnms "" if "`varlist'" != "" { local lhs `varlist' quietly tabulate `1' `if' `in', matrow(`valnum') matcell(`rcount') } if "`varlist'" == "" { local lhs "`e(depvar)'" quietly tabulate `e(depvar)' if e(sample)==1, matrow(`valnum') matcell(`rcount') } local nrows = rowsof(`valnum') * grab value labels local vallbl : value label `lhs' local i = 1 while `i' <= `nrows' { local vali = `valnum'[`i',1] * if value labels have been declared if "`vallbl'" != "" { local valnm : label `vallbl' `vali' if "`valnm'" == "" { local valnm = `vali' } * change blanks to _'s local valnm = trim("`valnm'") local bloc = index("`valnm'"," ") while `bloc' != 0 { local bloc = `bloc' - 1 local bloc2 = `bloc' + 2 local valnm = trim(substr("`valnm'",1,`bloc') /* */ + "_" + substr("`valnm'",`bloc2',.)) local bloc = index("`valnm'"," ") } } * if no value labels, then use value numbers else { local valnm `vali' } * if current value is refernce value, store it if `vali'==`refval' { local refnm `valnm' local refval `vali' } else { local catnms `catnms' `valnm' local catvals `catvals' `vali' *handle long label names for catnms8 if length("`valnm'") > 8 { local valnm = substr("`valnm'", 1, 8) } local catnms8 `catnms8' `valnm' } local i = `i' + 1 } * place reference value at end for mlogit if `refval'!=-999 { local catnms `catnms' `refnm' local catvals `catvals' `refval' *handle long label names for catnms8 if length("`refnm'") > 8 { local refnm = substr("`refnm'", 1, 8) } local catnms8 `catnms8' `refnm' } * logit probit clogit for case of 0 vs > 0 if "`varlist'"=="" & /* */ ("`e(cmd)'"=="logit" | "`e(cmd)'"=="probit" | "`e(cmd)'"== "clogit" | "`e(cmd)'"=="cloglog" ) /* */ & `nrows'~=2 { local catnms 0 ~0 local catvals 0 ~0 local catnms8 0 ~0 } *number of categories as catnum local numcats : word count `catnms' *return information about reference category if mlogit if "`varlist'"=="" & "`e(cmd)'" == "mlogit" { return scalar refval =`refval' return local refnm "`refnm'" } return local catnms "`catnms'" return local catvals "`catvals'" return local catnms8 "`catnms8'" return scalar numcats = `numcats' end