Stata 如何对面板数据中的观察值进行排序?

Stata 如何对面板数据中的观察值进行排序?,stata,ranking,panel-data,Stata,Ranking,Panel Data,我在Stata有一个面板数据集,其中有几个国家,每个国家都包含组。我想根据变量var1按国家对这些群体进行排名 我的数据集的结构如下所示,秩列是我想要实现的。请注意,var1在组内确实是常数,它只是另一个变量在组内的平均值 --country--|--groupId--|---time----|---var1----|---rank--- 1 | 1 | 1 | 50 | 3 1 | 1 |

我在Stata有一个面板数据集,其中有几个国家,每个国家都包含组。我想根据变量var1按国家对这些群体进行排名

我的数据集的结构如下所示,秩列是我想要实现的。请注意,var1在组内确实是常数,它只是另一个变量在组内的平均值

--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 
另见