2016-11-08 11 views
0

私は個人IDのリストと、特定の日付に取得した医薬品のタイプを持っています。カテゴリ変数の一意のレベルを特定します

変数countを作成して、発生する最初の薬物に指標1を、2番目の固有の薬物に2を、3番目の固有の薬物に3をそれぞれ与えることができます。最初の薬物が2番目と3番目の後に出現するとき、私はそれがまだインジケータ1を持っていたいと思います。ユニークな薬物2の場合と同じように、それは人の全薬物履歴全体に渡って値2を維持しなければならず、薬物3についても同じ値を維持しなければなりません。

一人一人が、薬の異なるセットを持っているので
 +-------------------------------------+ 
    | p_id  date  agent_~e count | 
    |-------------------------------------| 
38. | 1001 13dec2001 thiazide  1| 
39. | 1001 12apr2002 thiazide  1| 
40. | 1001 15jul2002 thiazide  1| 
41. | 1001 28aug2002  arb  2| 
42. | 1001 26sep2002  CCB  3| 
    |-------------------------------------| 
43. | 1001 26sep2002  arb  2| 
44. | 1001 10oct2002  CCB  3| 
45. | 1001 10oct2002 thiazide  1| 
46. | 1001 10oct2002  arb  2| 
47. | 1001 10dec2002  CCB  3| 
    |-------------------------------------| 
48. | 1001 10dec2002  arb  2| 
    +-------------------------------------+ 

、私は、人2は以下の通りです。例えば

gen count = 1 if agent_type == "thiazide". 

のようなものとは対照的に、私はかなり一般的な解決策が必要だと思うし、彼らは非常に異なる薬歴にを持っています上記の人1。

  +-------------------------------+ 
     | p_id date  agent_t~e | 
     |-------------------------------| 
    207. | 2001 08jul1999 ace_inhib | 
    208. | 2001 02aug1999 ace_inhib | 
    209. | 2001 25aug1999 ace_inhib | 
    210. | 2001 22oct1999 ace_inhib | 
    211. | 2001 18nov1999   CCB | 
     |-------------------------------| 
    212. | 2001 18nov1999 ace_inhib | 
    213. | 2001 14dec1999   CCB | 
    214. | 2001 12jan2000   CCB | 
    215. | 2001 03feb2000   CCB | 
    216. | 2001 03feb2000   arb | 
     |-------------------------------| 
    217. | 2001 02mar2000   CCB | 
     +-------------------------------+ 

答えて

1

「ユニーク」は一般的な誤称です。厳密に言えば、それは一度だけ起こることを意味しますが、それはあなたが何を意味するものではありません。 「Distinct」ははるかに良い言葉です:Stataの文脈での議論については、​​を参照してください。

SSCのdataexについては、直接コピーして貼り付けることができるデータの例を表示することができます。あなたのエンジニアは、使いやすいエンジニアリングが必要でした。

あなたの問題は既にStata FAQ found hereです。投稿する前にFAQを調べることをお勧めします。

* Example generated by -dataex-. To install: ssc install dataex 
clear 
input float p_id str8 agent_type float(wanted date) 
1001 "thiazide" 1 15322 
1001 "thiazide" 1 15442 
1001 "thiazide" 1 15536 
1001 "arb"  2 15580 
1001 "CCB"  3 15609 
1001 "arb"  2 15609 
1001 "CCB"  3 15623 
1001 "thiazide" 1 15623 
1001 "arb"  2 15623 
1001 "CCB"  3 15684 
1001 "arb"  2 15684 
2001 "ace_inhi" 1 14433 
2001 "ace_inhi" 1 14458 
2001 "ace_inhi" 1 14481 
2001 "ace_inhi" 1 14539 
2001 "CCB"  2 14566 
2001 "ace_inhi" 1 14566 
2001 "CCB"  2 14592 
2001 "CCB"  2 14621 
2001 "CCB"  2 14643 
2001 "arb"  3 14643 
2001 "CCB"  2 14671 
end 
format date %td 

bysort p_id agent_type (date) : gen firstdate = date[1] 
egen group = group(p_id firstdate agent_type) 
bysort p_id (group date agent_type): gen count = sum(group != group[_n-1]) 
assert count == wanted 

このコードでは、同じ人が同じ日に2つ以上の薬剤を最初に使用する可能性があることに注意してください。

+0

これと質問作成の指針をいただきありがとうございます。質問を投稿する前に私は本当にFAQを読んでいましたが、それをうまく適用できませんでした。あなたは可能な解決策を述べたので、私は理解を深めるためにそれに戻ります。あなたが上に投稿した解決策を、最初のコード行に "日付"が括弧で囲まれているときの意味を説明してください。 – user2363642

+1

'by'構文については' help by'を参照してください。 –

+0

'input'構文については' help input'を参照してください。 –

関連する問題