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)