添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
  • 全部 | Stata入门 | Stata教程 | Stata资源 | Stata命令
  • 计量专题 | 论文写作 | 数据分享 | 专题课程
  • 结果输出 | Stata绘图 | 数据处理 | Stata程序
  • 回归分析 | 面板数据 | 交乘项-调节 | IV-GMM
  • 内生性-因果推断 | 倍分法DID | 断点回归RDD | PSM-Matching | 合成控制法
  • Probit-Logit | 时间序列 | 空间计量 | 分位数回归 | 生存分析 | SFA-DEA
  • 文本分析-爬虫 | Python-R-Matlab | 机器学习
  • Markdown | 工具软件 | 其它
  • PDF下载 - 推文合集

    如何简单而又快速地将从 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

  • 专题:数据处理
  • Stata数据处理:批量重命名变量的技巧-rename
  • Stata数据处理:数据框使用教程
  • Stata数据处理:将字符变量编码为数值变量-encoder
  • Stata数据处理:一月有几周?月度和周数据转换
  • Stata数据处理:一文搞定CEIC数据库
  • Stata数据处理:快来更新你的Stata-Workflow
  • Stata数据处理:清洗中国城市建设统计年鉴
  • CFPS数据处理:少儿代答库与成人库匹配
  • Stata数据处理:批量处理被保护的年鉴数据-dxls-txls
  • Stata数据处理:快速合并与编码-encodefrom
  • Stata 数据处理:iefieldkit 命令介绍
  • Stata数据处理:缺失值与多重补漏分析(一)
  • Stata数据处理:缺失值与多重补漏分析(二)
  • Stata数据处理:缺失值与多重补漏分析(三)
  • Stata数据处理:一文读懂微观数据库清理(上)
  • Stata数据处理:一文读懂微观数据库清理(下)
  • Stata数据处理:iebaltab和ieddtab命令介绍-T208
  • Stata数据处理:ietoolkit命令组介绍-T207
  • Stata数据处理:通过API获取经济数据
  • Stata数据处理:超大Excel文档如何读入
  • 滚动吧统计量!Stata数据处理
  • Stata数据处理:各种求和方式一览
  • Stata数据处理:纵横长宽转换-reshape命令一文读懂!(下)-sreshape-fastreshape-xpose
  • Stata数据处理:纵横长宽转换-reshape命令一文读懂!(上)
  • Stata数据处理:纵横长宽转换-reshape的兄弟-gather和spread.md
  • Stata数据处理:字符型日期变量的转换
  • 免费公开课

  • 直击面板数据模型 - 连玉君,时长:1小时40分钟,课程主页Bilibili 站版
  • Stata 33 讲 - 连玉君, 每讲 15 分钟. 课程主页课件Bilibili 站版
  • Stata 小白的取经之路 - 龙志能,时长:2 小时,课程主页
  • 部分直播课 课程资料下载 (PPT,dofiles等)
  • 最新课程-直播课

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

  •