查看原文
其他

给变量名换马甲之rename命令

爬虫俱乐部 Stata and Python数据分析 2022-03-15

本文作者:方   言

文字编辑:王玉婷

技术总编:余术玲

爬虫俱乐部云端课程

爬虫俱乐部于2020年8月25日至28日在线上举行的Stata数据分析法律与制度专题训练营招生工作圆满结束!

    另外,爬虫俱乐部于2020年7月在线上举办的Stata与Python编程技术训练营已圆满结束。应广大学员需求,我们的课程现已在腾讯课堂双双上线,且继续提供答疑服务。现在关注公众号并在朋友圈转发推文《来腾讯课堂学Stata和Python啦!》,即可获得600元课程优惠券,集赞50个再领200元课程优惠劵!(截图发至本公众号后台领取)原价2400元的课程,现在只要1600元

1、前言

在用Stata进行数据分析时,我们需要对相关变量进行命名,这里我们就需要借助Stata的重命名命令——renamerename命令可以成功地将内存中原有的变量名称重新命名为我们想要的变量名称。通过使用rename命令,我们可以对单个变量进行重命名,也可以批量重命名(rename group),有助于在重命名时帮助我们省下很多功夫。

2、rename命令的语法及应用

rename命令是Stata中相对来说比较简单的命令,我们可以通过help来查看一下rename中的相关内容。通过help rename 可以获取到该命令的相关语法如下:
1)重命名单个变量
rename old new [, options1]
2)重命名多个变量名
rename (old1 old2 ...) (new1 new2 ...) [, options1]
3)改变多个变量名大小写
rename old1 old2 ..., {upper|lower|proper} [options2]
upper
:将所有变量名的所有字母变成大写。
lower
:将所有变量名的所有字母变成小写。
proper
:将所有变量名的首字母大写,其他字母小写。

在介绍了rename的相关语法之后,我们通过简单的案例来运用rename命令,以便我们更直观地感受rename命令的用法。

(1)单变量重命名

在进行变量重命名之前,我们先向内存中输入数据,这里我们需要借助input命令:
clear allinput v1 age1 132 153 14end
在利用input输入的数据中,v1和age分别是两个变量名,如果我们想要将v1改为students,可以利用rename进行重命名:
rename v1 students
运行结果如下图所示:

2)多变量重命名

为了更直观的感受到rename的用法,我们这里引入系统自带的auto数据进行举例:
clear allsysuse auto,clearrename (price weight length) (价格 重量 长度)
系统自带的auto数据中,变量的名称中包含priceweightlength,这时我们希望将这里的三个变量名重命名为中文的价格、重量和长度,我们可以利用rename对多个变量进行重命名。与单变量命名不同,多变量命名需要将旧变量和新变量用括号加以区分,运行结果如下图所示:

除了批量重命名旧变量以外需要加括号,这里的括号还可以在对变量名位置进行替换的时候引用:
rename (rep78 trunk) (trunk rep78)
运行结果如图:

这里我们可以看到,两个变量名成功实现了换位。

3、通配符

(一)通配符的含义

rename命令和通配符"*","?","#","="配合使用,能够实现对有规律变量名的批量更改。所谓通配符,即通用的字符,能够匹配或替换任意字符。一般情况下,通配符用以进行模糊搜索,即无法精确到每个字符时,通配符的作用就显现出来了。比如我们如果需要重命名的变量非常多,如果不使用通配符,就需要将所有的变量名键入到Stata中再进行更改,但是通配符就可以很好的解决批量修改变量名时变量名过多的问题。在Stata中,与rename命名经常搭配的通配符有"*","?","#",其使用规则是:"*"代表0个或多个字符;"#"的功能类似于"*",主要区别在于"#"用于匹配数字,代表1个或多个数字;"?"的功能类似于"*"主要区别在于"?"仅代表一个字符。

(二)通配符的应用

为了帮助大家更好的理解,我们下面通过几个例子来介绍一下通配符的使用。

(1)通配符"*"的使用

