* 1.1.0 24 May 2007 *! Uli Kohler 1.0.0 April 4, 2007 @ 18:47:24 *! egen function -pctile()- with weights and altdef program _gwpctile version 8.2 syntax newvarname =/exp [if] [in] /// [, Weights(string) p(real 50) ALTdef BY(varlist) ] if `p'<=0 | `p'>=100 { di as err "p(`p') must be between 0 and 100" exit 198 } tempvar touse x if "`weights'" != "" { local weights "[aweight=`weights']" if "`altdef'" != "" { di as err "altdef not allowed with weights()" exit 198 } } quietly { mark `touse' `if' `in' gen double `x' = `exp' if `touse' if "`by'"=="" { _pctile `x' `weights' if `touse', p(`p') `altdef' gen `typlist' `varlist' = r(r1) if `touse' exit 0 } sort `touse' `by' `x' tempvar N by `touse' `by': gen long `N' = _n == 1 if `touse' by `touse': replace `N' = sum(`N') if `touse' sum `N', meanonly local maxby = r(max) gen `typlist' `varlist' = . forv i = 1/`maxby' { _pctile `x' `weights' /// if `touse' & `N' == `i', p(`p') `altdef' replace `varlist' = r(r1) if `touse' & `N' == `i' } } end