如何循环使用名称以相同前缀开头的许多变量

问题描述 投票:-1回答:2

我有许多以相同的前缀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
stata prefix local-variables
2个回答
1
投票

我对这样的说法没有错误感到惊讶,因为您的代码是非法的。如放大的示例所示,

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)

1
投票

请进一步研究foreach循环和locals的结构:

local A grado*
foreach y of varlist `A' {
    replace dummy = 1 if `y' == 4
    }
© www.soinside.com 2019 - 2024. All rights reserved.