批量改名:Stata变量名称变身大法

发布时间:2021-04-30 阅读 144

Stata连享会   主页 || 视频 || 推文 || 知乎

温馨提示: 定期 清理浏览器缓存,可以获得最佳浏览体验。

New! lianxh 命令发布了:
随时搜索推文、Stata 资源。安装命令如下:
. ssc install lianxh
详情参见帮助文件 (有惊喜):
. help lianxh

课程详情 https://gitee.com/lianxh/Course

课程主页 https://gitee.com/lianxh/Course

⛳ Stata 系列推文:

作者: 冷萱(西南财经大学)
邮箱: lx@smail.swufe.edu.cn


目录


1. 背景介绍

数据清理是实证研究过程中最为繁琐的一步,不起眼的变量命名工作都够折腾许久。我们经常需要对 Stata 数据集中的变量进行重命名,一种简单的方式是使用 rename 进行重命名。一般而言,rename 可以满足我们重命名变量的需求,具体用法可以 help rename

但是,数据清理过程中总会遇到千奇百怪的问题,比如我们想把变量的 name 替换为变量的 label,我们想对某些变量 name 批量的加上一些前缀,我们也想对变量中 name 中特定字符进行替换,那么 renvarlab 这个命令能满足我们上述的所有需求。

2. renvarlab 命令介绍

安装 renvarlab

ssc install renvarlab, replace

在成功安装后,输入 help renvarlab 可以查看具体使用语法:

