*!revrs v1.0.1 12apr2007 *Author: Kyle C Longest, klongest@email.unc.edu *Reorders categorical variables and maintains value labels capture program drop revrs program define revrs, rclass version 8.2 syntax varlist(numeric) [, REPLace] local v `varlist' unab vars: `v' if "`replace'"=="" { qui foreach var of local vars { su `var' local `var'max = r(max) tempvar revt`var' gen `revt`var''= `var' - ``var'max' replace `revt`var'' = abs(`revt`var'') } qui foreach var of local vars { tempvar revl capture decode `var', g(`revl') if _rc == 0 { capture sencode `revl', gen(rev`var') gsort(`revt`var'') } else { replace `revt`var'' = `revt`var'' + 1 rename `revt`var'' rev`var' } replace rev`var' = `var' if `var'>``var'max' } } if "`replace'" == "replace" { qui foreach var of local vars { su `var' local `var'max = r(max) tempvar revt`var' gen `revt`var''= `var' - ``var'max' replace `revt`var'' = abs(`revt`var'') } qui foreach var of local vars { tempvar revl`var' capture decode `var', g(`revl`var'') if _rc==0 { sencode `revl`var'', gen(rev`var') gsort(`revt`var'') replace rev`var' = `var' if `var'>``var'max' drop `var' rename rev`var' `var' } else { replace `revt`var'' = `revt`var'' + 1 replace `revt`var'' = `var' if `var'>``var'max' replace `var' = `revt`var'' } } } end