检查Stata中变量是否存在

use*_*728 1 loops stata

我正在寻找一种方法来检查 Stata 数据集中是否存在变量,如果不存在,则在循环中重复检查变量名称,直到找到存在的变量为止。我知道对类似问题的其他答复涉及confirm并依赖于测试 的价值_rc

但是,如果您尝试重复使用这些方法,则循环的任何给定迭代中的值_rc只能说明在任何先前的迭代中是否至少存在一个错误。我希望继续测试,直到没有错误为止,但是每当第一次尝试导致错误时,就无法判断第二次尝试是否也会导致错误,因为_rc无论如何都保持不变(假设所有错误报告相同的代码) 。有没有办法手动重置_rc为零,或者以不涉及的不太特别的方式测试变量的存在_rc

Rob*_*rer 5

我认为对工作capture_rc程序存在一些误解。

1.我引用:

...如果您尝试重复使用这些方法,则在循环的任何给定迭代中 _rc 的值只能说明在任何先前的迭代中是否至少存在一个错误。

这是不正确的。的值_rc取决于紧随其后的命令的结果,因此它将被更新,直到循环结束。

2.我再引用一遍:

...每当第一次尝试导致错误时,就无法判断第二次尝试是否也会导致错误...

亦不正确。您可以通过查看来判断第二次、第三次等尝试是否错误_rc这是( 1 )的结果。

一个例子或许可以说明这一点:

clear all 
set more off

sysuse auto

gen var1 = 1
gen var2 = 2

local vlist var0 var1 var2 var3 mpg var4

foreach v of local vlist  {

    capture confirm variable `v'

    display "is `v' present ? " (_rc == 0)

}
Run Code Online (Sandbox Code Playgroud)

这导致

is var0 present ? 0
is var1 present ? 1
is var2 present ? 1
is var3 present ? 0
is mpg present ? 1
is var4 present ? 0
Run Code Online (Sandbox Code Playgroud)

显示不存在的变量var0紧随其后var1,该变量确实存在,依此类推。