Stata如何删除地址重复的个案,只保留id最小的那个观测?

五一前正在出差去贵州的高铁上接到一位EpiMan坛友的咨询,具体内容如下:

我想实现“删除地址重复的个案,只保留id最小的那个观测” Stata code怎么写啊?我在网上看的code 是给重复观测 重新分配一个随机数 然后删掉随机数>1 的 不太符合要求。

id addr keep
3 2 Y
4 2 N
5 2 N
1 1 Y
2 1 N
6 3 Y
7 3 N

当初手机上回复的思路:

这个应该不难。 先bys 地址 id,然后每个地址生成一个变量从1-N,保留1的记录。

结果测试总是不成功,最后她使用gemini解决的,但是代码比较繁琐。 今天晚上闲下来,我电脑上测试了一下,发现当初手误,bys第二个变量id少了一对括弧。

以下是演示过程:
1️⃣ 载入数据

 //载入Stata演示数据
input id addr
3	2
4	2
5	2
1	1
2	1
6	3
7	3
end
list ,sepby(addr)

2️⃣ 生成变量

 //每个地址按id生成一个变量从1-n
bys  addr (id): gen wanted=_n
list ,sepby(addr)

3️⃣ 删除记录

 //保留值为1的记录
keep if wanted==1
list ,sepby(addr)
drop wanted

这里最关键就是bysort命令: bysort varlist1 [(varlist2)] [, rc0]: stata_cmd,意思是按照变量1 变量2进行排序,就是先按变量1排序,然后变量1里的记录再按照变量2排序。

以下是Stata的官方解释:

The varlist1 (varlist2) syntax is of special use to programmers. It verifies that the data are sorted by varlist1 varlist2 and then performs a by as if only varlist1 were specified.

For instance,

by pid (time): generate growth = (bp – bp[_n-1])/bp

performs the generate by values of pid but first verifies that the data are sorted by pid and time within pid.

完,本文内容交流请移步:https://www.epiman.cn/thread-294619-1-1.html