本文将介绍STATA中排序的方法。
最常用的排序方法是 egen命令中提供的 rank函数, 基本用法:
sysuse auto,clear
by foreign: egen mpg_rank = rank(mpg)值得一提的是 rank函数有多种给相同数值的观察值排序的方法,而默认的处理方法的结果如下;

当我们希望得到的排名是唯一的时,可以选择 unique选项:
by foreign: egen mpg_rank = rank(mpg),unique
另外一种排序方法是使用STATA提供的 _n方法:
bysort foreign (mpg): gen mpg_rank_alt = ///
                      sum((mpg!=mpg[_n-1]) )首先,这种方法得到的排序结果和前两种都不同,并不是传统意义上的排序,但是仍然可能在某些特殊场合需要用到。结果如下:

其次,这里使用的是 gen而非 egen,这样 sum函数得到的就是累计加总。
最后, mpg!=mpg[_n-1]指的是当该观察值和前一观察值不同时取1,相同时取0。这样累加就得到了想要的结果。
另一类和排序相关的操作是生成变量的百分位数。STATA提供了 xtile函数来实现生成百分位数的变量(需要安装 egenmore后才可以实现 xtile和 by联合使用)。
by foreign: egen mpg_ptile = ///
            xtile(mpg), nq(100)
另外一种方法是使用 _n方法,具体代码:
bysort foreign (mpg): gen mpg_ptile_alt = ///
 =                        int(100*(_n-1)/_N)+1replace mpg_ptile_alt = mpg_ptile_alt[_n-1] ///                                                              if mpg == mpg[_n-1]排序结果和使用 xtile的结果完全一致,但是当样本数量越大时,使用 _n的速度优势越明显。
