Переименование длинного списка переменных с помощью l oop в Stata - PullRequest
0 голосов
/ 14 марта 2020

Я пытаюсь написать код в Stata. В настоящее время я работаю с набором данных с единицей наблюдения в качестве домашних хозяйств. Существуют также переменные для каждого члена домохозяйства, например, hv101_01 для одного человека в домохозяйстве, hv101_02 для второго человека в домохозяйстве и до hv101_39, причем все они имеют одинаковый ярлык. Это касается многих переменных.

Я хотел бы изменить имена всех переменных на имя метки. Я смог вычислить это как:

foreach v of var * {
local lbl : var label `v'
local lbl = strtoname("`lbl'")
rename `v' `lbl'
label variable `lbl' "`v'"
}

Но когда он достигает переменных, которые относятся ко второму члену домохозяйства, например, hv101_02, Стата говорит, что имя переменной уже определено. Я знаю, что это потому, что hv101_01 уже принял это имя метки.

Я хотел бы добавить _02 или любой другой номер, стоящий за переменной, когда переменная изменяется на имя метки. Может кто-нибудь, пожалуйста, помогите с кодом для этого.

Спасибо за ожидаемый ответ.

Ответы [ 2 ]

1 голос
/ 14 марта 2020

Рассмотрим следующий пример игрушки, основанный на ваших именах переменных:

clear
set obs 1

forvalues i = 11 / 15 {
    generate hv101_`i' = rnormal()
    label variable hv101_`i' ExampleVarLabel
}

describe, fullnames 

Contains data
  obs:             1                          
 vars:             5                          
 size:            20                          
-------------------------------------------------------------------------------------------------------------------------------------
              storage   display    value
variable name   type    format     label      variable label
-------------------------------------------------------------------------------------------------------------------------------------
hv101_11        float   %9.0g                 ExampleVarLabel
hv101_12        float   %9.0g                 ExampleVarLabel
hv101_13        float   %9.0g                 ExampleVarLabel
hv101_14        float   %9.0g                 ExampleVarLabel
hv101_15        float   %9.0g                 ExampleVarLabel
-------------------------------------------------------------------------------------------------------------------------------------
Sorted by: 
     Note: Dataset has changed since last saved.

Тогда у меня работает следующее:

foreach v of var * {
    local lbl : variable label `v'
    rename `v' `lbl'`=substr("`v'", strpos("`v'", "_"), .)'
    label variable `lbl'`=substr("`v'", strpos("`v'", "_"), .)' `v'
}

describe, fullnames

Contains data
  obs:             1                          
 vars:             5                          
 size:            20                          
-------------------------------------------------------------------------------------------------------------------------------------
              storage   display    value
variable name   type    format     label      variable label
-------------------------------------------------------------------------------------------------------------------------------------
ExampleVarLabel_11
                float   %9.0g                 hv101_11
ExampleVarLabel_12
                float   %9.0g                 hv101_12
ExampleVarLabel_13
                float   %9.0g                 hv101_13
ExampleVarLabel_14
                float   %9.0g                 hv101_14
ExampleVarLabel_15
                float   %9.0g                 hv101_15
-------------------------------------------------------------------------------------------------------------------------------------
Sorted by: 
     Note: Dataset has changed since last saved.

РЕДАКТИРОВАТЬ:

Если метки одинаковые и нумерация переменных последовательная, вам даже не понадобится al oop:

local lbl : variable label hv101_11
rename hv101_* `lbl'_#, renumber(11)
0 голосов
/ 18 марта 2020

Это правильный ответ, предложенный Эндрю Мусау в https://www.statalist.org/forums/forum/general-stata-discussion/general/1541234-renaming-long-list-of-variables-with-loop

foreach v of var hvidx_01 - hv124_39 {
         local lbl : var label `v'
         local lbl= subinstr("`lbl'"," ","_",.)
         local end=substr("`v'", -1, 2)
         rename `v' `lbl'_`end'
         label variable `lbl'_`end' `v'
 }
...