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



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

最新更新