Stata数据处理:快速转换Wind数据-reshapewind

发布时间:2022-12-17 阅读 703

Stata连享会   主页 || 视频 || 推文 || 知乎 || Bilibili 站

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

New! lianxh 命令发布了:
随时搜索推文、Stata 资源。安装:
. ssc install lianxh
详情参见帮助文件 (有惊喜):
. help lianxh
连享会新命令:cnssc, ihelp, rdbalance, gitee, installpkg

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

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

⛳ Stata 系列推文:

PDF下载 - 推文合集

作者:马超雄 (江西财经大学)
邮箱emperorheart@qq.com


目录


如何简单而又快速地将从 Wind 数据库或者 Choice 金融终端下载的年度、季度数据转化为计量经济学所要求的面板数据类型,一直是实证分析中一个不可避免的问题。为此,笔者遵循简单原则,将机械重复的处理过程封装进 reshapewind 命令中,以此来帮助同学们更加高效地完成数据处理。

1. 安装命令

在 Stata 的控制台依次输入以下两行命令,进行安装。Stata 版本要求为 15.0 及以上。

ssc install gitee, replace
gitee install EmperorHeart/reshapewind, replace

第一行是通过 ssc 命令下载 gitee 命令。

第二行是通过 gitee 命令下载 reshapewind 的相关代码 (包括改名用的 renvarlab 命令和转换用的 fastreshape 命令),即从 https://gitee.com/EmperorHeart/reshapewind 处下载相关代码。

2. 导入数据

数据直接从 Wind 或 Choice 下载后,未经人为修改的前提下,基本是满足要求的。具体来说,需要满足以下要求:

  • 如果从 Wind 中下载,需要有 证券代码 和 证券简称 两个变量。如果是从 Choice 下载,需要有 证券代码证券名称 两个变量。
  • 变量名中至多存在一个时间标识。例如,不存在时间标识的变量 (上市地点组织形式主营业务...),存在一个时间标识的变量名 (流动比率 [报告期] 2010 一季流动比率 [报告期] 2010 中报流动比率 [报告期] 2010 三季...) ,存在两个及以上的时间标识将会识别失败。
  • 所有变量的时间区间应该是一样的。例如,变量都是从 2010 年至 2020 年,如果有一个变量是 2011 年至 2020 年,将会导致转化错误。

为了演示命令的完整性,本文使用从 Choice 数据库下载的数据演示 (事实上,该命令与从 Wind 数据库下载的数据的兼容性更高),导入 .xlsx 格式的数据代码示例如下:

. * 数据地址:https://gitee.com/EmperorHeart/reshapewind
. import excel using "全部A股年度.xlsx", clear first   // 导入年度数据
. import excel using "全部A股季度.xlsx", clear first   // 导入季度数据

以下分别展示年度和季度的原始数据的导入截图。

Note:导入数据后,数据为红色还是黑色对 reshapewind 命令使用无影响。红色数据为字符型变量,黑色数据为数值型变量,只有“加速”时才需要关注这两种格式。

3. 运行命令

命令格式如下:

reshapewind TimeType [Speed]

TimeType 是指数据是季度数据还是年度数据类型。如果是年度数据类型,可以使用以下两种方式中任意一种进行转化。

reshapewind y
reshapewind year

如果是季度数据类型,可以使用以下两种方式中任意一种进行转化。

reshapewind q
reshapewind quarter

Speed 是可以加速转化的标识,可有可无。可以填写 speed 或者 s 来进行加速。加速条件是同一变量下的数据类型必须一致。例如,货币资金变量在 2016 年-2017 年是红色字符型变量,但是在 2018 年- 2020 年却是黑色数值型变量,同一变量 (货币资金) 下,出现了两种数据类型,不满足加速条件。

经过笔者测试,从 Wind 数据库下载的数据一般导入后是满足加速条件的,从 Choice 数据库下载的数据导入后是不满足加速条件的,原因在于 Choice 使用 来表示缺失值,而 Wind 使用空值表示缺失值,Stata 会将存在 的数据列视为字符型变量来处理,只需转化成同一类型即可满足加速条件。

数值型变量与字符型变量的相互转化代码如下:

tostring Var, force replace   // 数值型变量 Var 转化为字符型变量
destring Var, force replace   // 字符型变量 Var 转化为数值型变量

reshapewind q s   // 满足加速要求后,对季度数据转化进行加速
reshapewind y s   // 满足加速要求后,对年度数据转化进行加速

4. 结果展示

本文将分别以年度数据和季度数据为例进行转换,并比较 reshapewind 在加速模式和不加速模式下的运行时间和运行结果来展现两种模式下的差异性。

4.1 以年度数据为例

不加速模式:运行时间为 0.74 秒,结果如下图所示。

. * 数据地址:https://gitee.com/EmperorHeart/reshapewind
. import excel using "全部A股年度.xlsx", clear first   // 导入年度数据
. timer clear 1   // 删除第一个记录时间的计时器
. timer on 1      // 第一个计时器,按下开始键
. reshapewind y   // 放测试程序的地方
. timer off 1     // 第一个计时器,按下停止键
. timer list 1    // 查看第一个计时器上记录的数值,因电脑而异
   1:      0.74 /        1 =       0.7430

