Stata数据处理:用-astile-快速创建分组

发布时间:2020-10-07 阅读 27

Stata 连享会   主页 || 视频 || 推文

温馨提示: 定期 清理浏览器缓存,可以获得最佳浏览体验。

课程详情 https://gitee.com/arlionn/Course   |   lianxh.cn

课程主页 https://gitee.com/arlionn/Course

作者:侯新烁 (湘潭大学)
邮箱:houxinshuo@126.com


目录


编者按: 本期给大家介绍一个根据变量信息快速创建分组的命令 astile ,推文内容根据 fintechprofessor 网站提供的介绍短文整理而成,并对命令作用和安装等进行了补充说明,通过示例帮助大家如何快速实现数据分组。

原文地址:http://fintechprofessor.com/create-portfolios-in-stata-using-astile/

程序作者:Attaullah Shah attaullah.shah@imsciences.edu.pk

1. astile : 一个简明介绍

astile 可根据已有变量创建一个按 1 到 n 的等级排列的分级变量。例如,我们可能有兴趣创建 10 个以公司大小为基础区分的公司分级组合。也就是将包含最小 10% 数值的公司设定为第 1 组,接下来的 10% 设定为第 2 组,依次类推, astile 新建了一个新变量数值在 1,2,3... 直到 n 之间变化,其中 n 是分组数的最大值,在 nq() 选项中予以指定。例如,如果我们想创建 10 个分组,新的变量的数值会在 1 到 10 之间。

astile 比 state 官方提供的 xtile 命令处理速度更快。 它的高效性在数据集较大或者当分组类别被多次创建时更加明显,比如说,我们可能需要根据每个年份或者月份分别创建分组。与 state 官方命令 xtile 不同,astile 是 byable 的,意即可以通过 bys 命令分组进行多维变量的分组生成。astile 处理分组运算时超级有效率。比如说,在在使用 bys 和不使用 bys 的情况下去处理有一百万观测值和 1000 个组别的数据时,通常只有几秒钟的时间差异。

2. astile : 版本与更新

该命令的作者对 astile 的功能和使用上进行了调整形成多个版本,本次推文是基于其最新版本 ( 3.2.2 : 17Apr2018 )展开,因此使用前需查看其版本信息,并进行更新。

可使用 viewsource 或者 adoedit 查看该命令的创建和版本信息

viewsource  astile.ado
*! 3.0.0  :  1Apr2017 , Added speed efficiency
*! Author : Attaullah Shah: attaullah.shah@imsciences.edu.pk
* In this current version, I have added more speed efficiency
* Also, this version fixes bugs related to [IF] and [IN] options when used with by(varlist)
* Verion 	2.0.0 	12Mar2017
*! Version 	1.0.0	 27Jun2015

以上信息说明已安装命令并非最新版本,使用如下命令进行更新

ssc install astile,replace
*! 3.2.2   : 17Apr2018, fixed a bug that would occur when IF and BYS were used together
*! 3.2.1   : 09Nov2017, added option qc (quantile criteria) for making qunatile boundaries on a given criteria
*! Author  : Attaullah Shah: attaullah.shah@imsciences.edu.pk
*! 3.0.0   : 1Apr2017 , Added speed efficiency
*! Version : 2.0.0 	12Mar2017
*! Version : 1.0.0	 27Jun2015

3. Stata 应用案例

3.1 案例 1:根据公司的市场价值创建10个分组

在这个例子中,我们将使用 grunfeld.dta 数据集,并从 stata 的服务器下载该数据。

. webuse grunfeld 
. astile size10 = mvalue,  nq(10)

在以上命令中,我们生成了一个名为 size10 的新变量,其取值从 1 到 10 。数值的排序是基于现有变量 mvalue 生成。 在逗号之后,我们设定选项 nq(10) ,让 astile 生成 10 个分组。如果我们想要生成 20 个组,那么选项将是 nq(20)

3.2 案例 2:各年重复分级

若想要根据公司的市场价值按年份分别生成 5 个组别,可以使用 bysort 或者 bys 选项完成这个任务。这次我们把新变量命名为 size5

. webuse grunfeld 
. bys year : astile size5   = mvalue, nq(5)
. * 或者使用如下命令,效果相同
.            astile size5_2 = mvalue, nq(5) by(year)

3.3 案例 3:在数据子集上创建分位数断点

