在这里,我将说明几种不同的方式。首先,让我们制作一些假数据 - 十个数值变量和一个代表数据集 Id 变量的字符串。
*Make fake data.
MATRIX.
SAVE {UNIFORM(100,10)} /VARS = V1 TO V10 /OUTFILE = *.
END MATRIX.
DATASET NAME Sim.
COMPUTE MyId = $casenum.
FORMATS MyId (F3.0).
ALTER TYPE MyId (A3).
一个简单的解决方案是使用EXAMINE 明智地绘制箱线图变量。这可通过旧版对话类型图表获得。
*If the variables all have the same scale.
EXAMINE VARIABLES=V1 TO V10
/COMPARE VARIABLE
/PLOT=BOXPLOT
/STATISTICS=NONE
/NOTOTAL
/ID=MyId
/MISSING=LISTWISE.
这很好用,因为所有变量都是按相同的比例构造的。它没有异常值 - 但如果存在异常值,它们将在上图中标有 MyId 变量。
您也可以使用GGRAPH 来完成非常相似的事情。不过,我在这里放了异常值,而在 GGRAPH 代码中,您不能轻易地创建异常值变量。
*Make one variable not on the same scale and have outliers.
COMPUTE V1 = V1*100.
IF MyId = " 5" V1 = 250.
EXECUTE.
*Synonymous with GGRAPH - cant label outliers though.
GGRAPH
/GRAPHDATASET NAME="graphdataset" VARIABLES=V1 TO V10
TRANSFORM=VARSTOCASES(SUMMARY="V" INDEX="Vars")
/GRAPHSPEC SOURCE=INLINE.
BEGIN GPL
SOURCE: s=userSource(id("graphdataset"))
DATA: Vars=col(source(s), name("Vars"), unit.category())
DATA: V=col(source(s), name("V"))
ELEMENT: schema(position(bin.quantile.letter(Vars*V)))
END GPL.
您可以在此处看到,因为 V1 现在处于不同的比例,您无法有效地在一个图上可视化其他变量。在现实的数据集中,这就是将会发生的事情。要进行单独的绘图,您可以听取 eli-k 的建议并使用 Python 为每个变量提交不同的绘图。这是一个例子。
*If they don't - and you want different scales, Python programmability can do that.
BEGIN PROGRAM Python.
import spss, string
#get the variable list and the variable type
varList = [(spss.GetVariableName(i),spss.GetVariableType(i)) for i in range(spss.GetVariableCount())]
#make a template to submit boxplot, see https://andrewpwheeler.wordpress.com/2015/02/22/string-substitution-in-python-continued/
c = string.Template("""*Boxplots.
GGRAPH
/GRAPHDATASET NAME="graphdataset" VARIABLES=$var MyId MISSING=LISTWISE REPORTMISSING=NO
/GRAPHSPEC SOURCE=INLINE.
BEGIN GPL
SOURCE: s=userSource(id("graphdataset"))
DATA: V=col(source(s), name("$var"))
DATA: MyId=col(source(s), name("MyId"), unit.category())
COORD: rect(dim(1), transpose())
GUIDE: axis(dim(1), label("$var"))
ELEMENT: schema(position(bin.quantile.letter(V)), label(MyId))
END GPL.
""")
#loop over the varlist and plot if numeric
for i in varList:
if i[1] == 0:
spss.Submit(c.substitute(var=i[0]))
END PROGRAM.
现在您可以看到每个变量都有自己的箱线图以快速检查(并标有 ID)。
等等。最后,完成类似操作的一种方法是将所有数值变量重新整形为一列,然后使用SPLIT FILE。
*Varstocases and split file - need to know which variables are numeric to begin with.
VARSTOCASES /MAKE V FROM V1 TO V10 /INDEX VOrig.
SORT CASES BY VOrig.
SPLIT FILE BY VOrig.
GGRAPH
/GRAPHDATASET NAME="graphdataset" VARIABLES=V MyId MISSING=LISTWISE REPORTMISSING=NO
/GRAPHSPEC SOURCE=INLINE.
BEGIN GPL
SOURCE: s=userSource(id("graphdataset"))
DATA: V=col(source(s), name("V"))
DATA: MyId=col(source(s), name("MyId"), unit.category())
COORD: rect(dim(1), transpose())
GUIDE: axis(dim(1), label("V"))
ELEMENT: schema(position(bin.quantile.letter(V)), label(MyId))
END GPL.
SPLIT FILE OFF.