加速模式:由于加速模式需要考虑加速条件,如果冒然使用,可能会出现如下状况。

. import excel using "全部A股年度.xlsx", clear first   // 导入年度数据
. reshapewind y s 
variable 货币资金元 is str17 in master but double in using data
    You could specify append's force option to ignore this string/numeric mismatch.  
    The using variable would then be treated as if it contained "".
r(106);

上述错误说明变量不符合加速条件,可以重新导入数据,使用不加速模式或者使其满足加速条件后,再使用加速模式。本文采用第二种方案,代码如下。

. import excel using "全部A股年度.xlsx", clear first   // 导入年度数据
. destring 货币资金*, force replace
. timer clear 1
. timer on 1
. reshapewind y s  // 后面加 s 或者 speed,表示采用加速模式
. timer off 1
. timer list 1
   1:      0.10 /        1 =       0.0990

可以看出,交易性金融资产拆出资金 这两个变量是红色的字符型变量,原因在于这两列存在 “—”,在转换之前 Stata 将其识别成字符型,加速模式转换后仍然是字符型,而货币资金已经被我们转化为数值型变量,转换后仍然是数值型变量。为了进一步进行数据分析,需要用户使用 destring 命令手动转化这两个变量为数值型变量。

. destring 交易性金融资产 拆出资金, force replace

4.2 以季度数据为例

不加速模式:运行时间为 8.59 秒,结果如下图所示。

. import excel using "全部A股季度.xlsx", clear first   // 导入季度数据
. timer clear 1   
. timer on 1      
. reshapewind q   
. timer off 1    
. timer list 1    
   1:      8.59 /        1 =       8.5890

​在季度数据转换成功后,生成 yearqquarter 等三列数据。其中 quarter 列是时间类变量,可以直接定义面板数据。

加速模式:运行时间为 1.92 秒,季度数据转化结果如下图所示。对于红色字符变量,需要使用 destring 命令转换,此处不再赘述。

. import excel using "全部A股季度.xlsx", clear first   // 导入季度数据
. timer clear 1   
. timer on 1      
. reshapewind q s  
. timer off 1    
. timer list 1    
   1:      1.92 /        1 =       1.9180

5. 总结

优点

  • 简单:需要填写的参数至多两个。
  • 高效:reshapewind 的原理是先用正则表达式对所有变量进行改名,然后使用 fastreshape 命令进行转化。相较基于 gather 命令、reshape 的数据转换命令,更为高效。特别是加速情况下的 reshapewind
  • 一步到位:在不加速的情况下,reshapewind 处理数据后,会自动转换变量的数据类型使其具有合理性。加速的情况下,reshapewind 命令不会自动转化至合理状态 (可以使用 destringtostring 命令来进行手动转化)。
  • 下载方便:代码命令是基于国内 gitee 平台进行托管,下载方便、稳定,演示数据可以在 https://gitee.com/EmperorHeart/reshapewind 处下载。

缺点

  • 不支持月度数据。这主要是因为该命令专注于财务报表类数据,因此缺少应用场景,导致未开发出月度数据类型。
  • 不能对含有两个及以上时间标识的变量名进行直接转化。例如 资本充足率(2013)(%) 2020 一季度合并报表。该变量名中含有两个年份,导致用正则提取失效。解决方案为,在 Excel 中将 (2013) 替换成空值,保存后重新导入 Stata,再使用 reshapewind 命令进行转换即可。

经过大量实验的同学可能已经发现,使用季度命令也能转化年度数据,即 reshapewind q 这条命令,可以应对年度和季度的数据,也可以应对不满足加速条件的数据。因此,未来可能将会去除数据频率的参数设定,甚至去除加速模式的设定,但与之带来的降速问题令人感到棘手。

6. 相关推文

Note:产生如下推文列表的 Stata 命令为:
lianxh 数据处理, m
安装最新版 lianxh 命令:
ssc install lianxh, replace

相关课程

免费公开课

最新课程-直播课

专题 嘉宾 直播/回看视频
最新专题 文本分析、机器学习、效率专题、生存分析等
研究设计 连玉君 我的特斯拉-实证研究设计-幻灯片-
面板模型 连玉君 动态面板模型-幻灯片-
面板模型 连玉君 直击面板数据模型 [免费公开课,2小时]
  • Note: 部分课程的资料,PPT 等可以前往 连享会-直播课 主页查看,下载。

课程主页

课程主页

关于我们

  • Stata连享会 由中山大学连玉君老师团队创办,定期分享实证分析经验。
  • 连享会-主页知乎专栏,700+ 推文,实证分析不再抓狂。直播间 有很多视频课程,可以随时观看。
  • 公众号关键词搜索/回复 功能已经上线。大家可以在公众号左下角点击键盘图标,输入简要关键词,以便快速呈现历史推文,获取工具软件和数据下载。常见关键词:课程, 直播, 视频, 客服, 模型设定, 研究设计, stata, plus, 绘图, 编程, 面板, 论文重现, 可视化, RDD, DID, PSM, 合成控制法

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

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

✏ 连享会-常见问题解答:
https://gitee.com/lianxh/Course/wikis

New! lianxhsongbl 命令发布了:
随时搜索连享会推文、Stata 资源,安装命令如下:
. ssc install lianxh
使用详情参见帮助文件 (有惊喜):
. help lianxh