Stata是否有类似于Java的“try and catch”机制?

时间:2013-06-02 15:46:18

标签: java try-catch stata

我正在编写一个.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...?

3 个答案:

答案 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&&您的第一个文件不存在var2var1,然后:

选项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

.