Stata 在名称中具有相同前缀的多个变量上循环

Stata 在名称中具有相同前缀的多个变量上循环,stata,prefix,local-variables,Stata,Prefix,Local Variables,我有许多变量以相同的前缀grado开头 当这些变量中至少有一个等于某个值时,比如说4,我想保留一个观察值。变量grado*的元素是字节 我已经创建了一个局部变量,并在其元素上循环,以便在至少一个grado*变量为4时创建一个伪值1。然而,尽管这运行时没有错误,但当条件满足时,它不会将我的虚拟对象的值更改为1,因此基本上不会发生任何事情 下面是我使用的代码: local A grado* generate dummy = 0 foreach y of local A{ replace d

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

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

我已经创建了一个局部变量,并在其元素上循环,以便在至少一个
grado*
变量为
4
时创建一个伪值
1
。然而,尽管这运行时没有错误,但当条件满足时,它不会将我的虚拟对象的值更改为
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)