微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用嵌套?循环重命名具有不同类别的多个变量

如何解决使用嵌套?循环重命名具有不同类别的多个变量

假设我在Stata中有一个很长的数据集,按vartype分类;其中 vartype 在 A 到 D 的范围内。

list var1 var2 var3 vartype in 1/10

    +--------------------------------------+
     |  var1   var2          var3   vartype |
     |--------------------------------------|
  1. | 1:Yes      1        900000         A |
  2. | 1:Yes      1             0         C |
  3. | 1:Yes      1             0         A |
  4. | 1:Yes      1       1000000         D |
  5. | 1:Yes      1       8000000         C |
     |--------------------------------------|
  6. | 1:Yes      1       3100000         C |
  7. | 1:Yes      1             0         B |
  8. | 1:Yes      1       4000000         A |
  9. | 1:Yes      1             .         A |
 10. | 1:Yes      1   1.00000e+12         B |
     +--------------------------------------+   

我想将它reshape变成宽的,然后将每个原始变量(renamevar1 var2 var3变成不同的名称(比如inpatient outpatient cost)。我还希望在执行 vartype 后将 chol diab hyper cancer(A 到 D)的每个代码归入不同的类别(reshape)。

比如,在reshape wide之后,我会得到var01A,var01B,var01C等,想把它们重命名inpatient_chol,inpatient_diab,inpatient_hyper等。这也应该适用于其他变量; var2 = outpatientvar3 = cost

就目前而言,我所知道的就是在寻找另一种方法(例如嵌套循环或更简单的代码)时在下面执行这些行。

reshape wide var1 var2 var3,i(hhid pid) j(vartype) string

foreach y in var1 var2 var3 {
rename `y'A `y'cholesterol
rename `y'B `y'diabetes
rename `y'C `y'hypertension
rename `y'D `y'cancer
}

}
foreach x in cholesterol diabetes hypertension cancer {
rename var1`x' has_`x'
rename var2`x' inpatient_`x'
rename var3`x' cost_`x'
}

我知道我可以renamerecode每个变量和每个vartype,然后再将其重塑为wide。我只是想知道是否有另一种方法来处理广泛的数据集。

解决方法

您的代码看起来很棒,而且我倾向于在自己的代码中重命名变量。如果您对更短的内容(尽管不太明确)感兴趣,您可以利用 * 命令中的 rename 语法。两行代码:

rename (*A *B *C *D) (*cholesterol *diabetes *hypertension *cancer)
rename (var1* var2* var3*) (has_* inpatient_* cost_*)

请注意,例如,您没有其他不想重命名的以 A 结尾或以 var1 开头的变量。 rename 的完整 PDF 手册还有一些其他方便的重命名技巧。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。