Notice: On April 23, 2014, Statalist moved from an email list to a forum, based at statalist.org.
From | Nick Cox <njcoxstata@gmail.com> |
To | statalist@hsphsun2.harvard.edu |
Subject | Re: st: rename |
Date | Thu, 9 Aug 2012 16:32:23 +0100 |
Good news. You may be interested for future coding in small abbreviations of your code. gen rutgers2 = "m" + string(marker) if used == 0 replace rutgers2 = rutgers if used == 1 local end = _N forvalues i = 1/`end' { local next = rutgers2[`i'] local mynewvars `mynewvars' `next' } becomes /// assumes only values are 0 or 1 gen rutgers2 = cond(used == 0, "m" + string(marker), rutgers) forvalues i = 1/`=_N' { local mynewvars `mynewvars' `=rutgers[`i']' } On Thu, Aug 9, 2012 at 4:26 PM, Airey, David C <david.airey@vanderbilt.edu> wrote: > . > > Thanks to Nick and David, I got my rename groups code to work. Using > macro expansion I create a local macro containing the new variable > names that are in a string variable in a data set that is correctly > ordered by row to match a wide dataset in terms of variable order. I > create another local of the variables names in the wide dataset to be > renamed using the unab command. Then the new rename groups command > works great here, for 2129 variables, where the oldvars and newvars > are represented by locals. > > use markers_used.dta, clear > > // make local containing new variable names > // from a string variable contents (same order > // as variables in dataset to be renamed) > gen rutgers2 = "m" + string(marker) if used == 0 > replace rutgers2 = rutgers if used == 1 > local end = _N > forvalues i = 1/`end' { > local next = rutgers2[`i'] > local mynewvars `mynewvars' `next' > } > local mycount : word count `mynewvars' > display "`mycount'" // check if same as below > > // get local containing old variable names > use chr2_geno.dta, clear > unab myoldvars : m* > local mycount : word count `myoldvars' > display "`mycount'" // check if same as above > > // rename using new rename groups command > rename (`myoldvars') (`mynewvars') > drop m* > describe, short > > > // same effect in loop > /* > use chr2_geno.dta, clear > drop id famid > local nvars = r(k) > use chr2_geno.dta, clear > forvalues i = 1/`nvars' { > local oldname : word `i' of `myoldvars' > local newname : word `i' of `mynewvars' > rename `oldname' `newname' > } > drop m* > describe, short > */ > > > > >> sysuse auto >> rename (*) (<new list>) >> >> will work. >> >> Nick > >>> Maybe you could run it through a loop where the first word of the first >>> macro gets changed to the first word of the second macro, etc.? Like >> this: >>> >>> * Make fake dataset >>> set more off >>> clear >>> set obs 1 >>> forvalues i = 1/1000 { >>> gen oldvar`i' = . >>> } >>> >>> * Make list of new variable names >>> forvalues i = 1/1000 { >>> local newnames `newnames' newvar`i' >>> } >>> >>> * Change all variable names >>> local j = 1 >>> unab original : oldvar* >>> forvalues j = 1/1000 { >>> local oldname : word `j' of `original' >>> local newname : word `j' of `newnames' >>> rename `oldname' `newname' >>> } * * For searches and help try: * http://www.stata.com/help.cgi?search * http://www.stata.com/support/statalist/faq * http://www.ats.ucla.edu/stat/stata/