*! version 1.7.3 2007-06-29 Stata 10 fix for categories 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)'"!="mprobit" & /* */ "`e(cmd)'"!="gologit" & /* */ "`e(cmd)'"!="clogit" & /* */ "`e(cmd)'"!="slogit" & /* */ ) { if "`e(cmd)'"=="tobit" /* */ | "`e(cmd)'"=="intreg" /* */ | "`e(cmd)'"=="cnreg" /* */ | "`e(cmd)'"=="regress" /* */ | "`e(cmd)'"!="poisson" /* */ | "`e(cmd)'"!="nbreg" /* */ | "`e(cmd)'"!="ztp" /* */ | "`e(cmd)'"!="ztnb" /* */ | "`e(cmd)'"!="zip" /* */ | "`e(cmd)'"!="zinb" { return scalar numcats = 2 } exit } * numeric value of reference category of mlogit * 2007-06-29 stata 10 fix if c(stata_version) < 10 { if "`e(cmd)'"=="mlogit" { scalar `refval' = e(basecat) } if "`e(cmd)'"=="mprobit" { scalar `refval' = e(i_base) } } else { if "`e(cmd)'"=="mlogit" { scalar `refval' = e(baseout) } if "`e(cmd)'"=="mprobit" { scalar `refval' = e(i_base) } } * 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'"," ") } * change :'s to _'s 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'",":") } * change {'s to _'s 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' } * change .'s to _'s 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 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 exit * version 1.7.2 13Apr2005 * version 1.7.1 27Mar2005 slogit * version 1.7.0 28Feb2005 mprobit * version 1.6.9 18Feb2005 ztp and ztnb