重命名一组变量并连接后缀时出现多个错误

时间:2014-03-01 03:07:43

标签: stata

我花了很多时间做一些非常简单的事情。我正在尝试将一组变量更改为具有相同的名称,但最后使用不同的字母。我不理解数组是如何工作的:我的语法可能有多个问题,因为我对Stata非常不熟悉。我已经谷歌搜索了几个小时,无法解决这个问题,需要离开电脑一段时间。

local letters `" "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s" "t" "u" "v" "w" "x" "y" "z" "'
local i 1
local swap " "

foreach var of varlist q5_a-q5_o {
    local letter : word `i' of `letters' //select the 1st value in the array which is 'a'
    replace `swap' = "aspects" + "_" + `letter' //change swap to read 'aspects_a' 
    rename `var' `swap' //rename 'q5_a' to 'aspects_a'
    local `i' = `i' + 1 //add one to 'i' so that the next loop will change 'q5_b' to 'aspects_b'
}

2 个答案:

答案 0 :(得分:4)

正如@Dimitriy V.Masterov指出的那样,rename(在Stata 12中)可以进行多次重命名。

确实,

renpfix q5 aspect

似乎就是你想要的。

本回答的其余部分着重于您的方法出了什么问题。在你的情况下,你第一次打电话

replace `swap' = 

本地宏swap只是空格,因此Stata看到了

replace = 

这是非法的。但是这里使用replace的整个想法是错误的。根本不是如何更改本地宏。简而言之,您误读了replace作为操纵字符串的方法。这是一种改变变量内容的方法。

local letters `c(alpha)' 
local i = 1

foreach var of varlist q5_a-q5_o {
    local letter : word `i' of `letters' 
    rename `var' aspects_`letter' 
    local i = `i' + 1 
}

应该有效。在这里,我们正在利用小写字母" a"到" z"已经在c(alpha)中:在creturn list的输出结尾看到其他有用的点点滴滴。这可以缩短:

local letters `c(alpha)' 
local i = 1

foreach var of varlist q5_a-q5_o {
    local letter : word `i++' of `letters' 
    rename `var' aspects_`letter' 
}

还是更短的时间:

local i = 1

foreach var of varlist q5_a-q5_o {
    local letter : word `i++' of `c(alpha)' 
    rename `var' aspects_`letter' 
}

还是更短

foreach letter in `c(alpha)' { 
     rename q5_`letter' aspect_`letter' 
} 

虽然前面暗示这是renpfix为你做的任何事情。

答案 1 :(得分:3)

尝试群组重命名:rename q5* aspects*。如果这不是您想要的,请举例说明一些当前变量名称及其所需的新名称。