*! NJC 1.0.0 6 February 2004 program _gaxis version 8 gettoken type 0 : 0 gettoken g 0 : 0 gettoken eqs 0 : 0 syntax varlist [if] [in] /// [, gap Missing BY(string) REVerse label(varlist)] if `"`by'"' != "" { _egennoby egroup() `"`by'"' /* NOTREACHED */ } tempvar touse order quietly { mark `touse' `if' `in' if "`missing'" == "" markout `touse' `varlist', strok sort `touse' `varlist' gen long `order' = _n if "`label'" == "" local label "`varlist'" if "`gap'" != "" { local nvars : word count `varlist' gen `type' `g' = 1 - `nvars' if `touse' foreach v of local varlist { replace `g' = `g' + sum(`v' != `v'[_n-1]) if `touse' } } else { by `touse' `varlist' : gen `type' `g' = _n == 1 if `touse' replace `g' = sum(`g') if `touse' } su `g', meanonly if "`reverse'" != "" { replace `g' = `r(max)' - `g' + 1 su `g', meanonly } if "`label'" == "" local label "`varlist'" forval i = 1/`r(max)' { su `order' if `g' == `i', meanonly if r(N) > 0 { local value local first = `r(min)' local prev = `first' - 1 // offset so that it is readable foreach v of local label { if (`v'[`first'] != `v'[`prev']) | !`touse'[`prev'] { if "`: value label `v''" != "" { local value `"`value' `: label (`v') `=`v'[`first']''"' } else local value `"`value' `=`v'[`first']'"' } } // end offset label def $EGEN_Varname `i' `"`value'"', modify } } label val `g' $EGEN_Varname label var `g' "`varlist'" } end