【问题标题】:Recode the same value pattern for all variables in Stata为 Stata 中的所有变量重新编码相同的值模式
【发布时间】:2015-07-26 08:34:24
【问题描述】:

在我的数据集中,我有一堆是/否类型变量。出于某种原因,“是”被编码为 1,“否”被编码为 2 而不是 0。现在我想根据值标签“否”将 2 重新编码为 0。

如何在不必检查和重新编码的情况下做到这一点?

有一些并发症:

  1. 这些假人中的每一个都有一个共享假人名称的值标签,而不是共享一个“yesno”值标签。因此,我不能简单地遍历所有具有“yesno”值标签的变量。

  2. 这些假人中可能有保留代码(-1 表示不知道,-2 表示拒绝,等等)。由于这些保留代码,我认为重新编码的最佳方法是通过检查值标签,因为我确定 2 被标记为否。

【问题讨论】:

  • 嗨 Nix,我想做一些事情:foreach v of varlist _all { local u: value label v' replace v'=0 if `u'=="No" } 我不'不知道哪些变量是 Yes/No 类型,我不想检查并输入所有这些变量的名称。所以我想知道是否有更快的方法来做到这一点。谢谢。

标签: binary stata recode


【解决方案1】:

假设您正在寻找带有特定值标签的变量。您可以使用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 
       } 

  }

【讨论】:

  • 但如果我不知道哪些变量是是/否,我如何一次“实验室定义”它们?
  • 请学习示例。它只是设置了一个独立的沙箱来说明这一点(假设您自己没有给出可重现的示例)。显然,您已经拥有自己的数据,因此可以而且应该从使用 ds 查找变量开始。
  • 我认为@Elise 的问题是她的二进制变量都遵循相同的模式(具有“是”和“否”作为值),但它们不一定都共享值标签 yesno。因此,她正在寻求一种基于模式而不是基于值标签来识别这些变量的方法。
  • @Heisenberg 相反,对我来说,她暗示(实际上,声明)正在使用价值标签。相反,如果不使用值标签,我不知道自动方式来判断 2 的哪些值表示“否”,哪些表示其他值,如果没有更多信息,所提出的问题将无法解决。这就是问题所说的:我想根据值标签“否”将 2 重新编码为 0
  • @Heisenberg 我在答案中添加了一些额外的 cmets。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-08
  • 2021-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多