2017-10-17 5 views
0

一般的な問題:他のグループの条件に基づいて値を作成する方法を理解できません。私のような何かをしたいと思います:別のグループのデータに基づいてあるグループの行に条件付きフラグを設定する

gen x = cond(cond1==1 & cond2==1, value[**of some other row in a different group**], other_value) 

具体的な問題:変わることはありませんidに基づいてグループを持つ大規模なデータセット、およびない二次ID(co_id)を考えます。各グループには、timeで繰り返す複数の行があります。各行は、特定の時点で別のグループ(すなわち、id)との関係を示すフラグ(is_a)を有する。この関係は、co_idへの変更によって示され、他のグループと等しくなります。今年フラグが立てられた行(is_a == 1)新しいco_idが属するグループのidを見つけるため

  1. 、およびそのほかのグループのために
  2. 、フラグ:

    私は二つのことをやろうとしています接続は、上記の例で

enter image description here

を行ったこと、grou p 111は、11の時間にグループ222に接続されました(1回だけ接続されました)。新しいco_id'xzx'に基づいて、id222以降であることを示したいと思います。他のグループにはco_idがあるかもしれませんが、正しい数字はco_idのデータの中で最も早いものです(したがって、222であり、777ではありません)。

グループ222については、接続が行われたときにその時刻にフラグを立てます(time == 11)。

サンプルデータ:

clear 
input int id byte(is_a time) str3 co_id 
111 0 10 "abc" 
111 0 10 "abc" 
111 1 11 "xzx" 
111 1 11 "xzx" 
111 1 12 "xzx" 
111 1 12 "xzx" 
222 0 10 "xzx" 
222 0 10 "xzx" 
222 0 11 "xzx" 
222 0 11 "xzx" 
222 0 12 "xzx" 
222 0 12 "xzx" 
777 1 13 "xzx" 
end 

は、事前にありがとうございます!

+1

人々がコピー&ペーストできるデータの例を示してください。 'ssc inst dataex'は小さなデータの例を' input'コードとして提供します。何人の人が画像に見られるものを再入力したいのですか?また、_rows_という用語は、Stataディスカッションには、スプレッドシートの議論と同じように、Stataディスカッションの外にあります。 –

+0

「vlookup」と呼ばれるユーザから書かれたコマンドがあります。そのアプローチは再利用するかもしれませんが、既製では機能しません。 –

+0

@NickCoxが追加されました。ごめんなさい、ありがとう! –

答えて

0

私の問題の1つは、私がグループ化操作の基礎としてidを使用して精神的に固執していたことでした。co_idが最後time以降に変更かどうかを確認するために、ヘルパー変数を作成したより

sort co_id time id 
by co_id: gen id_co = id[1] if is_a==1 

:ごとのソート一部で、ここに助けco_idを使用して

sort id time 
by id: gen changed_co_id = cond(co_id[_n]!= co_id[_n-1], 1, 0) 
by id: replace changed_co_id = 0 if _n==1 
by id time: replace changed_co_id = 1 if changed_co_id[1]==1 

今、私は他のグループのためのフラグを作成することができます接続がいつ行われたかを示す:

#delimit ; 
sort co_id time is_a changed_co_id; 
by co_id time: gen is_conn = cond(is_a==0 & 
         changed_co_id==0 & 
         is_a[_N]==1 & 
         changed_co_id[_N]==1, 1, 0); 
#delimit cr 

したがってフラグを作成するには、でソートする必要があります接続が行われたとき(そして後で)、そしてchanged_co_idによって共存できるように、接続されたグループのidの両方を取得できるので、接続が行われた正確なtimeを見つけることができます。新たに接続された観測値が各グループの最後に表示されるようにします。次に、接続を開始したグループの観測にフラグを立てます。それらが接続されておらず、最後の観測があった場合、新たに観測されます。

関連する問題