Stata转R代码结果不一致,求问题排查与修正方案
问题原因分析
Stata和R对缺失值的判断逻辑写法完全相反,你把条件搞反了:
- Stata里的
var<.表示变量var不是缺失值(因为Stata用.代表缺失,且缺失值是数值型里的最大值,所以小于.就是非缺失状态) - 你写的R代码里
is.na(var)是判断变量var是缺失值,正好和Stata的条件逻辑相反,这才导致本该计算出-9的情况被判定为不符合条件,返回了NA。
修改后的R代码
data <- data %>% mutate(tau = if_else((temp2 > temp3) & (!is.na(bod) | !is.na(do) | !is.na(lnfcoli)), year - temp2, NA_integer_))
逻辑对应验证
修改后的条件(!is.na(bod) | !is.na(do) | !is.na(lnfcoli))完全匹配Stata的(bod<. | do<. | lnfcoli<.),意思是:当temp2 > temp3,且bod、do、lnfcoli至少有一个不是缺失值时,计算year - temp2赋值给tau,否则赋值为NA。
内容的提问来源于stack exchange,提问作者Quinoba
相关产品推荐
相关产品推荐

