最近在头大公司那些恶心的复选印象题,十几个项,不许用哑变量解决,用epidata控制录入重复的话会很痛苦,特意写了个句子,发现epidata的chk里面好像有长度限制,太多的布尔代数运算就会因为行的问题出现很多奇怪的bug(有时没事,有时就出事)。
建议:直接控制最好不超出10个布尔代数同时运算,十几个项的复选题目到了后面的选项就不能直接控制,得通过中间的临时变量控制。
举个例子吧,某道题目是复选,18个选项。
那么到了第十二个项的时候,由于逻辑运算太长,那么epidata就会报错,解决的方法就是先建立两个临时变量,然后再用临时变量的逻辑运算进行录重控制。第12项的chk写法
after entry
vartem1=(q10z12=q10z11) or (q10z12=q10z10) or (q10z12=q10z9) or (q10z12=q10z8) or (q10z12=q10z7) or (q10z12=q10z6) or (q10z12=q10z5) or (q10z12=q10z4) or (q10z12=q10z3)
vartem2=(q10z12=q10z2) or (q10z12=q10z1)
* 用两个临时逻辑变量缩短行长度,临时变量在before file里面定义好,反正定义一大串不用都无所谓,输出数据的时候不会输出临时变量的。
if q10z12<>99 then * "99"为缺失值
if (vartem1=1) or (vartem2=1) then
help "录重" type=error
q10z1=.
q10z2=.
q10z3=.
q10z4=.
q10z5=.
q10z6=.
q10z7=.
q10z8=.
q10z9=.
q10z10=.
q10z11=.
q10z12=.
q10z13=.
q10z14=.
q10z15=.
q10z16=.
q10z17=.
q10z18=.
goto q10z1
endif
endif
end
运行过去即可,试试看



雷达卡






京公网安备 11010802022788号







