0
私はこの簡単な問題を解決するために、Stata
を使用して解決する必要があります。私はR
をよく知っているので、問題を理解してからStata
に翻訳したかったのです。R forループを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'
}
}
のStataで同様の問題(で遊ん)私がテストしてみた何
# 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コード。
オリジナルのRをデコードするためのクレジットですが、これは非常にリテラルな翻訳です。私は別のバージョンで編集の自由を取ってきました。コードはコメントとしては明確ではないでしょうし、別の答えとしてそれを書いている点はあまりありません。削除したい場合は別の回答として投稿します。 –
@NickCoxありがとうございました!はい、私は彼/彼女の目的を知らないので、文字通りスノーラムのコードを翻訳しました。また、Rのコードを短縮することができますが、これは詮索の選択です。 –
両方のコードスニペットが私にとって非常に便利です – snoram