我有许多以相同的前缀grado
开头的变量,并且当这些变量中的至少一个等于某个值(例如4)时,希望保持观察。变量grado*
的元素为字节。
到目前为止,我正在创建一个局部变量,并在其元素上循环以在grado*
的至少一个为4时创建一个取值为1的虚拟对象。但是,尽管此运行没有错误,但不会更改我的虚拟对象的值满足条件时将其设置为1-因此基本上什么也没有发生。参见下面我到目前为止使用的方法:
local A grado*
gen 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
我对这样的说法没有错误感到惊讶,因为您的代码是非法的。如放大的示例所示,
clear
input grado1 grado2
0 4
1 1
end
local A grado*
gen 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)
请进一步研究foreach
循环和locals
的结构:
local A grado*
foreach y of varlist `A' {
replace dummy = 1 if `y' == 4
}