Stata是否有类似Java的“try and catch”机制?
我正在写一个.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...?
简短的回答是肯定的。 稍微长一点的答案是,通过类比Java来猜测语法可能是成功的最小机会。 最好阅读Stata的文档,例如,首先浏览[P]手册中的主要条目。
这里var1
的问题是不存在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
它前缀命令的任何错误,但是仍然可以在_rc
访问返回码。 非零返回码是错误代码。
相关命令是confirm
,例如
capture confirm var var1
检查变量var1
存在。
您还可以通过向调用添加nostop
选项来阻止执行do文件以在发生错误时停止:
do myfile, nostop
一种方法是简单地在命令行中插入代码。 注意:您需要先准备它,然后将其粘贴到命令行中。 假设您有两个变量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 .