Syntax
        renvarlab [varlist] \ newvarlist [ , display test label ]
        renvarlab [varlist] , transformation_option [ display test symbol(str) label]
        renvarlab [varlist] , label [ display test ]
        where transformation_option is one of

               upper                   lower
               prefix(str)             postfix(str) (synonym suffix(str))
               presub(str1 str2)       postsub(str1 str2)
               subst(str1 str2)
               predrop(#)              postdrop(#)
               trim(#)
               trimend(#)
               map(string exp)

上述语法中,以下这条与 rename 功能一致,可以直接修改变量名称。需要注意的是,rename 通过 () 将修改前后的变量名分别括起来,而 renvarlab 通过\将修改前后的变量名分开。

renvarlab [varlist] \ newvarlist [ , display test label ]

以下这条使用方法是 renvarlab 特有的更改变量名称。通过在,后面添加 label 选项,则可以直接将变量的名称替换为变量的标签。

renvarlab [varlist] , label [ display test ]

3. renvarlab 命令的选项

本文的重点是介绍 renvarlab命令的选项,希望通过阅读本文后,抛弃rename,使用 renvarlab

3.1 变量标签:label 选项

上一节简要概括了 labbel 选项的功能及使用方法,label 选择的功能主要是将变量名称替换为变量标签,可以批量操作。如果有单个或多个变量名称需要更改,则在,前输入需要更换的变量名即可,如果对所有变量进行更换,则可以默认不输入任何变量名称。具体用法如下:

sysuse auto,clear
renvarlab  make , lab
renvarlab  price mpg rep78 , lab
renvarlab   , lab

上述命令分别实现将 make 替换为对应标签;将 price mpg rep78 替换为对应标签;将所有变量名称替换为对应标签。

3.2 大小写:upper 与 lower 选项

这一选项的用法与 rename 一致,将变量名转换为大写或小写。一般而言,lower 选项更为常见,将变量名由大写全部转换为小写字母。具体用法如下:

sysuse auto,clear
renvarlab  make , u
renvarlab   MAKE , l

上述选项中,ul 分别是upperlower 的简写。

3.3 批量重命名前缀和后缀:prefix(str) 与 postfix(str) 选项

这两个选项分别是在变量名称前和变量名称后添加特定的字符,str 可以替换为符合变量命名规则的字符(即变量名不能数字 开头)。这一选项的好处在于,实证分析中可能存在多类别的变量名,比如个体层面,家庭层面和城市层面。为了便于区分,我们可以在个体层面的变量名前面统一添加前缀 ind_ ,在家庭层面变量名前统一添加前缀 fam_ ,在城市层面变量名前统一添加前缀 city_ 。具体用法如下:

sysuse auto,clear
renvarlab  make price mpg ,  prefix(ind_)
renvarlab  rep78 headroom trunk ,  prefix(fam_)
renvarlab   weight length turn displacement gear_ratio foreign ,  prefix(city_)

3.4 变量名关键词替换:subst(str1 str2) 选项

subst(str1 str2) 选项的含义是将变量名中的 str1 替换为 str2 。比如我们想把名称为 log_income,log_consumption 和 log_wage 的变量名替换为 ln_income,ln_consumption 和 ln_wage,则可以进行如下操作:

renvarlab log_income log_consumption log_wage,subs(log ln)

subst(str1 str2) 选项可能同时出现的是 presub(str1 str2)postsub(str1 str2)选项。

  • subst(str1 str2) 是指将变量名中所有的 str1 均替换为 str2

  • presub(str1 str2)是指将变量名第一次出现的 str1 替换为 str2

  • postsub(str1 str2) 是指将变量名最后一次出现的 str1 替换为 str2

  • str2可以为空,即删除 str1

3.5 掐头去尾:predrop(#) 与 postdrop(#) 选项

predrop(#)postdrop(#) 选项含义是将变量名中的前(后)几个字符删除。比如我们想把变量名 update_age,update_male 改变为 age 和 male,则可以使用 predrop(#) 选项,当然也可以使用上一节提到的 subst(str1 str2) 。两个选项使用的具体命令如下:

renvarlab update_age update_male,predrop(7)
renvarlab update_age update_male,subst(update_ )

predrop(#) 对应的是 postdrop(#) 。其用法一致,后者表示删除变量名最后几位字符。

3.6 一刀切:trim(#) 与 trimend(#) 选项

trim(#)trimend(#) 选项含义是仅保留变量名的前(后) # 个字符。这一选项在实践中使用可能较少,因为我们难以保证每个变量名称字符一样。当然某些情况也可以使用,比如我们想把 v1_ndein v2_eds3 v3sd v4_dcldifc v5_nc 替换为 v1 v2 v3 v4 v5,则可以使用 trim(#) 选项,具体用法如下:

renvarlab v1_ndein v2_eds3 v3sd v4_dcldifc v5_nc ,trim(2)

4. 命令汇总

ssc install renvarlab,replace

sysuse auto,clear

renvarlab  make , lab

renvarlab  price mpg rep78 , lab

renvarlab   , lab

sysuse auto,clear

renvarlab  make , u

renvarlab   MAKE , l

sysuse auto,clear

renvarlab  make price mpg ,  prefix(ind_)

renvarlab  rep78 headroom trunk ,  prefix(fam_)

renvarlab   weight length turn displacement gear_ratio foreign ,  prefix(city_)

*以下命令缺少原始数据,无法成功运行

renvarlab log_income log_consumption log_wage,subs(log ln)

renvarlab update_age update_male,predrop(7)

renvarlab update_age update_male,subst(update_ )

renvarlab v1_ndein v2_eds3 v3sd v4_dcldifc v5_nc ,trim(2)

相关课程

免费公开课

最新课程-直播课

专题 嘉宾 直播/回看视频
最新专题 文本分析、机器学习、效率专题、生存分析等
研究设计 连玉君 我的特斯拉-实证研究设计-幻灯片-
面板模型 连玉君 动态面板模型-幻灯片-
面板模型 连玉君 直击面板数据模型 [免费公开课,2小时]
  • Note: 部分课程的资料,PPT 等可以前往 连享会-直播课 主页查看,下载。

课程主页

课程主页

关于我们

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

连享会小程序:扫一扫,看推文,看视频……

扫码加入连享会微信群,提问交流更方便

✏ 连享会-常见问题解答:
https://gitee.com/lianxh/Course/wikis

New! lianxh 命令发布了:
随时搜索连享会推文、Stata 资源,安装命令如下:
. ssc install lianxh
使用详情参见帮助文件 (有惊喜):
. help lianxh