この質問は、Stata: select the minimum of each observationに関連しています。グループごとに最低値を選択してください
次のように私はデータを持っている:
clear
input str4 id int eventdate byte dia_bp_copy int sys_bp_copy
"pat" 15698 100 140
"pat" 16183 80 120
"pat" 19226 98 155
"pat" 19375 80 130
"sue" 14296 80 120
"sue" 14334 88 127
"sue" 14334 96 158
"sue" 14334 84 136
"sue" 14403 86 124
"sue" 14403 88 134
"sue" 14403 90 156
"sue" 14403 86 134
"sue" 14403 90 124
"sue" 14431 80 120
"sue" 14431 80 140
"sue" 14431 80 130
"sue" 15456 80 130
"sue" 15501 80 120
"sue" 15596 80 120
"mary" 14998 90 154
"mary" 15165 91 179
"mary" 15280 91 156
"mary" 15386 81 154
"mary" 15952 77 133
"mary" 15952 80 144
"mary" 16390 91 159
end
は、一部の人々は、1日に複数の測定値を持っている、例えば、私は一日あたり最低の読書を選択する3月31日、1999年にスーを参照してください。
ここで私はいくつかの方法を私のコードです。それは不器用で不器用で、私はもっと簡単なやり方でやりたいことをするための助けを求めています。
*make flag for repeat observations on same day
sort id eventdate
by id: gen flag =1 if eventdate==eventdate[_n-1]
by id: gen flag2=1 if eventdate==eventdate[_n+1]
by id: gen flag3 =1 if flag==1 | flag2==1
drop flag flag2
* group repeat observations together
egen group = group(id flag3 eventdate)
* find lowest `sys_bp_copy` value per group
bys group (eventdate flag3): egen low_sys=min(sys_bp_copy)
*remove the observations where the lowest value of `sys_bp`_copy doesn't exist
bys group: gen remove =1 if low_sys!=sys_bp_copy
drop if remove==1 & group !=.
****これ、私が好きなヘルプ** **の問題
上記の方法の問題点は、スーのために、彼女の繰り返し測定値の二つが同じvalのを持っているということですsys_bp_copy
。だから、上記の私のアプローチは、私に彼女のために複数の読みを残す。
この例では、dia_sys_copy
を参照して、そこで最も低い値を選択して、複数の読み取り値がある場合に1人あたり1行を選ぶのに役立ちます。このコードは以下にありますが、これを行うための簡単な方法が必要ですか?
drop flag3 remove group
sort id eventdate
by id: gen flag =1 if eventdate==eventdate[_n-1]
by id: gen flag2=1 if eventdate==eventdate[_n+1]
by id: gen flag3 =1 if flag==1 | flag2==1
egen group = group(id flag3 eventdate)
bys group (eventdate flag3): egen low_dia=min(dia_bp_copy)
bys group: gen remove =1 if low_dia!=dia_bp_copy
drop if remove==1 & group !=.
大丈夫です、私はより多くのサスクイントを作るように編集します。待って。 – user2363642