Вот альтернативный подход.
Это хуже, чем использование rename
в одной строке, что хорошо подходит для этой цели.Проверка покажет необходимое соответствие с этим подходом.Это зависит от имен, являющихся элементами, разделенными подчеркиванием, которые удаляются, а затем вставляются заново.
clear
input float(MA_234_AAF_US AL_87665_ACH_USA TX_3_GH_US LA_689_KLO_US KY_3435_Z_USA)
9.96567 10.559998 12.935112 13.142867 9.35608
end
foreach name of var * {
local new = subinstr("`name'", "_", " ", .)
tokenize `new'
rename `name' `4'_`1'_`3'_`2'
}
describe, fullnames
Contains data
obs: 1
vars: 5
size: 20
-------------------------------------------------------------------------------------------
storage display value
variable name type format label variable label
-------------------------------------------------------------------------------------------
US_MA_AAF_234 float %9.0g
USA_AL_ACH_87665
float %9.0g
US_TX_GH_3 float %9.0g
US_LA_KLO_689 float %9.0g
USA_KY_Z_3435 float %9.0g
-------------------------------------------------------------------------------------------
РЕДАКТИРОВАТЬ:
Как указывает @PearlySpencer, операторы внутри цикла
local new = subinstr("`name'", "_", " ", .)
tokenize `new'
rename `name' `4'_`1'_`3'_`2'
можно заменить на
tokenize `name', parse(_)
rename `name' `7'_`1'_`5'_`3'
Разница в том, что подчеркивания будут помещены в локальные макросы 2
, 4
, 6
.