Notice: On March 31, it was **announced** that Statalist is moving from an email list to a **forum**. The old list will shut down on April 23, and its replacement, **statalist.org** is already up and running.

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

From |
Abhimanyu Arora <abhimanyu.arora1987@gmail.com> |

To |
statalist@hsphsun2.harvard.edu |

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

Date |
Thu, 25 Aug 2011 12:12:21 +0200 |

Thanks a lot indeed Nick for the elegant solution and clear explanation of `=exp'. Potentially today's most useful thing learned. And thanks to Matthew, too for the handy option. Cheers Abhimanyu On Thu, Aug 25, 2011 at 12:04 PM, Nick Cox <njcoxstata@gmail.com> wrote: > Yes indeed. > > -strtoname()- arrived in Stata long after even the last update of > -renvars-, but that doesn't rule out anything. > > renvars, map(strtoname(@[1])) > > would I guess be the recipe to try, or > > forval j = 1/14 { > rename var`j' `=strtoname(var`j'[1])' > } > > Nick > > On Thu, Aug 25, 2011 at 10:57 AM, Matthew White > <mwhite@poverty-action.org> wrote: > >> It'd create longer variable names, but maybe -strtoname()- is another option? > > On Thu, Aug 25, 2011 at 9:27 AM, Nick Cox <njcoxstata@gmail.com> wrote: > >>> 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/ >>> >> >> >> >> -- >> Matthew White >> Data Coordinator >> Innovations for Poverty Action >> 101 Whitney Avenue, New Haven, CT 06510 USA >> www.poverty-action.org >> >> * >> * 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/ >> > > * > * 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/ > * * 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:*Nick Cox <njcoxstata@gmail.com>

**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>

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

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

**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):