我在Stata中有一个变量列表,例如a_1_va_0100
,a_2_va_0100
,a_3_va_0100
等。最大数量不固定(不会超过50)。变量中的数字将是连续的,但最大数量可能会因情况而异。
我需要将变量替换为a_1_q0100
,a_2_q0200
,a_3_q0300
等。前4个字符将保持不变,其余字符将更改。我尝试过使用subinstr()
。
replace a_1_va_0100 = subinstr( a_1_va_0100 , "va_0100", "q0100", .)
我可以为每个变量循环替换语句吗?
答案 0 :(得分:2)
你想要rename
,而不是replace
(我猜):
clear
set obs 1
gen a_1_va_0100 = 1
gen a_2_va_0100 = 2
gen a_3_va_0100 = 3
describe
forvalues i = 100(100)300 {
rename a_`=`i'/100'_va_0100 a_`=`i'/100'_q0`i'
}
describe
可替换地:
forvalues i = 1/3 {
rename a_`i'_va_0100 a_`i'_q0`=`i'*100'
}
我们使用replace
更改特定变量所采用的值,而不是rename
变量。有关详细信息,请参阅help <command>
。
或者您真的想要replace
值吗?
答案 1 :(得分:1)
对于以“a _”开头的变量,这将在变量名中用“q”替换所有出现的“va_”:
renvars a_*, subst(va_ q)
您可以使用findit renvars
找到此Stata Journal命令。