遍历名称中具有相同前缀的许多变量
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)
我有很多以相同前缀开头的变量 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)