2013-06-02 14 views
8

私は、.dtaファイルのいくつかの変数の存在をチェックし、それらの変数の特定の値の存在をチェックするために.doと書いています。しかし、無効な変数名が見つかると、私のコードは実行を停止します。StataにはJavaに似た `try and catch`メカニズムがありますか?

私は、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...? 

答えて

18

短い答えはYesです。もう少し長い答えは、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" 

アイデアは2倍です。 captureは接頭辞付きのコマンドのエラーを食べますが、戻りコードは引き続き_rcでアクセス可能です。ゼロ以外の戻りコードはエラー・コードです。関連コマンドはconfirmであり、例えば、confirmである。

capture confirm var var1 

は、変数var1が存在するかどうかをチェックします。

+0

本当にありがとうございます。私は実際にStataマニュアルでキーワード 'try'を検索しています...これは可変の存在をチェックする自然な方法私はちょうど疲れて、欲求不満になってしまったので、本当のプロフェッショナルに尋ねることにしました:) – CHEBURASHKA

+2

StataはJavaを最初の起源とするので、良い近似には構文の類似性を反映させる必要があります事故または一般的なインスピレーションの源。しかしスタータは決して他の何かになることは約束していませんでした。それは多くのもののためにそれ自身の言葉を使用します。 –

+0

あまり控えめな選択肢は、「騒々しく捕捉する」でしょう。"これはまた、あなた自身のエラーの説明を提供する必要がないという利点があります。 –

0

一つの方法は、単純にコマンドラインで、あなたのコードを挿入することです。注意:最初に準備をしてから、コマンドラインに貼り付ける必要があります。そして、あなたの最初のファイルのために存在していない、あなたは2つの変数を持っていると言う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 

. 
+0

あなたのコードが間違った前提をしているかどうかをStataが教えてくれるはずです。そうですが、投稿された問題を解決することはできません。特に、デフォルトでdoファイルはエラーが発生するとすぐに停止します。インタラクティブに起こるのは問題ではありません。 –

+0

この解決策は私の問題を正確には解決していません:( – CHEBURASHKA

関連する問題