Stata 如何对面板数据中的观察值进行排序?
我在Stata有一个面板数据集,其中有几个国家,每个国家都包含组。我想根据变量var1按国家对这些群体进行排名 我的数据集的结构如下所示,秩列是我想要实现的。请注意,var1在组内确实是常数,它只是另一个变量在组内的平均值Stata 如何对面板数据中的观察值进行排序?,stata,ranking,panel-data,Stata,Ranking,Panel Data,我在Stata有一个面板数据集,其中有几个国家,每个国家都包含组。我想根据变量var1按国家对这些群体进行排名 我的数据集的结构如下所示,秩列是我想要实现的。请注意,var1在组内确实是常数,它只是另一个变量在组内的平均值 --country--|--groupId--|---time----|---var1----|---rank--- 1 | 1 | 1 | 50 | 3 1 | 1 |
--country--|--groupId--|---time----|---var1----|---rank---
1 | 1 | 1 | 50 | 3
1 | 1 | 2 | 50 | 3
1 | 1 | 3 | 50 | 3
1 | 2 | 1 | 90 | 1
1 | 2 | 2 | 90 | 1
1 | 2 | 3 | 90 | 1
1 | 3 | 1 | 60 | 2
1 | 3 | 2 | 60 | 2
1 | 3 | 3 | 60 | 2
2 | 4 | 1 | 15 | 2
2 | 4 | 2 | 15 | 2
2 | 4 | 3 | 15 | 2
2 | 5 | 1 | 10 | 3
2 | 5 | 2 | 10 | 3
2 | 5 | 3 | 10 | 3
2 | 6 | 1 | 80 | 1
2 | 6 | 2 | 80 | 1
2 | 6 | 3 | 80 | 1
我尝试过的选项包括:
sort country groupId
by country (groupId): egen rank = rank(var1)
但是,我无法达到预期的结果。感谢提供数据示例。您的代码有两个问题。一个是,当你想从最高到最低排名时,你需要否定这个参数来排名。第二个是,给定重复次数,您只需要在一次上排名,然后将这些排名复制到其他时间 这适用于您的数据示例,此处编辑为输入代码。有关该原则,请参见Stata tag wiki
clear
input country groupId time var1 rank
1 1 1 50 3
1 1 2 50 3
1 1 3 50 3
1 2 1 90 1
1 2 2 90 1
1 2 3 90 1
1 3 1 60 2
1 3 2 60 2
1 3 3 60 2
2 4 1 15 2
2 4 2 15 2
2 4 3 15 2
2 5 1 10 3
2 5 2 10 3
2 5 3 10 3
2 6 1 80 1
2 6 2 80 1
2 6 3 80 1
end
bysort country : egen wanted = rank(-var) if time == 1
bysort country groupId (time) : replace wanted = wanted[1]
assert rank == wanted
另见