当前位置:   article > 正文

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

labone怎么安装

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 命令安装

  1. *-安装命令
  2. ssc install nrow, replace
  3. 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 导入数据

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

3.2 变量重命名

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

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

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

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

  1. *-去除特殊符号情况下重命名
  2. *示例数据
  3. clear
  4. input str20 A str20 B str20 C
  5. "_Stkcd#" "5Rept@dt" "Person ID"
  6. 证券代码 统计截止日期 人员ID
  7. 没有单位 没有单位 没有单位
  8. 000529 2009-12-31 30182124
  9. end
  10. *去除第1行非字母符号
  11. foreach var of varlist _all{
  12. replace `var' = ustrregexra(`var', "[^a-zA-Z]", "",.) in 1
  13. }
  14. *重命名并列示结果
  15. nrow
  16. list, clean noobs
  1. Stkcd Reptdt PersonID
  2. 证券代码 统计截止日期 人员ID
  3. 没有单位 没有单位 没有单位
  4. 000529 2009-12-31 30182124

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

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

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

3.3 变量加标签

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

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

3.4 变量类型转换

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

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

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

   


本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/534544

推荐阅读
相关标签