我有这样的数据集:
string_var | var1 | var2 | var3
var2 | 8 | 8 | 4
var3 | 7 | 5 | 7
var2 | 10 | 10 | 5
我需要测试var1
是否等于 var2
或 var3
,具体取决于所包含的字符串在string_var
。我的问题是将这些字符串转换为变量名称,以执行以下操作:
gen test=1 if var1==string_var
其中,在==
之后,我需要某种转换功能让Stata读取字符串,例如var2
如下:
gen test=1 if var1==var2
答案 0 :(得分:1)
只有两种可能性,您可以选择分支。 (有几种可能性,我认为你需要一个循环。)
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'"
}