Notice: On April 23, 2014, Statalist moved from an email list to a forum, based at statalist.org.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

From |
Nick Cox <njcoxstata@gmail.com> |

To |
statalist@hsphsun2.harvard.edu |

Subject |
Re: st: renaming variables from first observation |

Date |
Thu, 25 Aug 2011 10:27:00 +0100 |

In fact, much of the last part of this to with -renvars- is a red herring. I was wondering exactly why my code with -renvars- worked; I just figured out that it was an accident in the original example in which buggy code gave the right answer for the wrong reason. Better code is renvars , map(word(@[1], 1)) This should be more transparent. The idiosyncratic detail is that @ is a placeholder for each variable name in turn. The recipe then is to use the first word of the value in the first observation. So for -var1- the new name would be the value of word(var1[1], 1) Nick On Thu, Aug 25, 2011 at 10:13 AM, Nick Cox <njcoxstata@gmail.com> wrote: > Let's assume that your first values are all legal names. You could > indeed do this > > forval j = 1/14 { > local names `names' `=var`j'[1]' > } > renvars var1-var14 \ `names' > > But that's actually dozens of lines more code (look _inside_ -renvars-) than > > forval j = 1/14 { > rename var`j' `=var`j'[1]' > } > > and the second is in any case shorter and more direct, even without > looking inside -renvars-. > > You asked what a solution was with -renvars- and I agree that it looks > complicated. The -map()- option was mine and intended as an outlet for > the desperate user-programmer whose problem was not met by any of the > other options. But usually you need to be moderately fluent in Stata > to make effective use of it. The program was written for the authors' > use and any utility beyond that is a pleasant side-effect! > > `= exp' > > evaluates an expression on the fly and is documented tersely at -help > macro-. But the main idea is simple. Consider as part of a command > line > > `= 2 + 2' > > Stata sees ` ' and so expects something like a macro reference to be > substituted. But instead of a macro name there is > > = 2 + 2 > > Stata does the calculation on the fly. In this case the result is 4 > and that is what the command would see. > > -renvars- is over a decade old now. After that length of time > StataCorp caught up and the official -rename- is now much versatile in > Stata 12, although I doubt it has a way to solve your problem without > a loop. I would be happy to be shown wrong on that. > > Nick > > > On Thu, Aug 25, 2011 at 9:50 AM, Abhimanyu Arora > <abhimanyu.arora1987@gmail.com> wrote: >> Yes Nick, precisely, my values in the first observation were not >> legal. What I meant by storing values in a macro was something like a >> horizontal -levelsof- command. Once I obtain the values in a single >> macro I thought of simply using your and Jeroen Weesie's -renvars-. >> >> But the map option seems not that easy to understand, perhaps because >> I find `quotes' confusing sometimes. One needs to have a string >> expression in the parentheses while using the map option but I see >> that the expression in your example is in `quotes', normally used for >> macros. Would be really great if you could clarify this fundamental >> issue. >> >> Many thanks >> Abhimanyu >> >> >> . list in 1 >> >> +--------------------------------------------------------------------------------------------------------------------+ >> 1. | var1 | var2 | var3 | var4 | var5 >> | var6 | var7 | var8 | var9 | var10 | var11 | var12 | >> | Series Code | Series Name | Country Code | Country Name | 2000 >> | 2001 | 2002 | 2003 | 2004 | 2005 | 2006 | 2007 | >> |---------------------------------------------------------+----------------------------------------------------------| >> | var13 | >> var14 | >> | 2008 | >> 2009 | >> +--------------------------------------------------------------------------------------------------------------------+ >> >> On Thu, Aug 25, 2011 at 10:35 AM, Nick Cox <njcoxstata@gmail.com> wrote: >>> Already answered, but not correctly. You could e.g. use the first word >>> of the first value. This works: >>> >>> . l >>> >>> +------------------------------+ >>> | var1 var2 var3 | >>> |------------------------------| >>> 1. | Frog Toad Venomous snake | >>> 2. | 1 2 3 | >>> +------------------------------+ >>> >>> . renvars , map(`=word("@", 1)') >>> >>> . l >>> >>> +------------------------------+ >>> | Frog Toad Venomous | >>> |------------------------------| >>> 1. | Frog Toad Venomous snake | >>> 2. | 1 2 3 | >>> +------------------------------+ >>> >>> Nick >>> >>> On Thu, Aug 25, 2011 at 9:25 AM, Abhimanyu Arora >>> <abhimanyu.arora1987@gmail.com> wrote: >>>> I caught the mistake, thanks to -set trace on-. 'Code' is the second >>>> word of my observation of the first variable and of course a variable >>>> name has to be single worded. But my question on possibility of using >>>> Nick's -renvars- remains. >>>> Best regards >>>> Abhimanyu >>>> >>>> >>>> On Thu, Aug 25, 2011 at 10:07 AM, Abhimanyu Arora >>>> <abhimanyu.arora1987@gmail.com> wrote: >>>>> Good morning statalist >>>>> I would like to rename my variables var1-var14 to the corresponding >>>>> values from the first observation. >>>>> I followed the post on >>>>> http://www.stata.com/statalist/archive/2004-07/msg00009.html and >>>>> modified it for my purpose. >>>>> >>>>> but I got this error >>>>> >>>>> . forvalues k = 1/14 { >>>>> 2. local newname = var`k'[1] >>>>> 3. ren var`k' `newname' >>>>> 4. } >>>>> >>>>> Code not allowed >>>>> >>>>> Also is it posible to store the values of an observation in a macro? >>>>> Perhaps I could then use Nick Cox's -renvars-? >>>>> > * * 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/

**Follow-Ups**:**Re: st: renaming variables from first observation***From:*Matthew White <mwhite@poverty-action.org>

**Re: st: renaming variables from first observation***From:*Matthew White <mwhite@poverty-action.org>

**References**:**st: renaming variables from first observation***From:*Abhimanyu Arora <abhimanyu.arora1987@gmail.com>

**Re: st: renaming variables from first observation***From:*Abhimanyu Arora <abhimanyu.arora1987@gmail.com>

**Re: st: renaming variables from first observation***From:*Nick Cox <njcoxstata@gmail.com>

**Re: st: renaming variables from first observation***From:*Abhimanyu Arora <abhimanyu.arora1987@gmail.com>

**Re: st: renaming variables from first observation***From:*Nick Cox <njcoxstata@gmail.com>

- Prev by Date:
**Re: st: renaming variables from first observation** - Next by Date:
**Re: st: renaming variables from first observation** - Previous by thread:
**Re: st: renaming variables from first observation** - Next by thread:
**Re: st: renaming variables from first observation** - Index(es):