许多同学遇到排序题的时候不知所措,其实排序题只是多选题的另一种形式,处理起来还是相对比较简单的,只需要理解了其数据结构并做些小小的转换就可以完成对它的分析。
首先,我们要了解排序题在 stata 中是什么样的形式。
随便举个例子:请按您的喜爱程度将下列七种水果进行排序:
(1)苹果、(2)梨、(3)葡萄、(4)香蕉、(5)橘子、(6)桃、(7)西瓜
答案: —— > —— > —— > —— > —— > —— > ——
假设为此我们访问了10名同学,回收了10份问卷,于是有了10个 cases,数据结构如下:
观察数据结构,可以看到, 纵列的var1 - var7 七个变量分别对应答案中的七个空格位置,横列的1—10代表10个人的排序,如:第一个人将3号水果(葡萄)排在第一位,将2号水果(梨)排在第二位。。。。依次类推.
如果是一个人的排序我们很好理解也好统计出哪种水果排第一,哪种排第二.....,关键的难点是现在有10个人同时对此进行排序且各自的排序还不一样,那么如何才能汇总出最终的排序呢?
解决这个问题的大体思路分为两步:
一、首先找到每一种水果在不同的被访者那里的排名。
二、根据排名的次序赋予一个“分”,排名越高,“分”越高,这里的“分”是研究者自己给定的,仅为了进一步区分次序差异,没有某个固定的赋值要求,表示的是选项在被访者眼里的 “重要性” 程度。从而汇总出每种水果的重要性得分,然后再排序即可。
下面开始第一步:为了找到每种水果在不同的被访者那里的排名,我们首先生成7个变量,分别代表选项中从1号到7号的7种水果,先暂时令其取值为missing。
然后通过下列循环语句,逐一找到每种水果在各个被访者那里的排名,如果不知道这一堆循环语句什么意思,下面会解释。
补充:解释上述循环语句的第一句,其他都同理。
对第一个forv的循环来说,实际上是做了下列7条命令的事情。该命令首先在var1变量的所有个案中寻找看它的值是否等于1,更通俗地讲就是在所有答卷的第一个排序位置(var1)上寻找看是否有人选了苹果(1),如果选了,那就令apple =1,表示此人将 apple 放在了排序的第一位,那么同理第二行则表示在所有答卷的第二个排序位置(var2)上寻找看是否有人选了苹果(1),如果选了,那就令apple = 2,表示此人将 apple 放在了排序的第2位,接下来5条不过是基本重复以上事情罢了~因此用一条循环解决。
replace apple = 1 if var1 == 1
replace apple = 2 if var2 == 1
replace apple = 3 if var3 == 1
replace apple = 4 if var4 == 1
replace apple = 5 if var5 == 1
replace apple = 6 if var6 == 1
replace apple = 7 if var7 == 1
通过上述循环之后,我们可以看到我们新生成的7种水果的变量值都被替换成了排序(下图),如第一个apple变量的10行表示的就是这10个人分别将apple排在了第几位。
接下来就好办了,我们前面说过,只要得到每种水果在每个人那里的排名,我们就可以对排名打分,将1-7每个排名都赋一个得分,得分越高就越重要,这样就可以计算出每种水果的重要性总分,再进行比较就可以得到哪种水果是最重要的,而哪个是次之.....排出1-7的顺序。
次序转成分数的操作使用一个小的循环语句可以完成(分数自己设定,基本原则是排序越高分数越高即可):
做完这步后 var1-var7这几个变量就没什么用了,使用 drop var1-var7 将其删掉再进行下面的工作。 转化成得分之后的数据结构:
这个时候我们再来看这组数据,如果将每列都求和得到的总分不就是每道题的重要性得分了吗。为了看得更清楚,我们使用 xpose 命令做一个行列转置,将它变成一个7行的数据,从第一行到第七行分别对应 v1-v7,新增一个变量 item 用来标识第几行是第几个选项,如下:
xpose, clear
gen item = _n
接下来,对每行分别求和,就是每个选项的重要性总分了:
egen score = rowtotal(v1-v10)
最后在stata窗口中列示一下每个选项和其对应的得分,并对得分进行排序:
sort score
list item score
因此我们可以得出结论:按喜爱程度对七种水果进行最后的排序为:
(1)苹果 > (4)葡萄 > (2)梨 > (5)橘子 > (7)西瓜 > (6)香蕉 > (3)桃
接着我们还可以用此分数绘图等等。。就留待自己去探索了~
演示数据及dofile,链接:http://pan.baidu.com/s/1o8QaU3C 密码:lnr0