我花了很多时间做一些应该很简单的事情。 我正在尝试将一组变量更改为具有相同的名称,但末尾的字母不同。 我不明白数组是如何工作的:我的语法可能有很多问题,因为我对 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'
}
正如@Dimitriy V. Masterov指出的那样,rename
(在Stata 12中)能够多次重命名。
事实上
renpfix q5 aspect
似乎是你想要的。
本答案的其余部分侧重于您的方法出了什么问题。在您的情况下,您第一次打电话
replace `swap' =
局部宏swap
只是空格,所以斯塔塔看到
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
以任何方式为您所做的。
尝试组重命名:rename q5* aspects*
。如果这不是您想要的,请举例说明一些当前变量名称及其所需的新名称。