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 行观测值为变量名。图中变量名是 Excel 原有的列名称 (A,B,C,D ...),故需要解决变量命名 (
nrow
和rename
) 问题; -
第 2 行和第 3 行都是中文 (非数值型的字符),需要删除这两行观测,但这两行观测是有信息价值的,可以作为变量的标签名 (
labone
和drop
); -
部分变量显然应该是数值型变量,但因为变量观测值中含有非数值型的字符,故需要进行变量类型的转换 (
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
可以看到,原变量 A,B,C 都成功被重命名为第 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等)