如何跨列添加

时间:2015-03-27 22:24:59

标签: stata calculated-columns

说我有这些数据:

clear
set more off

input ///
str15(s1 s2 s3 s4)
a "b" "b" "c" 
b "b" "" "a"
c "c" "" ""
d "f" "" "g"
e "" "" ""
end

我想逐行找到非缺失值的数量。我试试:

gen sum = s1!="" + s2!="" + s3!="" + s4!=""

但这会导致类型不匹配错误。我做错了什么?

但是,我可以把它写出来并且有效:

gen x=s1!=""
gen y=s2!=""
gen z=s3!=""
gen q=s4!=""
gen sum1=x + y + z + q

2 个答案:

答案 0 :(得分:4)

问题是运营商优先级。以下作品:

gen sum = (s1!="") + (s2!="") + (s3!="") + (s4!="")

来自Stata用户指南

  

所有运营商的评估顺序(从头到尾)是! (或〜),^, - (否定),/,*, - (减法),+,!=(或〜=),>,<,< =,> =,==,& ,和|。

但是,我更喜欢Roberto和Dimitry的rownonmiss推荐。

答案 1 :(得分:2)

我相信你想要这样的东西:

gen sum2 = !missing(s1) + !missing(s2) + !missing(s3) + !missing(s4)

甚至更紧凑的东西:

 egen sum3 = rownonmiss(s1 s2 s3 s4), strok

egen代表扩展生成,通常是开始查找的好地方,如果第一次失败则会egenmore

但是,我没有很好的直觉,为什么你的代码失败了字符串。它似乎适用于数字变量。