2017-08-05 4 views
0

私のデータには何らかの問題があります。調査は住宅部門で行われます。したがって、同じ人物IDを持つ2つの行は、実際には同じ人物を示していない可能性があります。n行目で何かが起きた場合、IDはn番目から最後の行に変更されます

実際に違う人に別のIDを割り当てたいと思います。

私はこのデータを持っているとしましょう。

id yearmonth age 
1 200001  12 
1 200002  12 
1 200003  14 
1 200004  14 
1 200005  14 

3行目は間違いありません。 2.

だから私は、私はこれを行うことができますどのように

id yearmonth age 
1 200001  12 
1 200002  12 
10 200003  14 
10 200004  14 
10 200005  14 

のようにIDを変更したいことによって、その年齢の増加?私は書いて3行目のIDを変更できると思う。

bysort id (yearmonth): replace id=id*10 if age[_n-1]>age+1 | age[_n-1]+1<age 

(where I multiply by 10 because all IDs have the same number of numbers, so that multiplying by 10 won't give any duplicate) 

しかし、後続の行をすべて変更するにはどうすればよいですか?

答えて

1

あなたが持っているものに基づいて、このようなものがあなたが望むことをするかもしれません。

bysort id (yearmonth): generate idchange = age[_n-1]>age+1 | age[_n-1]+1<age 
bysort id (yearmonth): generate numchange = sum(idchange) 
replace id = 10*id + (idchange-1) if idchange>0 

これは、1つの元IDに2つ以上の変更が検出された場合を処理することに注意してください。とにかく10回まで変更できます。

id yearmonth age 
2 200001  12 
2 200002  14 
2 200003  15 
2 200004  18 
2 200005  18 
+0

ありがとうございます。しかし、numchangeは作成され、その後はまったく使用されませんでした。おそらく、3行目のidchangeの2回の出現をnumchangeに置き換えるべきでしょうか? – user42459

関連する問題