Stata 使用字符串作为变量名
我有这样一个数据集:Stata 使用字符串作为变量名,stata,Stata,我有这样一个数据集: string_var | var1 | var2 | var3 var2 | 8 | 8 | 4 var3 | 7 | 5 | 7 var2 | 10 | 10 | 5 我需要测试var1是否等于var2或var3,具体取决于string\u var中包含的字符串。我的问题是将这些字符串转换为变量名,以便执行以下操作: gen test=1 if var1==string_var
string_var | var1 | var2 | var3
var2 | 8 | 8 | 4
var3 | 7 | 5 | 7
var2 | 10 | 10 | 5
我需要测试var1
是否等于var2
或var3
,具体取决于string\u var
中包含的字符串。我的问题是将这些字符串转换为变量名,以便执行以下操作:
gen test=1 if var1==string_var
其中,在==
之后,我需要某种转换函数来让Stata读取字符串,例如var2
,如下所示:
gen test=1 if var1==var2
只要有两种可能性,你就可以做出选择。(有几种可能性,我认为您需要一个循环。) 编辑: 这里有一个更普遍的解决方案。(如果其他人想到更整洁的解决方案,一定要发帖。)
是的,我有两个以上的选择,这将如何转化为一个循环?它工作得非常完美。我必须承认,我从来没有见过用测试条件直接替换变量。非常感谢。我很少看到这一点,除了在人们想要的行操作的上下文中,例如,包含最大值的变量的名称(每当有联系时,它本身就有问题)。
clear
input str4 string_var var1 var2 var3
var2 8 8 4
var3 7 5 7
var2 10 10 5
end
gen test = cond(string_var == "var2", var1 == var2, var1 == var3)
list
+--------------------------------------+
| string~r var1 var2 var3 test |
|--------------------------------------|
1. | var2 8 8 4 1 |
2. | var3 7 5 7 1 |
3. | var2 10 10 5 1 |
+--------------------------------------+
gen test = .
levelsof string_var, local(names)
quietly foreach name of local names {
replace test = var1 == `name' if string_var == "`name'"
}