Stata从另一个列表重命名了很多变量

时间:2016-01-09 17:50:33

标签: stata

我正在导入一个非常复杂的.xls文件,该文件通常在变量名中将多个单元格组合在一起。将其导入Stata后,只有第一个单元格具有变量名称,其他3个单元格为空白。是否可以编写一个循环来重命名所有变量(以4个为一组)?

例如,变量为:俄罗斯 B C D ,但我希望他们被命名为 Russia_A Russia_B Russia_C Russia_D 。有没有办法在Stata中使用循环或命令执行此操作?

1 个答案:

答案 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