摘要 减少缺失数据是提高“问卷有效率”的重要环节。本文主要根据统计分析的要求,从技术角度微观地探讨如何在ASP中利用数据库技术防止缺失数据,即通过Recordset对象中Fields集合的字段名(Fields().Name)与网络问卷表单的对象名(Name)进行关联,巧妙地优化缺失数据校验程序,从而设计出更简洁、灵活且不受问卷试题规模影响的校验程序,增强了WEB问卷的通用性,提高了“问卷有效率”,起到事半功倍的效果。
关键词 WEB问卷,缺失数据校验程序,ASP
网络调查具有传统纸质调查无法比拟的优越性,因此在现实调查工作中被广泛运用。但与传统的纸质调查一样,网络调查的质量受问卷试题设计、抽样方案、问卷回收率和“问卷有效率”[1]等因素的制约。一旦利用技术手段对各环节进行合理的优化,网络调查就能够突破诸多因素的制约,提高调查效率和质量。其中,防止缺失数据[2]是提高“问卷有效率”的重要环节。
1 网络调查与缺失数据
随着网络调查的推广,许多学者从技术角度宏观地探讨了网络调查,满孝[3]和王骏[4]分别介绍了ASP设计调查引擎和网络调查系统的设计;郭强主编的《网络调查手册》[5]比较详细地介绍了用ASP设计社会调查;何清林[6]实现了“网络问卷调查分析系统”的动态生成。但在实践操作中,还会涉及许多不容忽视的微观问题,如缺失数据问题。
统计学所指的缺失数据就是漏填数据项[2]。在网络调查中,缺失数据主要是被调查者在按了“提交”按钮时仍有试题没填或只填了空格所造成的。这样所造成的空缺数据直接影响 “问卷有效率”,进而影响分析结果。此外,有些系统(如ASP)在将空数据存入数据库时就会产生错误。因而缺失数据是个不容忽视的问题。
一般来说,要避免缺失数据就需编写程序对每个数据项进行校验。小型WEB问卷通常利用JavaScript程序在客户端对每一试题所对应的元素逐一进行校验,全部合法后方能实现对服务器的提交操作。按此算法,所提交的表单中包含有n对象,则在JavaScript程序中就至少需要n个判断。如果大型WEB问卷也如法炮制,设计者的工作量无疑会与问卷规模成比例增加。合理选择算法对设计者方能起到事半功倍的效果。
本文主要根据统计分析的要求,从技术角度微观地探讨如何在ASP中利用数据库技术防止缺失数据。从而设计出不受问卷规模影响的校验程序。
2 大型WEB问卷缺失数据校验的常见算法
对于大型WEB问卷调查的设计,必须优化算法,否则会在程序的书写上浪费大量时间。通常的算法是根据问卷自身特点进行处理。
2.1基于里克特量表(Likert Scales)形式的问卷
里克特量表是现代调查研究中普遍被采用的一种测量量表[1],它的基本形式是给出一组陈述,然后要求调查对象表明态度。根据每题所提供答案的个数,又可分为里克特两点量表、三点量表、四点量表、五点量表、六点和七点量表。基于这种量表而制成的问卷其主体呈现出极强的规律性,即每题都是单选且每题预置答案均为n(2≤n≤7)个。因而根据这种特点,在基于B/S模式的网络问卷的规划时,利用JavaScript设计两重循环在客户端就可检验缺失数据问题。程序如下:
|
<script language="JavaScript"> |
|
|
Var m=50; |
‘试题总量 |
|
Var n=5; |
‘每道试题的预置答案数目 |
|
function checkradio() |
|
|
{var yesno |
‘当前试题无缺失时为1,否则为0 |
|
var i=0 |
|
|
for (i=0;i<m;i++) |
|
|
{yesno=0 |
‘每个试题开始检测时均假设为缺失 |
|
for(var j=0;j<n;j++) |
|
|
{if (document.forms[0].elements[i*5+j].checked) |
‘如果当前试题有答案被选中时 |
|
{yesno=1;break;} |
‘标识为无缺失 |
|
} |
|
|
if (yesno==0) |
‘如果此题出现数据缺失时 |
|
Break; |
‘停止检测 |
|
} |
|
|
if (i<m) |
‘m道题中有一个试题出现缺失数据 |
|
{window.confirm("每个题都要求选择,您第"+(i+1)+"题没选,请选择!"); } |
‘提示出现缺失数据的题号 |
|
else |
‘无缺失数据则将数据发送给ASP处理 |
|
{ |
|
|
document.form1.method="post" |
|
|
document.form1.action="survey.asp" |
|
|
document.form1.submit() |
|
|
} |
|
|
} |
|
|
</script> |
|
2.2 针对混合形式的问卷
问卷形式往往不只包含某一类型的单选对象而是混合型的。这时就需要先将各种类型的对象进行分组(这样做也有利于数据的存储程序的编写)。比如将两点形式的分为A类(对象名则为a1,a2,a3…),三点形式的分为B类(对象名则为b1,b2,b3…),复选按钮为C类(对象名则为c1,c2,c3…)等。在分类时为了便于程序编写,不得不将同类型的对象安排在一起。然后用上述方法进行处理。
当然,对于混合形式的问卷,较好的算法还可将数据暂时存入Cookies、临时文本文件或临时数据库中的表中,然后通过ASP的VBScript程序进行校验处理。这样就没必要在物理上将同类型的对象安排在一起,而只要将同质的对象逻辑分组命名即可。
以暂存于临时数据库的表为例,在添加数据时,考虑试题数量所造成变量列表过长,即书写SQL的insert语句过长的问题,我们可以用以下方法实现:(以某A组为代表)