Stata:国泰安数据库变量标签导入妙解-转载自连享会-胡世亮

Stata:国泰安数据库变量标签导入妙解

https://mp.weixin.qq.com/s/on1XzwGAiqU-L6J04sZa3w

作者: 胡世亮 (河海大学)
邮箱:  hushiliang2018@hhu.edu.cn

目录

  • 1.  问题背景

  • 2.  命令安装

  • 3.  实例演示

    • 3.1 导入数据

    • 3.2 变量重命名

    • 3.3 变量加标签

    • 3.4 变量类型转换

    • 关于我们

    •   连享会 · 名师讲坛

 


1.  问题背景

在我们将国泰安数据导入到 Stata 中时,经常会遇到如下图所示问题:

  1. 没有设定第 1 行观测值为变量名。图中变量名是 Excel 原有的列名称 (A,B,C,D ...),故需要解决变量命名 (nrow 和 rename) 问题;

  2. 第 2 行和第 3 行都是中文 (非数值型的字符),需要删除这两行观测,但这两行观测是有信息价值的,可以作为变量的标签名 (labone 和 drop);

  3. 部分变量显然应该是数值型变量,但因为变量观测值中含有非数值型的字符,故需要进行变量类型的转换 (destring)。

接下来,我们将对上述 3 个问题的解决方案进行详细说明。

2.  命令安装

nrow 和 labone 命令安装

*-安装命令
  ssc install nrow, replace
  ssc install labone, replace

nrow 语法

nrow [row#] [, keep varlist(varlist)]
  • row# 将第 # 行的观测值命名为变量名,默认第 1 行;

  • keep 保留第 # 行的观测值,默认删除第 # 行观测值;

  • varlist(varlist) 设定需要重命名的变量,默认对全部变量。

值得注意的是,当第 # 行观测值中存在特殊字符时,如空格、逗号、引号、井号等,nrow 失效。

labone 语法

labone [varlist] [, options]
  • varlist 设定需要添加变量标签的变量列表,默认对全部变量;

  • nrow(numlist) 将第 numlist 行的观测值设为变量标签,其中 numlist 为行号列表,默认第 1 行;

  • concat(concat_strings) 指定字符串连接来自不同行的内容,默认空格连接;

  • 选项 nospace 设定不采用空格连接不同行的内容。

更为详细介绍,请通过 help nrow 和 help labone 命令查看帮助文档。

3.  实例演示

3.1 导入数据

*-示例数据
  clear
  input str20 A     str20 B        str20 C
        "_Stkcd#"   "5Rept@dt"     "Person ID"
        证券代码     统计截止日期    人员ID
        没有单位     没有单位        没有单位
        000529      2009-12-31     30182124
  end

3.2 变量重命名

我们先看一下,如果不去除示例数据集中第 1 行观测值中的特殊符号,直接使用 nrow 命令会出现什么问题。

*-不去除特殊符号情况下重命名
  nrow               // 将变量名重命名为第1行的内容,并删除第1行
  list , clean noobs // 列出结果
           A      _5Rept_dt          C
     证券代码    统计截止日期     人员ID
     没有单位        没有单位   没有单位
      000529     2009-12-31   30182124

可以看到,变量 A 和变量 C 没有成功重命名,而变量 B 虽然成功重命名,但是为了符合 Stata 变量命名的要求,直接在变量开头添加了下划线,且 5Rept@dt 中间的特殊符号被强制替换为 "_"。

为此,我们需采用支持正则表达式的字符型函数解决上述问题,具体如下:

*-去除特殊符号情况下重命名
  *示例数据
  clear
  input str20 A      str20 B        str20 C
       "_Stkcd#"   "5Rept@dt"    "Person ID"
        证券代码  统计截止日期         人员ID
        没有单位      没有单位       没有单位
         000529    2009-12-31      30182124
  end

  *去除第1行非字母符号
  foreach var of varlist _all{
	replace `var' = ustrregexra(`var', "[^a-zA-Z]", "",.) in 1
  }
  
  *重命名并列示结果
  nrow
  list, clean noobs
       Stkcd        Reptdt   PersonID
     证券代码   统计截止日期     人员ID
     没有单位       没有单位   没有单位
      000529     2009-12-31  30182124

可以看到,原变量 ABC 都成功被重命名为第 1 行观测值的内容。

Note: 关于正则表达式的使用,请参考「Stata: 正则表达式和文本分析」和「正则表达式语言 - 快速参考」。

温馨提示: 文中链接在微信中无法生效,请点击底部「阅读原文」。

3.3 变量加标签

采用 labone 命令可以方便快捷地将指定行的观测值设为变量标签。

*-变量标签
  rename _all, lower            //将变量中大写字母改为小写
  labone, nrow(1 2) concat("_") //将第1行和第2行设置为标签名,并用_连接
  describe
Contains data
  obs:             3
 vars:             3
-------------------------------------------------------------------
              storage   display    value
variable name   type    format     label      variable label
-------------------------------------------------------------------
stkcd           str20   %20s                  证券代码_没有单位
reptdt          str20   %20s                  统计截止日期_没有单位
personid        str20   %20s                  人员ID_没有单位
-------------------------------------------------------------------
Sorted by:
     Note: Dataset has changed since last saved.

3.4 变量类型转换

最后,采用 drop 命令和 destring 命令完成数据删除和类型转换。

*-数据删减和类型转换
  drop in 1/2            //删除前2行观测值
  destring _all, replace //将变量转换成数值型变量
  format stkcd %06.0f    //股票代码6位数显示
  list, clean noobs      //列示结果
     stkcd       reptdt   personid
    000529   2009-12-31   30182124

至此,我们可以巧妙使用 nrow + labone 命令组合去解决文章开头遇到的问题。

   


🍏 🍏 🍏 🍏
连享会主页:🍎 www.lianxh.cn
直播视频:lianxh.duanshu.com

免费公开课:

  • 直击面板数据模型:https://gitee.com/arlionn/PanelData - 连玉君,时长:1小时40分钟

  • Stata 33 讲:https://gitee.com/arlionn/stata101 - 连玉君, 每讲 15 分钟.

  • 部分直播课课程资料下载 👉 https://gitee.com/arlionn/Live (PPT,dofiles等)

  • 5
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值