我的变量名以下划线结尾,后跟年份代码。
例如,我有以下内容:
age_58 age_64 age_75 age_84 age_93
我想将它们重命名为:
age58 age64 age75 age84 age93
如何一次从所有变量名中删除_
?
我正在使用Stata版本11。
答案 0 :(得分:23)
在Stata 13和更高版本中,可以使用内置命令rename
在一行中完成此操作。
只需指定相关的规则,其中可以包含通配符字符:
clear set obs 1 foreach var in age_58 age_64 age_75 age_184 age_93 age99 { generate `var' = rnormal() } list +----------------------------------------------------------------------+ | age_58 age_64 age_75 age_184 age_93 age99 | |----------------------------------------------------------------------| 1. | .1162236 -.8781271 1.199268 -1.475732 .9077238 -.0858719 | +----------------------------------------------------------------------+ rename *_# *# list +----------------------------------------------------------------------+ | age58 age64 age75 age184 age93 age99 | |----------------------------------------------------------------------| 1. | .1162236 -.8781271 1.199268 -1.475732 .9077238 -.0858719 | +----------------------------------------------------------------------+
键入help rename group
,以获取各种可用说明符的详细信息。
答案 1 :(得分:17)
对于Stata 8而言,社区贡献的命令import builtins
import collections.abc
def isiteratorclass(obj):
if not isinstance(obj, type):
return False
return issubclass(obj, collections.abc.Iterator)
[key for key, value in vars(builtins).items() if isiteratorclass(value)]
# --> ['enumerate', 'filter', 'map', 'reversed', 'zip']
提供了一种解决方案:
renvars
有关文档和下载,请参见
renvars age_*, subst(_)
有关2001年的论文,请参见此FHTMitchell。
答案 2 :(得分:9)
创建一些示例数据:
clear
set obs 10
foreach var in age_58 age_64 age_75 age_84 age_93 age99 {
gen `var' = rnormal()
}
删除下划线:
foreach var of varlist * {
local newname : subinstr local var "_" "", all
if "`newname'" != "`var'" {
rename `var' `newname'
}
}