STATA 循环应用
Posted myrj
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STATA 循环应用相关的知识,希望对你有一定的参考价值。
gen tz=0 local vv pid_a_c1 pid_a_c2 pid_a_c3 pid_a_c4 pid_a_c5 pid_a_c6 pid_a_c7 pid_a_c8 pid_a_c9 pid_a_c10 local k=_N forvalues i=1/`k\' local mm=0 foreach var of varlist `vv\' local mm=`mm\'+1 if pid[`i\']==`var\'[`i\'] if `mm\'==10 local bza=ustrright("`var\'",2) else local bza=ustrright("`var\'",1) //disp `bza\' if tb6_a18_c`bza\'[`i\']==1 replace tz[`i\']=tz[`i\']+1
在Stata中,foreach x的R等价函数是什么?[关闭]
在Stata中,如果我想循环遍历几个变量并标记所有变量,我会执行以下操作
foreach x in a c z t s {
cap label drop `x'
label define `x' 1 "Yes" 2 "No"
label values `x' `x'
}
请有人告诉我如何在R中执行此操作?
答案
R在Stata的意义上没有“标签”,也没有区分for循环的类型(如Stata的forvalues
和foreach
)。您可以使用因子变量,它们与标记的数值有些相似(并且在其建模命令中另外表现得像Stata的i.
前缀表示法)。您可以以与Stata代码非常相似的方式从现有数据中创建因子变量。
我将假设您有一个名为dat
的数据框,其中包含名为a
,c
,z
,t
,s
以及可能的其他变量的变量。如果是这样,那么你想循环遍历变量的名称:
for (i in c("a", "c", "z", "t", "s")) {
dat[[i]] <- factor(dat[[i]], levels = 1:2, labels = c("Yes", "No"))
}
如果这些名称在数据框(它们可能是)中是唯一的,您可以选择在数据框中循环变量的位置:
pos <- match(c("a", "c", "z", "t", "s"), names(dat))
for (i in pos) {
dat[[i]] <- factor(dat[[i]], levels = 1:2, labels = c("Yes", "No"))
}
如果这些是您的数据集中唯一的变量,您可以使用lapply
和一些小作弊符号:
dat[] <- lapply(dat, factor, levels = 1:2, labels = c("Yes", "No"))
有两个附加软件包提供更多类似Stata的标签功能:labelled和Hmisc,这可能值得探索。但是,在大多数情况下,因素可能会给你你想要的东西。
以上是关于STATA 循环应用的主要内容,如果未能解决你的问题,请参考以下文章