使用字符串作为变量名称

时间:2017-05-02 09:42:54

标签: stata

我有这样的数据集:

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 

1 个答案:

答案 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'" 
}