Statalist


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

Re: st: loop to rename vars


From   Steven Samuels <[email protected]>
To   [email protected]
Subject   Re: st: loop to rename vars
Date   Fri, 10 Oct 2008 15:33:11 -0400

Sorry, -Sergiy- for my last remark on Statalist-it was uncalled for.

-Steve
On Oct 10, 2008, at 3:23 PM, Sergiy Radyakin wrote:

Does not seem to work:

//-----------------------------------------------------
clear
sysuse auto
renvars \ var1-var`c(k)'
\ invalid name
r(198);

renvars var1-var`c(k)'
r(111);

renvars * var1-var`c(k)'
variable var1 not found
r(111);

which renvars
c:\ado\plus\r\renvars.ado
*! 2.2.1  15aug2000  Jeroen Weesie/ICS

version
version 9.2
*************************************************************

Perhaps I am doing something wrong?? Is slash required? Did you mean -renamev- ?

From the source code it follows that (at least sometimes) it may stop
with a message
di in re "`oldname' could not be renamed to `newname'"

Is this what you mean will happen? It should never occur in the case
in question because vars may be sequentially numbered, and
32-character names allow you to allocate more names than the Stata
limit.

My preferred strategy would be to:
1. generate K temporary variable names (note that it is Stata's
responsibility to ensure that the suggested variable name is unique)
2. rename each variable to the temporary name
3. rename each variable to the sequential name

program rename_seq
forvalues i=1/`=c(k)' {
  tempvar tmp`i'
}
ds
local i = 1
foreach var of varlist `r(varlist)' {
  rename `var' `tmp`i''
  local ++i
}
ds
local i = 1
foreach var of varlist `r(varlist)' {
  rename `var' var`i'
  local ++i
}
end
/* any resemblance to the code of Friedrich is purely coincidential */

Regards, S.R.




On Fri, Oct 10, 2008 at 2:46 PM, Nick Cox <[email protected]> wrote:
You can try it and see how smart the authors were (on this point).

Nick
[email protected]

Sergiy Radyakin

On Fri, Oct 10, 2008 at 2:26 PM, Nick Cox <[email protected]> wrote:
You don't need to fire up -ds- beforehand. This can thus be reduced to

local i = 1
foreach var of var * {
       ren `var' var`i'
       local ++i
}

In fact you don't need a loop. With -renvars- from the Stata Journal
(-search renvars- for location) you can go

renvars \ var1-var`c(k)'

What if var5 already exists (and it is 10th in order). Will -renvars-
be intelligent enough to sense it and adjust numbering accordingly? or
will it just crash with error 110 after renaming the fifth variable?


c(k) is held by Stata as the number of variables -- see results of
-creturn li- and it has a local macro persona `c(k)'.

Naturally -renvars- is doing the loop on your behalf. It also checks
for
name problems.

If Mai does not want all variables renamed, then the advice is
modified
accordingly.

Nick
[email protected]

Friedrich Huebler

ds
local i = 1
foreach var of varlist `r(varlist)' {
 ren `var' var`i'
 local ++i
}


On Thu, Oct 9, 2008 at 11:31 PM, mai7777 <[email protected]> wrote:

How can I loop over vars to rename them by their order number.
so they become var1, var2, var3...?

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



© Copyright 1996–2024 StataCorp LLC   |   Terms of use   |   Privacy   |   Contact us   |   What's new   |   Site index