我想为我的所有变量生成箱图(总共90个)。
这是我将用于一个变量的语法:
GGRAPH
/GRAPHDATASET NAME="graphdataset" VARIABLES=AnScol MISSING=LISTWISE
REPORTMISSING=NO
/GRAPHSPEC SOURCE=INLINE.
BEGIN GPL
SOURCE: s=userSource(id("graphdataset"))
DATA: AnScol =col(source(s), name("AnScol"))
DATA: id=col(source(s), name("$CASENUM"), unit.category())
COORD: rect(dim(1), transpose())
GUIDE: axis(dim(1), label("AnScol"))
ELEMENT: schema(position(bin.quantile.letter(AnScol)), label(id))
END GPL
如何在不逐个更改每个变量的情况下为所有变量执行此操作?
提前谢谢!
Maxime M.
答案 0 :(得分:0)
这里我将举几个不同的方式。首先,让我们制作一些假数据 - 十个数字变量和一个表示数据集的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.