赞
踩
https://mp.weixin.qq.com/s/on1XzwGAiqU-L6J04sZa3w
作者: 胡世亮 (河海大学)
邮箱: hushiliang2018@hhu.edu.cn
目录
1. 问题背景
2. 命令安装
3. 实例演示
3.1 导入数据
3.2 变量重命名
3.3 变量加标签
3.4 变量类型转换
关于我们
连享会 · 名师讲坛
在我们将国泰安数据导入到 Stata 中时,经常会遇到如下图所示问题:
没有设定第 1 行观测值为变量名。图中变量名是 Excel 原有的列名称 (A,B,C,D ...),故需要解决变量命名 (nrow
和 rename
) 问题;
第 2 行和第 3 行都是中文 (非数值型的字符),需要删除这两行观测,但这两行观测是有信息价值的,可以作为变量的标签名 (labone
和 drop
);
部分变量显然应该是数值型变量,但因为变量观测值中含有非数值型的字符,故需要进行变量类型的转换 (destring
)。
接下来,我们将对上述 3 个问题的解决方案进行详细说明。
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
命令查看帮助文档。
- *-示例数据
- clear
- input str20 A str20 B str20 C
- "_Stkcd#" "5Rept@dt" "Person ID"
- 证券代码 统计截止日期 人员ID
- 没有单位 没有单位 没有单位
- 000529 2009-12-31 30182124
- end
我们先看一下,如果不去除示例数据集中第 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
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
- Stkcd Reptdt PersonID
- 证券代码 统计截止日期 人员ID
- 没有单位 没有单位 没有单位
- 000529 2009-12-31 30182124
可以看到,原变量 A,B,C 都成功被重命名为第 1 行观测值的内容。
Note: 关于正则表达式的使用,请参考「Stata: 正则表达式和文本分析」和「正则表达式语言 - 快速参考」。
温馨提示: 文中链接在微信中无法生效,请点击底部「阅读原文」。
采用 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.
最后,采用 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
命令组合去解决文章开头遇到的问题。
本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/534544
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。