遍历名称中具有相同前缀的许多变量

Looping over many variables with the same prefix in their name

我有很多以相同前缀开头的变量 grado

我想在这些变量中至少有一个等于某个值时保持观察,比如 4。变量 grado* 的元素是字节。

我创建了一个局部变量并遍历其元素以创建一个虚拟值 1,当至少一个 grado* 变量是 4 时。然而,虽然这运行没有错误,但当条件满足时,它不会将我的虚拟值更改为 1 - 所以基本上什么都没有发生。

看下面我用过的代码:

local A grado*
generate dummy = 0

foreach y of local A{
    replace dummy = 1 if `y' ==4
}

我的输入数据是这样的:

col1 grado1 grado2
 3     6      4
 4     4      4
 2     4      8      
 4     7      2

我想获得以下输出:

col1 grado1 grado2 dummy
 3     6      4      1
 4     4      4      1
 2     4      8      1
 4     7      2      0

请仔细研究 foreach 循环和局部宏的结构:

local A grado*

foreach y of varlist `A' {
    replace dummy = 1 if `y' == 4
}

我对运行没有错误的说法感到惊讶,因为您的代码是非法的。如放大示例所示,

clear 
input grado1 grado2 
0 4 
1 1 
end 

local A grado*
generate dummy = 0

foreach y of local A { 
    display "`y'" 
    replace dummy = 1 if `y' == 4
}

您的循环是对单个项目 grado* 的循环——因为将通配符放入 local 不会解压通配符。所以代码的相关部分变成

if grado* == 4 

这会产生一条错误消息。我只能猜测你做了一些不同的事情。

请注意,这有效

gen dummy = 0

foreach y of varlist grado* { 
    display "`y'" 
    replace dummy = 1 if `y' == 4
}

这条单线也是如此

egen wanted = anymatch(grado*), value(4)