1. 前言
在目前工作中,用stata清洗及分析数据,感觉很顺滑。无奈不少同学因为help文件里的英文望而却步。
带着学习和分享的目的,根据工作经验,给大家整理一些常用以及不太常用但很有用的命令,并对该命令的help文件进行有侧重的详解。
2. 命令及获取
rename group
:批量重命名变量名,系统自带命令。(命令还是rename
)
3. 描述
rename
:除了基础的单个变量名的重命名,高阶地,可以批量将多个变量名按照一定的规则进行重命名。
4. 语法
*重命名1个变量
rename old new [, options1]
*重命名多个变量名
rename (old1 old2 ...) (new1 new2 ...) [, options1]
*改变多个变量名大小写
rename old1 old2 ..., {upper|lower|proper} [options2]
- [,]:中括号里的为额外选项命令,按需求添加,而添加选项记得加英文逗号,
5. 选项
- options1:
addnumber
和addnumber(#)
:指定在变量名后添加序列数,如果不指定(#),则数从1开始。见举例18。renumber
和renumber(#)
:将旧变量名中地数字或者文本替换成序列数,如果不指定(#),则数从1开始。见举例16和17。sort
:在重命名前,旧变量名按顺序排列。排序发生在添加选项addnumber
或者renumber
,或者指定一系列变量名为旧变量名或新变量名。见举例15。dryrun
:不执行重命名,但报告重命名结果。在重命名前建议添加此选项。r
:添加该选项,可以将旧变量名和新变量名都存在r()
中。- options2:
upper
:将所有变量的变量名的所有字母变成大写。lower
:将所有变量的变量名的所有字母变成小写。proper
:将所有变量的变量名的首字母大写,其他字母小写。
- 若要修改Unicode字符,使用字符串函数
ustrupper()
,ustrlower()
,ustrtitle()
dryrun
和r
:和options1中相同。
6. 举例
- 命令
rename
的基本功能,单变量重命名
*变量名stat重命名为status
rename stat status
- 用括号将多个变量进行重命名
*将变量名stat和inc重命名为status和income
rename (stat inc) (status income)
- 变量名相互交换
*变量名v1和v2相互变换
rename (v1 v2) (v2 v1)
- 多个变量相互交换,不限制数量
*变量a重命名为b,变量b重命名为c,变量c重命名为a
rename (a b c) (b c a)
- 允许保留原变量名
*变量a重命名为c,变量b保留原变量名,变量c重命名为a
rename (a b c) (c b a)
- 使用通配符
*
进行重命名,*
在新旧变量名中表示相同字符
*将所有前缀为jan的变量重命名为后缀为1的变量
*例如,janstat重命名为stat1,janinc重命名为inc1
rename jan* *1
*将变量名中带有的前缀jan删除
rename jan* *
*将变量名中带有的后缀jan删除
rename *jan *
- 符号
?
进行批量重命名,?
表示匹配1个字符,??
表示匹配2个字符,以此类推,而*
表示匹配0个或更多个字符
*将所有以jan开头并且后接1个字符的变量重命名为除去jan并以1结尾
*例如,jans重命名为s1,而janstat不变
rename jan? ?1
- 新旧变量中可以使用多个通配符
*
*将变量名中带有的jan都删除,无论是在前缀,后缀还是中间
*例如,janstat重命名为stat,injanstat重命名为instat,subjan重命名为sub
rename *jan* **
*将变量名中以jan开头,并含有s的变量重命名为去除jan并以1结尾
*例如,janstat重命名为stat1,janest重命名为est1,但janinc不会变为inc1
rename jan*s* *s*1
- 旧变量中的通配符
*
可以多于新变量
*将变量名中jan及其后面所有字符都删除
*例如,statjan重命名为stat,incjan71重命名为inc
rename *jan* *
- 新变量中的通配符
.
可以跳过旧变量中相应的通配符
*将变量名中jan及其前面所有字符删除
*例如,minjaninc重命名为inc
rename *jan* .*
- 通配符
=
指代原变量名,即在原变量名基础上进行批量增加字符
*将变量名中以pop结尾的变量重命名为添加以jan开头的变量名
*例如,age1pop重命名为janage1pop
rename *pop jan=
*将变量status重命名为admitstatus,bp重命名为admitbp,time重命名为admittime
rename (status bp time) admit=
*将任意指定的变量(whatever)都添加前缀pre
rename whatever pre=
*将任意指定的变量(whatever)都添加后缀jan
rename whatever =jan
*将任意指定的变量(whatever)都添加前缀pre和后缀fix
rename whatever pre=fix
-
#
类似*
,但是,指代的是数字
*将v1重命名为stat1,v2重命名为stat2,……,v10重命名为stat10
*即将非数字部分重新替换
rename v# stat#
-
(#)
指代的是1个数字,(##)
指代的是2个数字,以此类推,最多10个#
*变量名中v+1个数字的变量重命名为stat+该数字,若v+2个数字则不变
*例如,v1重命名为stat1,v2重命名为stat2……,但不重命名v10
rename v(#) stat(#)
*变量名中v+2个数字的变量重命名为stat+该2个数字,若v+1个数字则不变
*例如,v01重命名为stat01,v02重命名为stat02……,v10重命名为stat10……,但不重命名v1,v2,v3,v100……
rename v(##) stat(##)
-
#
,(#)
,(##)
可结合使用
*变量v1重命名为v01,v2重命名为v02,……,v10重命名为v10,v100依然为v100,v101依然为v101
rename v# v(##)
*变量v01重命名为v1,v02重命名为v2,……,v10依然为v10,不重名v001
rename v(##) v(#)
*变量stat10重命名为stat_2010,stat11重命名为stat_2011,……但不重名stat1,stat2……
rename stat(##) stat_20(##)
*变量stat1重命名为stat_2001,stat2重命名为stat_2002,……但不重名stat10或stat_2010……
rename stat(#) stat_20(#)
- 可以混合使用多种语法
*将3个v+数字的变量分别重命名为a,b,c,旧变量得有3个符合规则的变量,不然,会报错
*例如,旧变量中有3个变量按顺序分别为v1,v10,v2,分别重命名为a,b,c
rename v# (a b c)
*将旧变量中的3个v+数字的变量先排序,再重命名为a,b,c
*例如,旧变量中有3个变量按顺序分别为v1,v10,v2,分别重命名为a,c,b
rename v# (a b c),sort
*将旧变量中的3个v开头的变量先排序,再重命名为a,b,c
*例如, valpha,vbeta,vgamma重命名为a,b,c,与旧变量在数据的顺序无关
rename v* (a b c),sort
- 添加选项
renumber
,可指定重新排序的数字
*旧变量中有v9,v10,v8,……,按顺序重命名为v1,v2,v3……
rename v# v#, renumber
*旧变量中有v9,v10,v8,……,重命名为v2,v3,v1,……,sort选项效果见15
rename v# v#, renumber sort
*旧变量中有v9,v10,v8,……,重命名为v11,v12,v10,……,即新变量的数字从10开始
rename v# v#, renumber(10) sort
- 新变量中的
#
可指代旧变量中的*
,?
,#
,(#)
,(##)
*旧变量中有valpha, vgamma, vbeta,……,按顺序重命名为v1,v2,v3,……
rename v* v#, renumber
*旧变量中有valpha, vgamma, vbeta,……,重命名为v1,v3,v2,……
rename v* v#, renumber sort
*#对应*,janstat重命名为stat1, febstat重命名为stat2,……
rename *stat stat#, renumber
*janstat重命名为stat01, febstat重命名为stat02,……
rename *stat stat(##), renumber
*janstat重命名为stat0, febstat重命名为stat1,……
rename *stat stat#, renumber(0)
*aprstat重命名为stat1, augstat重命名为stat2,……
rename *stat stat#, renumber sort
- 选项
addnumber
,添加序列数,新变量中的通配符数量要多于旧变量,多出来的通配符得是#
,(#)
,(##)
……
*将变量a,b,c分别重命名为v1,v2,v3
rename (a b c) v#, addnumber
- 下标的使用,下标表示第几个通配符,例如,原变量为
*
_#
_#
,所以,[1]指代*
, [2] 指代第1个#
, [3] 指代最后的#
*a12重命名为a21, a13重命名为a31, a14重命名为a41, ..., a21重命名为a12, ……
rename a(#)(#) a(#)[2](#)[1]
*替换前缀和后缀; bpstata重命名为astatbp, rstater重命名为erstatr, ……
rename *stat* *[2]stat*[1]
*同上
rename *stat* *[2]stat*
*v1a1重命名为v1_1_a1, v1a2重命名为v1_1_a2, ..., v2a1重命名为v2_2_a1, ……
rename v#a# v#_#[1]_a#[2]
- 说明符解释
说明符 | 旧变量中的含义 |
---|---|
* |
0或多个字符 |
? |
1个字符 |
# |
1个或多个数字 |
(#) |
1个数字 |
(##) |
2个数字 |
(###) |
3个数字 |
…… | |
(##########) |
10个数字 |
说明符 | 对应旧变量中的 | 新变量中的含义 |
---|---|---|
* |
* ,? , # , (#) , ... |
复制对应的文本 |
? |
? |
复制1个字符 |
# |
# , (#) , ... |
复制原来的数字 |
(#) |
# , (#) , ... |
重新格式化为1个或多个数字 |
(##) |
# , (#) , ... |
重新格式化为2个或多个数字 |
…… | ||
(##########) |
# , (#) , ... |
重新格式化为10个数字 |
. |
* ,? , # , (#) , ... |
跳过 |
= |
无 | 复制整个变量名 |
- 若添加了选项
renumber
,说明符#
的任何形式也可与*
或?
相对应。
7. 菜单
Data > Data utilities > Rename groups of variables
8. 存储的结果
rename
默认不存储结果,但加上选项r
,可存储以下结果:单量:
r(r)
:重命名的变量数暂元:
r(oldnames)
:旧的所有变量名
r(newnames)
:新的所有变量名
网友评论