本文将介绍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
的速度优势越明显。