我花了很多时间做一些非常简单的事情。我正在尝试将一组变量更改为具有相同的名称,但最后使用不同的字母。我不理解数组是如何工作的:我的语法可能有多个问题,因为我对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'
}
答案 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*
。如果这不是您想要的,请举例说明一些当前变量名称及其所需的新名称。