在 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'
}
我正在尝试在 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'
}