本文的视频操作地址
首先,在excel2013版本可以直接使用excel选项>加载项>管理(A):excel加载项 点转到按钮。
把分析工具加载进来
之后就可以在数据>数据分析这里点开分析工具
这里面有直方图工具,我觉得比spss的工具好用很多。但是考虑到早先的excel版本不一定有这个功能。所以这里讲一下怎么使用spss和excel联用生成频数表以及直方图
正文开始
excel部分
数据我是使用=norm.inv(rand(),10,2)
随机生成的,数据表大概长成这样:
编码的步骤主要是以下几步
- 求最大值(记为max)
=max(频数表数据[x])
和最小值(记为min)=min(频数表数据[x])
- 求极差(记为range)使用最大值减最小值
- 求组数(记为bins)和组距(记为size),常规是使用极差开平方然后向上取整。不过当极差过小的时候,或许组数直接取10会更合适一些。相应的,组数求好了以后,组距就是极差除以组数向上取整,
=roundup(range/bins)
- 写出变量编码表。变量编码表主要有3列,第一列是组最小值(记为x),第二列为编码,记为code,第三列为标签,记为label。接下来主要讲一下这三列如何生成
编码表的制作
编码表最好不要和数据放在同一个工作表里面,免得到spss处理的时候给自己添加麻烦。
第一列
第一列组最小值比较容易,首先第一行是变量x的最小值(min),之后下面每一行都是上一行的数值加上组距(size)。这里需要注意的是公式的填充会造成坐标偏移,所以组距的坐标需要转成绝对位置。这里假设min的数据在E3
,size的数据在E6
,则频数表第一列的前两行分别是=E3
和=E3+$E$6
,之后把第二行的公式往下填充。
至于填充多少呢,编码表的行数应该是组数bins+1,当然你也可以往下直接拖动,然后看到某个格子比最大值还大就可以到此为止了。
第二列 编码以及回写
这一步就没什么了,可以直接按照序列给第二列各个格子按照1,2,3...编码。主要是怎么把这些编码回写到数据表,让一个数据对应一个编码。
这里就要依靠vlookup公式了。vlookup的默认模式就是模糊查找。关于模糊查找之前有一篇文章做了比较多的讲解,这里不多作重复。这里使用的公式如下图所示:
第三列 标签(label)
label这一列是等一下交给spss去给变量值添加标签用的,这里使用excel的文本合成公式,以第三列第一行为例:="'"&[@x]&"~"&H4&"'"
这是为了生成类似'5.926.92'这样的两边有单引号,前后分别是当前组的最小值和最大值的数值标签。其中5.92和6.92是不断变化的,所以分别使用[@x]和相对当前单元格的坐标H4引用这两个值。而像单引号,这些符号就通过"'"(两个双引号括住一个单引号),""来加入到公式里。至于变量和不同的字符之间就通过&符号连接
SPSS部分。
现在excel部分的工作已经完成了。接下来要在spss里面打开我们的数据。在这之前最好保证当前工作表里只有数据,没有编码表。
接下来用spss打开刚才的excel表(记得在打开数据的时候文件类型选择excel表):
之后可以看到数据已经都在了,从变量视图可以看到,编码这里现在还没有标签,如果现在做频数表(分析>描述统计>频率)得到的是下表:
这些个123是什么东西呢?所以还是做一下数值编码才方便后续分析。但是spss的数值编码非常的蠢,只能一个按钮一个按钮的点击输入。对于蠢人来说确实是这样的。实际上spss是支持命令输入的。
使用spss命令(syntax)
依次点击文件>新建>语法(file>new>syntax),之后可以看到这个界面
右下方区域输入命令,然后全选,点击工具栏上的绿色三角箭头运行就可以运行命令了。关于value labels命令这里做一下说明,一般这个命令的形式是这样的:
VALUE LABELS
变量名称
变量值1 '标签1'
变量值2 '标签2'
...
变量值n '标签n'
EXECUTE
所以具体到我们这个例子,命令就是
VALUE LABELS
编码
1 '4.43~6.43'
2 '6.43~8.43'
...
EXECUTE
而中间这些内容可以直接复制粘贴实现:
全选,点运行(绿色三角),接下来再生成频数表就像下表所示了: