前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >排序及生成百分位数

排序及生成百分位数

作者头像
宋彦
发布2019-07-03 16:59:21
5.7K0
发布2019-07-03 16:59:21
举报
文章被收录于专栏:一点ECON一点ECON

前言

本文将介绍STATA中排序的方法。

Rank 函数

最常用的排序方法是 egen命令中提供的 rank函数, 基本用法:

代码语言:javascript
复制
sysuse auto,clear
by foreign: egen mpg_rank = rank(mpg)

值得一提的是 rank函数有多种给相同数值的观察值排序的方法,而默认的处理方法的结果如下;

当我们希望得到的排名是唯一的时,可以选择 unique选项:

代码语言:javascript
复制
by foreign: egen mpg_rank = rank(mpg),unique

使用_n排序

另外一种排序方法是使用STATA提供的 _n方法:

代码语言:javascript
复制
bysort foreign (mpg): gen mpg_rank_alt = ///
                      sum((mpg!=mpg[_n-1]) )

首先,这种方法得到的排序结果和前两种都不同,并不是传统意义上的排序,但是仍然可能在某些特殊场合需要用到。结果如下:

其次,这里使用的是 gen而非 egen,这样 sum函数得到的就是累计加总。 最后, mpg!=mpg[_n-1]指的是当该观察值和前一观察值不同时取1,相同时取0。这样累加就得到了想要的结果。

使用xtile生成百分位数

另一类和排序相关的操作是生成变量的百分位数。STATA提供了 xtile函数来实现生成百分位数的变量(需要安装 egenmore后才可以实现 xtileby联合使用)。

代码语言:javascript
复制
by foreign: egen mpg_ptile = ///
            xtile(mpg), nq(100)

使用_n生成百分位数

另外一种方法是使用 _n方法,具体代码:

代码语言:javascript
复制
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的速度优势越明显。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-10-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 一点ECON 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • Rank 函数
  • 使用_n排序
  • 使用xtile生成百分位数
  • 使用_n生成百分位数
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档