如果我们要批量修改有规律的变量名,可以通过通配符的方式进行。首先,我们读入系统的数据都是以v开头的变量:
clear allinput va vb vc vd ve vf vg vh1 2 3 4 5 6 7 89 10 11 12 13 14 15 1617 18 19 20 21 22 23 24end
如果我们想将所有的v替换成s,如果仍然采用单变量或是多变量命名的方式,就会显得非常冗长,因此我们可以将v后面所有的数字用通配符进行替换:
rename v* s* //通配符"*"代表v后面所有的字符
运行结果如图所示:

2)通配符"#"的使用

比如我们想要将v1v2v3v4v5依次命名为num1num2num3num4num5,可以通过以下命令实现:
clear allinput v1 v2 v3 v4 v51 2 3 4 5endrename v# num# //通配符"#"代表v后面所有的数字
执行结果如下图所示:

但是,如果我们旧变量名是乱序排列的,如s1s24s33s49s55,我们想要将其替换成按照自然数依次排列的变量名时,可以选择renumber选项,该选项的功能主要是用从1开始的自然数替换掉变量名中的文本或数字,在执行这个命令以后就可以将旧变量名依次重命名为v1v2v3v4v5
clear allinput s1 s24 s33 s49 s551 2 3 4 5endrename s# v#, renumber
可以看到这里的程序与上一个程序的差别除了旧变量不同以外,只有选项renumber的不同,如果不使用renumber命令,执行结果如下图所示,"#"只复制了旧变量中匹配到的数字,而并不能够实现顺序排列变量名:

添加了renumber以后的运行结果,可以看到所有乱序的变量名依次重命名为v1v2v3v4v5

3)通配符"?"的使用

比如我们想要将变量名number1number2number3依次替换为num1num2num3
clear allinput number1 number2 number31 2 3endrename ???ber# ???#
运行结果如图所示:

从这里我们可以看到,由于num是三个字符,因此"?"通配符要连续使用3个进行匹配才行。在rename命令中有个特殊的命令为rename _all,这里的all代表是系统默认的内置变量,形式为"_variables",因此当我们引入系统自带的数据时,可以使用该命令进行批量重命名,同时我们想要把所有变量名的第一个字母变成大写的,我们也可以加上renameproper选项:
clear allsysuse auto,clearrename _all,proper
这里我们可以看到,在auto数据中的变量名都是没有规律的,不像我们之前自己input的数据都是以v开头的,因此就无法直接使用通配符进行变量名的批量更改,而使用多变量命名又会显得非常冗长,因此这里我们需要引入一个内置变量,它们是由Stata创建和更新的内置系统变量,常见的有_n_N_b_cons_se_pi等。通过内置函数_all表示所有旧变量,这样就可以实现所有变量的重新命名:

这里运行的结果可以看到,所有变量名的首字母都变成了大写,同样地,也可以利用upperlower实现变量名字母的全部大写和全部小写。
今天我们介绍的是rename比较常见的一些用法和实例,希望可以帮你在变量重命名时省下一些时间,更多详情可以通过help进行查看和学习哦~





对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
往期推文推荐

追踪命令set trace on——解你燃眉之急

爬虫大杀器 | “手把手”教你配置Selenium

小白必看!Anaconda安装全攻略

数据类型转换之destring和tostring命令

mvencode和mvdecode——打开缺失值与特定数值转换大门的钥匙
优雅的map()
Python实现Excel中vlookup函数功能
Stata实现Excel中vlookup函数功能
gen与egen,傻傻分不清楚?

用WordStat看中国日报新闻(二)

一招轻松合并文件——openall命令介绍

爬虫俱乐部平安经
一个函数实现PDF文档合并与拆分
补全股票代码位数的一百种姿势

明星闪闪亮:各校高被引论文

高校经管类核心期刊发文排行榜|2010-2019

PDF图片提取
关于我们


微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。

此外,欢迎大家踊跃投稿,介绍一些关于stata和python的数据处理和分析技巧。
投稿邮箱:statatraining@163.com
投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存