如果分位数断点需要以数据的子集为基础的话,我们可以用选项 qc() ,然后整个数据集中的观察值被分配给这些断点。这样的计算在检验资产定价模型中是很常见的。股票的分组在金融分析中通常是一个标准程序。研究者们经常使用诸如公司规模、账面市值比、投资额等变量进行股票的分组。也有少数研究者用工资的子样本去计算数据的十分位数断点,然后将公司分配给不同的分位组别。比如说:一个人可能会根据约证券交易所上市股票的市值排名确定各不同十分位数组段的断点值,然后将将纽约证券交易所、美国证券交易所和纳斯达克的所有公开交易股票分别分配到其中的一个分组中。使用 astile 实现上述操作将非常容易。

让我们用一个例子说明它是如何实现的。首先,我们生成一个虚拟数据集,创建 500 个公司从 1951 到 2050 总计 100 年的数据,以及这500家公司对应的三家证券交易所:纽约证券交易所、美国证券交易所和纳斯达克。最后,生成一个各年各家公司有差异的市场资本化变量( MarkCap )。

. clear
. set obs 500
. gen company=_n
. expand 100
. bys company: gen year=_n+1950
. bys company: gen xc=mod(company, 3)+1
. gen exchange = cond(xc==1, "NYSE", cond(xc==2, "AMEX", "NASDAQ"))
. gen MarkCap=uniform()*10000

此时,我们将根据纽约证券交易所上市的公司的 MarkCap 变量设定断点值,然后并将所有股票对应的公司分配到不同的分位数组别中去。

. bys year: astile size = MarkCap, qc(exchange =="NYSE") nq(10)

此时,我们可以根据变量分组进行一些结果展示。

. tab size
. tab size if exchange =="NYSE"

4. 示例代码汇总

. clear
. set obs 500
. gen company=_n
. expand 100
. bys company: gen year=_n+1950
. bys company: gen xc=mod(company, 3)+1
. gen exchange = cond(xc==1, "NYSE", cond(xc==2, "AMEX", "NASDAQ"))
. gen MarkCap=uniform()*10000
. replace MarkCap = MarkCap+2000 if exchange =="NYSE"

.           astile size01   = MarkCap,  nq(10)
. bys year: astile size02   = MarkCap,  nq(10)
.           astile size02_2 = MarkCap,  nq(10) by(year)
. bys year: astile size03   = MarkCap,  nq(10) qc(exchange =="NYSE") 
.           astile size03_2 = MarkCap,  nq(10) qc(exchange =="NYSE")  by(year)

. tab2 size01 size02 size03
. tab  size03
. tab  size03 if exchange =="NYSE"

后记:有了 astile ,想分几组分几组!!

相关课程

连享会-直播课 上线了!
http://lianxh.duanshu.com

免费公开课:


课程一览

支持回看,所有课程可以随时购买观看。

专题 嘉宾 直播/回看视频
最新专题 DSGE, 因果推断, 空间计量等
Stata数据清洗 游万海 直播, 2 小时,已上线
研究设计 连玉君 我的特斯拉-实证研究设计-幻灯片-
面板模型 连玉君 动态面板模型-幻灯片-
面板模型 连玉君 直击面板数据模型 [免费公开课,2小时]

Note: 部分课程的资料,PPT 等可以前往 连享会-直播课 主页查看,下载。


关于我们

  • Stata连享会 由中山大学连玉君老师团队创办,定期分享实证分析经验。直播间 有很多视频课程,可以随时观看。
  • 连享会-主页知乎专栏,300+ 推文,实证分析不再抓狂。
  • 公众号推文分类: 计量专题 | 分类推文 | 资源工具。推文分成 内生性 | 空间计量 | 时序面板 | 结果输出 | 交乘调节 五类,主流方法介绍一目了然:DID, RDD, IV, GMM, FE, Probit 等。
  • 公众号关键词搜索/回复 功能已经上线。大家可以在公众号左下角点击键盘图标,输入简要关键词,以便快速呈现历史推文,获取工具软件和数据下载。常见关键词:课程, 直播, 视频, 客服, 模型设定, 研究设计, stata, plus, 绘图, 编程, 面板, 论文重现, 可视化, RDD, DID, PSM, 合成控制法

连享会主页  lianxh.cn
连享会主页 lianxh.cn

连享会小程序:扫一扫,看推文,看视频……

扫码加入连享会微信群,提问交流更方便

✏ 连享会学习群-常见问题解答汇总:
https://gitee.com/arlionn/WD