*! version 1.1.1 [STB-51: dm66.2] *! Make a categorical variable by cutting at break points *! Addition to egen in stata 6.0 *! Version 1.3 David Clayton and Michael Hills 13 August 1999 program def _gcutv6 version 6.0 syntax newvarname(gen) =/exp [if] [in] /* */ [, AT(numlist asc) Group(real 0) ICodes Label ] if "`at'"=="" & `group'==0 { di in red "needs at or group option" exit 198 } if "`at'"!="" & `group'!=0{ di in re "cannot have breaks and group" exit 198 } tempvar touse pctile x qui gen `x' = `exp' if "`at'" != "" { tokenize "`at'" while "`1'"!="" { local top `1' mac shift } qui replace `x' = . if `x' >= `top' } marksample touse, novarlist markout `touse' `x' if "`at'"=="" & `group'!=0 & "`icodes'"==""{ local icodes "icodes" } if "`label'"!="" & "`icodes'"=="" { local icodes "icodes" } cap label drop `varlist' if "`at'"=="" { local count = 1 qui summ `x', meanonly local extra = string(r(min)) local at "`extra'" qui pctile `pctile' = `x' if `touse', nq(`group') while `count' < `group' { local extra = string(`pctile'[`count']) local at "`at' `extra'" local count = `count' + 1 } qui summ `x' if `touse', meanonly local extra = string(r(max)+1) local at "`at' `extra'" } tokenize "`at'" local n: word count `at' local i=0 while "`1'" != "" { local cutp `1' if "`icodes'"=="" { qui replace `varlist' = `cutp' if `x' >= float(`cutp') & `touse' } else { qui replace `varlist' = `i' if `x' >= float(`cutp') & `touse' } if `i'>0 & "`label'"!="" & "`icodes'" != "" { local code = `i' - 1 la def `varlist' `code' "`lastcut'-", a } local lastcut "`cutp'" local i=`i'+1 mac shift } if "`label'"!="" { la val `varlist' `varlist' } end