为 Stata 中的所有变量重新编码相同的值模式
Recode the same value pattern for all variables in Stata
在我的数据集中,我有一堆 Yes/No 类型的变量。由于某种原因,"Yes" 被编码为 1,"No" 被编码为 2 而不是 0。现在我想根据值标签 "No".[=10= 将 2 重新编码为 0 ]
我怎样才能做到这一点而不必检查和重新编码每一个?
有一些并发症:
这些假人中的每一个都有一个共享假人名称的值标签,而不是共享 "yesno" 值标签。因此,我不能简单地遍历所有具有 "yesno" 值标签的变量。
这些假人中可能有保留代码(-1 表示不知道,-2 表示拒绝等)。由于这些保留代码,我认为重新编码的最佳方法是通过检查值标签,因为我确定 2 被标记为编号
假设您要查找带有特定值标签的变量。您可以使用 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 且附加了值标签 "No" 的变量。警告:这应该会更改您的数据集。确保你 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
}
}
在我的数据集中,我有一堆 Yes/No 类型的变量。由于某种原因,"Yes" 被编码为 1,"No" 被编码为 2 而不是 0。现在我想根据值标签 "No".[=10= 将 2 重新编码为 0 ]
我怎样才能做到这一点而不必检查和重新编码每一个?
有一些并发症:
这些假人中的每一个都有一个共享假人名称的值标签,而不是共享 "yesno" 值标签。因此,我不能简单地遍历所有具有 "yesno" 值标签的变量。
这些假人中可能有保留代码(-1 表示不知道,-2 表示拒绝等)。由于这些保留代码,我认为重新编码的最佳方法是通过检查值标签,因为我确定 2 被标记为编号
假设您要查找带有特定值标签的变量。您可以使用 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 且附加了值标签 "No" 的变量。警告:这应该会更改您的数据集。确保你 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
}
}