2017-08-07 8 views
0
ID A1 A2 A3 
1001 ABD AAA ABC 
1002 ABE BBB CCC 
1003 ABC CCC DDD 

私はループを持っています。 (どの行/列 "ABC"が発見されたかを知りたい)表示または印刷ループ変数は

私は上記のid[_n]を試したが、部分的にしか動作しなかった。

id[_n]のみif var=="ABC"trackrを1(0から)に変更したいとします。私はifブロックにすべてを入れようとしましたが、Stataのifは違うと思いますか?

+0

「ボーナス」という言い回しは、先生に尋ねる生徒のためではなく、生徒に挑戦する先生にとっては効果的です! –

答えて

0

あなたが望むものにはループは必要ありません。 Stataの質問のサンプルデータを提供するより良い方法は、SSCのdataexを参照してください。

ここ
clear 
input ID str3 (A1 A2 A3) 
1001 ABD AAA ABC 
1002 ABE BBB CCC 
1003 ABC CCC DDD 
end 

gen trackr = inlist("ABC", A1, A2, A3) 
list if inlist("ABC", A1, A2, A3) 

    +---------------------------------+ 
    | ID A1 A2 A3 trackr | 
    |---------------------------------| 
    1. | 1001 ABD AAA ABC  1 | 
    3. | 1003 ABC CCC DDD  1 | 
    +---------------------------------+ 

inlist()第二以降の引数のいずれかが、そうでなければ、最初の引数は0に等しい場合1が得られます。

ループでは、display A1[_n]のようなものは、最初の観測では変数をループするが、観測値はループしないので、値が表示されます。しかしループは必要ありません。

、あなたの基準を満たすだけの最初の観測を見たい場合は、それを行うための一つの方法は、

. list if trackr & sum(trackr) == 1 

    +---------------------------------+ 
    | ID A1 A2 A3 trackr | 
    |---------------------------------| 
    1. | 1001 ABD AAA ABC  1 | 
    +---------------------------------+ 

であり、list if sum(inlist("ABC", A1, A2, A3)) == 1も最初、このような観測を見つけるために働くだろうということになります。

+0

コックス教授、ありがとうございます、これは完全に動作します!将来の例を掲載するためのdataexを調べます。 –

+0

私はStataのドキュメントを読むとき、私は時には、それが何を必要としているかを探す関数が何であるかも知らないことがあります。この場合は、inlist()でした。最後に私がbysortを指していたとき(これはgroupbyにややマッピングされています)。交差点(2つのベクトル)からより複雑な内部と外部の結合に至るより多くのデータベースのような操作を実行したい場合、これらの調査をどこから始めるのですか?言い換えれば、Stata関数を他の言語の一般的に使用されている/知られているパラダイムにマッピングする用語集があります(逆もまた同様です)。 –

+0

逆に、 'groupby'という言葉の中には、Stataの' bysort'と大体同じであると言われていることを除いて、あなたが言います。しかし、あなたが欲しいのは、あなたによく知られている用語のStataの翻訳です。私が同情している間は、そのような用語集が存在するかどうかわかりません。 StataユーザのためのRに関する本が1つありますが、著者はStataについて本当に権威ある人ではありません。それを読んだことは一度もありませんし、リバースエンジニアリングにとってどのように役立つかもわかりません。肯定的なアドバイスは、データ管理や機能などの関連性のあるマニュアルセクションを見逃すことです。 –

関連する問題