循环使用名称相同前缀的许多变量

时间:2019-10-16 20:04:14

标签: stata prefix local-variables

我有许多以相同的前缀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

2 个答案:

答案 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)