我有许多以相同的前缀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
答案 0 :(得分:1)
请进一步研究foreach
循环和本地宏的结构:
local A grado*
foreach y of varlist `A' {
replace dummy = 1 if `y' == 4
}
答案 1 :(得分:1)
由于您的代码是非法的,因此我对运行没有错误的说法感到惊讶。如放大的示例所示,
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)