Bookmark and Share

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]

AW: st: AW: RE: renaming variables


From   "Martin Weiss" <martin.weiss1@gmx.de>
To   <statalist@hsphsun2.harvard.edu>
Subject   AW: st: AW: RE: renaming variables
Date   Mon, 24 May 2010 18:33:53 +0200

<> 

True, so the ultimate telescoped solution for Abhimanyu is:

*************
clear*

forv i=53/108{
        gen var`i'=.
}

loc start 1990

forv i=53(3)108{
	ren var`i' year`start++'
}
*************


Abhimanyu can read up on "macro increments" via "++" in [U], section 18.3.7.


HTH
Martin


-----Ursprüngliche Nachricht-----
Von: owner-statalist@hsphsun2.harvard.edu
[mailto:owner-statalist@hsphsun2.harvard.edu] Im Auftrag von Nick Cox
Gesendet: Montag, 24. Mai 2010 18:22
An: statalist@hsphsun2.harvard.edu
Betreff: RE: st: AW: RE: renaming variables

Note that the code 

local start 1990 

forv i=53(3)108{
	loc myvars `myvars' var`i'
}

foreach var of local myvars{
	ren `var' year`start'
	loc ++start
}

can be condensed to 

local start 1990 

forv i=53(3)108{
	ren var`i' year`start'
	loc ++start
}

and in turn into 

local start 1990 

forv i=53(3)108{
	ren var`i' year`start++'
}

Nick 
n.j.cox@durham.ac.uk 

Martin Weiss


" Yes indeed , I should have mentioned while thanking,
that I had to drop the var54+3.. and var55+3... before applying
Martin's solution to get exectly what I wanted..."

Well, if you had said it, I would have replied that you can gather the
relevant -varname-s in a -local- and loop over it:


*************
//create vars

clear*

forv i=53/108{
	gen var`i'=1
}

//-rename-
loc start 1990

//get vars into -local-

forv i=53(3)108{
	loc myvars `myvars' var`i'
}

foreach var of local myvars{
	ren `var' year`start'
	loc ++start
}
*************

Abhimanyu Arora

Hi Martin Nick Paul

Thank you Paul. Yes indeed , I should have mentioned while thanking,
that I had to drop the var54+3.. and var55+3... before applying
Martin's solution to get exectly what I wanted...

Best regards

Abhimanyu

On Mon, May 24, 2010 at 4:40 PM, Martin Weiss <martin.weiss1@gmx.de> wrote:
>
> <>
>
> Paul,
>
> I really do not understand what you think is wrong with the solution, not
> even after thinking about it for 15 minutes. I was kind of waiting for
> Abhimanyu to come to the list saying he ended up with the wrong -rename-d
> vars b/c his initial state was not ours in that it was not in alphabetical
> order:
>
> *************
> //create vars
>
> clear*
>
> loc mynumbers 104 59 62 53 56 65 101 107 95 68 71 74 80 77 89 83 86 92 98
>
>
> foreach i of local mynumbers{
>        gen var`i'=1
> }
> *************
>
> But a simple -aorder- would have changed the order to the one required.
>
> Your complaint seems to refer to a data structure that Abhimanyu never
> requested...
>
>
> HTH
> Martin
>
>
> -----Ursprüngliche Nachricht-----
> Von: owner-statalist@hsphsun2.harvard.edu
> [mailto:owner-statalist@hsphsun2.harvard.edu] Im Auftrag von Seed, Paul
> Gesendet: Montag, 24. Mai 2010 16:00
> An: statalist@hsphsun2.harvard.edu
> Betreff: st: RE: renaming variables
>
> I'm afraid there is a problem with Nick Cox's elegant solutions
> to Abhimanyu Arora's problem.
>
> Abhimanyu asked:
> "I would like to rename my variables var53....var108 such that var53,
> var56, var59 ......var107 etc...are renamed as year1990,
> year1991......year2008 repectively. I tried to use renvars(by Jeroen
> Weesie) and a forvalues loop, but am not able to succeed.
>
> And Nick suggested
>
>
> //-rename-
> loc start 1990
>
> foreach var of varlist var* {
>        ren `var' year`start'
>        loc ++start
> }
>
> However, the use of var* assumes a very unusual data set, in
> which the only "varX" variables are the year variables
> that need renaming, and they are spaced 3-apart with nothing
> in the gaps. This is the case in the artificial example Nick produces:
>
> clear
> set obs 1
> forv i=53(1)107{
>        gen var`i'=1
> }
>
>
> Consider perhaps a more realistic data set:
> clear
> sysuse auto
> forv i=40(1)107{
>        gen var`i'=1
> }
>
> Now Nick's solution needs to be adapted slightly.
>
>
> //-rename2-
>
> loc start 1990
> forv i=53(3)107{
>        ren `var'`i' year`start'
>        loc ++start
> }
>
> It can also be extended to other variables.
> I assume that year is in each case the first
> (rather than the second or last) of a
> cluster of 3 variables:
>
> //-rename3-
>
> loc start 1990
> forv i=53(3)107{
>        ren `var'`i' year`start'
>        local j = `i' + 1
>        ren `var'`j' thing_one_`start'
>        local j = `i' + 2
>        ren `var'`j' thing_two_`start'
>        loc ++start
> }
>
>
> (with acknowledgements to Dr Seuss)
> http://en.wikipedia.org/wiki/The_Cat_in_the_Hat
>

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


© Copyright 1996–2014 StataCorp LP   |   Terms of use   |   Privacy   |   Contact us   |   Site index