Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Stata 使用字符串作为变量名_Stata - Fatal编程技术网

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