stata命令详解-rename group

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:
    • addnumberaddnumber(#):指定在变量名后添加序列数,如果不指定(#),则数从1开始。见举例18
    • renumberrenumber(#):将旧变量名中地数字或者文本替换成序列数,如果不指定(#),则数从1开始。见举例16和17
    • sort:在重命名前,旧变量名按顺序排列。排序发生在添加选项addnumber或者renumber,或者指定一系列变量名为旧变量名或新变量名。见举例15
    • dryrun:不执行重命名,但报告重命名结果。在重命名前建议添加此选项。
    • r:添加该选项,可以将旧变量名和新变量名都存在r()中。
  • options2:
    • upper:将所有变量的变量名的所有字母变成大写。
    • lower:将所有变量的变量名的所有字母变成小写。
    • proper:将所有变量的变量名的首字母大写,其他字母小写。
      • 若要修改Unicode字符,使用字符串函数ustrupper(),ustrlower(),ustrtitle()
    • dryrunr:和options1中相同。

6. 举例

  1. 命令rename的基本功能,单变量重命名
*变量名stat重命名为status
rename stat status
  1. 用括号将多个变量进行重命名
*将变量名stat和inc重命名为status和income
rename (stat inc) (status income)
  1. 变量名相互交换
*变量名v1和v2相互变换
rename (v1 v2) (v2 v1)
  1. 多个变量相互交换,不限制数量
*变量a重命名为b,变量b重命名为c,变量c重命名为a
rename (a b c) (b c a)
  1. 允许保留原变量名
*变量a重命名为c,变量b保留原变量名,变量c重命名为a
rename (a b c) (c b a)
  1. 使用通配符*进行重命名,*在新旧变量名中表示相同字符
*将所有前缀为jan的变量重命名为后缀为1的变量
*例如,janstat重命名为stat1,janinc重命名为inc1
rename jan* *1

*将变量名中带有的前缀jan删除
rename jan* *

*将变量名中带有的后缀jan删除
rename *jan *
  1. 符号?进行批量重命名,?表示匹配1个字符,??表示匹配2个字符,以此类推,而*表示匹配0个或更多个字符
*将所有以jan开头并且后接1个字符的变量重命名为除去jan并以1结尾
*例如,jans重命名为s1,而janstat不变
rename jan? ?1
  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
  1. 旧变量中的通配符*可以多于新变量
*将变量名中jan及其后面所有字符都删除
*例如,statjan重命名为stat,incjan71重命名为inc
rename *jan* *
  1. 新变量中的通配符.可以跳过旧变量中相应的通配符
*将变量名中jan及其前面所有字符删除
*例如,minjaninc重命名为inc
rename *jan* .*
  1. 通配符=指代原变量名,即在原变量名基础上进行批量增加字符
*将变量名中以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
  1. #类似*,但是,指代的是数字
*将v1重命名为stat1,v2重命名为stat2,……,v10重命名为stat10
*即将非数字部分重新替换
rename v# stat#
  1. (#)指代的是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(##)
  1. #,(#),(##)可结合使用
*变量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(#)
  1. 可以混合使用多种语法
*将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
  1. 添加选项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
  1. 新变量中的#可指代旧变量中的*,?,#,(#),(##)
*旧变量中有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
  1. 选项addnumber,添加序列数,新变量中的通配符数量要多于旧变量,多出来的通配符得是#,(#),(##)……
*将变量a,b,c分别重命名为v1,v2,v3
rename (a b c) v#, addnumber
  1. 下标的使用,下标表示第几个通配符,例如,原变量为*_#_#,所以,[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):新的所有变量名

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容

  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 4,362评论 0 5
  • 个人学习批处理的初衷来源于实际工作;在某个迭代版本有个BS(安卓手游模拟器)大需求,从而在测试过程中就重复涉及到...
    Luckykailiu阅读 4,675评论 0 11
  • 第1章 小试牛刀 $ 是普通用户,# 表示管理员用户 root。 shebang:#!。sharp / hash ...
    巴喬書摘阅读 6,324评论 1 4
  • 写在前面的话 代码中的# > 表示的是输出结果 输入 使用input()函数 用法 注意input函数输出的均是字...
    FlyingLittlePG阅读 2,724评论 0 8
  • 今天很神奇,和两个朋友讨论了同一件事情。和上午和第一个朋友聊时我推翻了自己之前的想法,下午和第二个朋友也就是当事人...
    顺小其阅读 203评论 0 1