stata命令详解-rename group

作者: Hobbit的理查德 | 来源:发表于2020-02-07 13:54 被阅读0次

    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):新的所有变量名

    相关文章

      网友评论

        本文标题:stata命令详解-rename group

        本文链接:https://www.haomeiwen.com/subject/ompmxhtx.html