Wednesday, January 25, 2006

st: RE: Renaming varnames

Didn't know about renvars. All my variables (44) have underscores. Nick, your "Official" solution works great. Thanks Nick and Jose.


Your loop is a good idea, except that putting the name in a new variable is not the best way to do it. And there is no point in doing this for _all_ variables. Perhaps there are some other problems too.

My official Stata solution:

foreach v of var *_ { local V : subinstr local v "_" "", all capture rename `v' `V' if _rc di as txt "problem with `v'" }

User-written program:

renvars *_, map(substr("@", 1, index("@","_") - 1))

(-renvars- was last updated in Stata Journal 5(4).)

Bail out now if this is transparent.


*_ catches all variable names that end with an underscore.

-capture- traps any problem inside the loop and lets it continue.

-renvars- won't rename any variable unless all new variable names are OK (legal and unambiguous).

The rule for a new name is

substr("@", 1, index("@","_") - 1)

namely, start at the beginning and stop just before the first underscore.


> -----Original Message----- > From: > []On Behalf Of > Thomas Speidel > Sent: 25 January 2006 20:46 > To: > Subject: st: Renaming varnames > > > I have a dataset whose variable names contain a varying amount of > trailing underscores (_). > Is there a way to rename all variable names without the trialing > underscores (other than renaming each individual variable)? > > ILLNESS___ byte %10.0g > SPECIMEN__ str12 %12s > HOSPITAL__ byte %10.0g > TYPE______ byte %10.0g > STAGE_____ str4 %9s > SIZE______ byte %10.0g > ... > > This is what I have tried so far (unsuccessfully): > > > foreach v of varlist _all { > gen `v'_underscore=strpos("`v'", "_") > rename `v' `=substr("`v'", 1, `v'_underscore)' > } >

Thomas Speidel Statistical Associate Clinical Trials Unit Tom Baker Cancer Centre 1331 - 29th Street N.W. Calgary, AB, T2N 4N4

Tel. (403) 521-3370 Email:

This e-mail and any attachments may contain confidential and privileged information. If you are not the intended recipient, please notify the sender immediately by return e-mail, delete this e-mail and destroy any copies. Any dissemination or use of this information by a person other than the intended recipient is unauthorized and may be illegal.

* * For searches and help try: * * *


Links to this post:

Create a Link

<< Home

This page is powered by Blogger. Isn't yours?