我正在编写一个.do
来检查一些.dta
文件中是否存在某些变量,以及检查这些变量是否存在某些值。但是,我的代码在遇到无效的变量名时停止执行。
我知道我混合了Java和Stata编码,这是完全不合适的,但有什么方法我可以这样做:
try {
su var1
local var1_mean=(mean)var1
local var1_min=(min)var1
local var1_max=(max)var1
...
}
catch (NoSuchVariableException e) {
System.out.println("Var1 does not exist")
}
// So that the code does not stop executing...?
答案 0 :(得分:21)
简短的回答是肯定的。稍微长一点的答案是,与Java类比,猜测语法可能是成功的最小机会。最好阅读Stata的文档,例如首先浏览[P]手册中的主要条目。
这里遇到的问题是没有var1
存在。这段代码是合法的,或者我相信:
capture su var1, meanonly
if _rc == 0 {
local var1_mean = r(mean)
local var1_min = r(min)
local var1_max = r(max)
}
else display "var1 does not exist"
这个想法是双重的。 capture
吃掉它前缀命令的任何错误,但仍然可以在_rc
中访问返回码。非零返回码是错误代码。
相关命令是confirm
,例如
capture confirm var var1
检查变量var1
是否存在。
答案 1 :(得分:1)
您还可以通过向呼叫添加nostop
选项来阻止执行do文件以在发生错误时停止:
do myfile, nostop
答案 2 :(得分:0)
一种方法是简单地在命令行中插入代码。注意:您需要先准备它,然后将其粘贴到命令行中。假设您有两个变量var1
&&您的第一个文件不存在var2
和var1
,然后:
选项1。您的.do
文件是:
su var1
su var2
...
当您尝试执行它时,您将获得以下内容:
variable var1 is not found
//这就是所有代码都已停止
选项2。您可以将同一行粘贴到命令栏中:
su var1
su var2
...
结果是:
. variable var1 is not found
. sum var2
Variable | Obs Mean Std. Dev. Min Max
-------------+--------------------------------------------------------
var2 | 5 39 26 1 8
.