Stata 如果在第n行发生了某些事情,则将ID从第n行更改为最后一行

Stata 如果在第n行发生了某些事情,则将ID从第n行更改为最后一行,stata,Stata,我的数据有些问题。这项调查是针对住房单位进行的。因此,具有同一个人ID的两行可能实际上并不表示同一个人 我想为不同的人分配不同的ID 假设我有这些数据 id yearmonth age 1 200001 12 1 200002 12 1 200003 14 1 200004 14 1 200005 14 第三排绝对是不同的人。它的年龄增加了2岁 所以我想换个身份证 id yearmonth age 1 200

我的数据有些问题。这项调查是针对住房单位进行的。因此,具有同一个人ID的两行可能实际上并不表示同一个人

我想为不同的人分配不同的ID

假设我有这些数据

id  yearmonth  age 
1   200001      12
1   200002      12
1   200003      14
1   200004      14
1   200005      14
第三排绝对是不同的人。它的年龄增加了2岁

所以我想换个身份证

id  yearmonth  age 
1   200001      12
1   200002      12
10   200003      14
10   200004      14
10   200005      14
我该怎么做?我想我可以通过书写更改第三排的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)

但是我如何才能更改所有后续行呢?

基于您所拥有的,类似这样的操作可能会满足您的需要

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

非常感谢。但numchange是创建的,然后根本没有使用。也许第三行中出现的两个idchange应该替换为numchange?
id  yearmonth  age 
2   200001      12
2   200002      14
2   200003      15
2   200004      18
2   200005      18