我有一个大型数据集,其中输入的变量子集具有相同的前缀,后跟下划线和一些细节。它们都是二进制YN,变量都是双精度数。例如,我有变量onsite_healthclinic
和onsite_CBO
,其中值只能是1或0。
我希望rename
根据他们正在进行的调查中的问题(所以上述变量将变为q0052_healthclinic
和q0052_CBO
),substr
,但如果我使用type mismatch
使用下面的代码我(显然)得到foreach var in onsite_healthclinic onsite_CBO {
local new = substr(`var', 8, .)
rename `new' q0052_`new'
}
:
substr
我的问题是,除了{{1}}之外还有其他命令我可以使用,以便我不必a)首先将所有变量转换为字符串;或b)手动重命名(每个子集约20个,所以虽然可行,但这是浪费时间)。
答案 0 :(得分:2)
根本不需要循环。虽然基本答案是一行,但我在这里给出了一个完整的,独立的答案。
clear
set obs 1
foreach v in onsite_healthclinic onsite_CBO {
gen `v' = 1
}
rename onsite_* q0052_*
describe, fullnames
这个答案暗示你没有研究rename groups
下的帮助。
答案 1 :(得分:1)
这会有用吗?
foreach var in onsite_healthclinic onsite_CBO {
local new = substr("`var'", 8, .)
rename onsite_`new' q0052_`new'
}
我在var
函数中对本地substr
的调用添加了引号,并将onsite_
添加到重命名中,这似乎有效。