我正在导入一个非常复杂的.xls文件,该文件通常在变量名中将多个单元格组合在一起。将其导入Stata后,只有第一个单元格具有变量名称,其他3个单元格为空白。是否可以编写一个循环来重命名所有变量(以4个为一组)?
例如,变量为:俄罗斯, B , C , D ,但我希望他们被命名为 Russia_A , Russia_B , Russia_C , Russia_D 。有没有办法在Stata中使用循环或命令执行此操作?
答案 0 :(得分:2)
在Stata中无法使用空白变量名称,因为您自己的示例证明了这一点。根据给出的信息,您的变量名称会四肢出现,以便您可以循环。一种基本技术是循环超过1,2,3,4并相应地采取行动。这个例子有效。如果它不是您想要的,那么最小的可重复示例是必不可少的,以说明为什么这与您想要的不同。
clear
input Russia B C D Germany E F G France H I J
42 42 42 42 42 42 42 42 42 42 42 42
end
tokenize "A B C D"
local i = 0
foreach v of var * {
local ++i
if `i' == 1 local stub "`v'"
rename `v' `stub'_``i''
if `i' == 4 local i = 0
}
ds
Russia_A Russia_C Germany_A Germany_C France_A France_C
Russia_B Russia_D Germany_B Germany_D France_B France_D
tokenize
可能是此处最不熟悉的命令,因此如果需要,请查看其帮助。
所有这一切,这不太可能是一个有用的数据结构。见help reshape
。
这是另一种方法。我们设置了一个运行所有变量的计数器。这可能更像是宏观操纵中的手指练习。
clear
input Russia B C D Germany E F G France H I J
42 42 42 42 42 42 42 42 42 42 42 42
end
tokenize "A B C D"
forval j = 1/4 {
local sub`j' "``j''"
}
unab all : *
tokenize "`all'"
local J : word count `all'
forval j = 1/`J' {
local k = mod(`j', 4)
if `k' == 0 local k = 4
if `k' == 1 local stub "``j''"
rename ``j'' `stub'`sub`k''
}
ds