在 Stata 中用循环重命名一长串变量

Renaming long list of variables with loop in Stata

我正在尝试在 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,Stata 说变量名称已经定义。我知道这是因为 hv101_01 已经使用了该标签名称。

当变量更改为标签名称时,我想在变量后面添加_02 或任何数字。 有人可以帮忙提供一个代码吗?

感谢您期待的回复。

根据您的变量名称考虑以下玩具示例:

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.

编辑:

如果标签相同且变量编号顺序,则甚至不需要循环:

local lbl : variable label hv101_11
rename hv101_* `lbl'_#, renumber(11)

这是 Andrew Musau 在 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'
 }