Notice: On April 23, 2014, Statalist moved from an email list to a forum, based at statalist.org.
From | Matthew White <mwhite@poverty-action.org> |
To | statalist@hsphsun2.harvard.edu |
Subject | Re: st: renaming variables from first observation |
Date | Thu, 25 Aug 2011 10:04:21 +0000 |
It'd create longer variable names, but maybe -strtoname()- is another option? Best, Matt 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/