假设您正在寻找带有特定值标签的变量。您可以使用检索这些变量ds
并将它们的名称传递给recode
.
. clear
. set obs 2
obs was 0, now 2
. forval j = 1/5 {
2. gen y`j' = _n
3. }
. label def yesno 1 yes 2 no
. label val y4 yesno
. label val y5 yesno
. ds, has(vall yesno)
y4 y5
. ret li
macros:
r(varlist) : "y4 y5"
. recode `r(varlist)' (2 = 0)
之后值标签也需要调整:
. label def yesno 0 "No", modify
编辑(在@Heisenberg 有用的评论之后)
如果您使用多于一组值标签,则需要对不同的值标签重复应用此方法,或者考虑另一种。
这是一种更通用的方法,用于查找值为 2 且附加了值标签“否”的变量。警告:这应该会更改您的数据集。确保您save
使用的是早期版本。
ds, has(vall)
foreach v in `r(varlist)' {
local lbl : label (`v') 2
if `"`lbl'"' == "No" {
replace `v' = 0 if `v' == 2
local label : value label `v'
label def `label' 0 "No", modify
}
}