0
我有这个简单的问题需要解决,我需要使用Stata
来解决。我更熟悉R
,所以我开始在那里解决,以确保我了解问题,然后想翻译为Stata
。将R for循环转换为Stata
在Stata
numlist "1 4 5 6"
global act `r(numlist)'
gen rows = _n
foreach i of global act {
di "qa_" + `i'
di "qb_" + `i'
di "qc_" + `i'
foreach j in rows {
di `j'
}
}
有很难找到下一个步骤将R代码类似的问题
# Generate dummy data
n <- 30L
df <- data.frame(id = seq_len(n))
set.seed(10L)
question <- c("qa", "qb", "qc")
for (q in question) {
for (a in 1L:6L) {
df[, paste(q, a, sep = "_")] <- sample(c(0L:10L, NA),
size = n,
replace = TRUE)
}
}
# Now based on certain "activities" generate new variables
activity <- c(1, 4, 5, 6)
for (i in activity) {
# If answer to question c for that activity is equal to 3
# then value of the new variable is a multiple of the other two
vara <- paste0("qa_", i)
varb <- paste0("qb_", i)
varc <- paste0("qc_", i)
varn <- paste0("new", i)
df[, varn] <- as.numeric(rep(NA, times = n))
for (j in seq_len(n)) {
if (is.na(df[j, varc])) {
# Do nothing
} else if (df[j, varc] == 3) {
df[j, varn] <- df[j, vara] * df[j, varb]
}
}
}
我测试(周围饰)。
用于解码原始R的信用,但这是一个非常直接的翻译。在另一个版本中,我已经自由地进行了编辑,因为代码不会作为评论而明确,并且在我将其作为另一个答案编写时没有太多意义。随意使用它,只是如果你想删除它,那么我会把它作为另一个答案。 –
谢谢@NickCox的编辑!是的,我从字面上翻译了snoram的代码,因为我不知道他/她的目标。 R代码也可以缩短,但这是snoram的选择。 –
这两个代码片段都证明对我非常有用 – snoram