如何在SPSS语法中使用循环内的新变量创建多个图形?

时间:2012-12-11 03:20:52

标签: visualization spss

我正在使用SPSS(v.20)并希望使用语法为每个感兴趣的变量创建一个图表。我有两种图形示例:

示例#1:

GGRAPH 
  /GRAPHDATASET NAME="graphdataset" 
    VARIABLES=change_WIraw[LEVEL=ratio] 
    MISSING=LISTWISE REPORTMISSING=NO 
  /GRAPHSPEC SOURCE=VIZTEMPLATE(NAME="Histogram with Normal Distribution"[LOCATION=LOCAL] 
    MAPPING( "x"="change_WIraw"[DATASET="graphdataset"])) 
    VIZSTYLESHEET="Traditional"[LOCATION=LOCAL] 
    LABEL='HISTOGRAM WITH NORMAL DISTRIBUTION: change_WIraw' 
    DEFAULTTEMPLATE=NO.

示例#2:

GGRAPH 
  /GRAPHDATASET NAME="graphdataset" VARIABLES=GROUP change_WIraw MISSING=LISTWISE 
REPORTMISSING=NO 
      /GRAPHSPEC SOURCE=INLINE. 
BEGIN GPL 
  SOURCE: s=userSource(id("graphdataset")) 
  DATA: GROUP=col(source(s), name("GROUP"), unit.category()) 
  DATA: change_CTBWss=col(source(s), name("change_WIraw")) 
  DATA: id=col(source(s), name("$CASENUM"), unit.category()) 
  GUIDE: axis(dim(1), label("GROUP")) 
  GUIDE: axis(dim(2), label("change_WIraw")) 
  SCALE: cat(dim(1), include("1", "2", "3", "4")) 
  SCALE: linear(dim(2), include(0)) 
  ELEMENT: schema(position(bin.quantile.letter(GROUP*change_WIraw)), label(id)) 
END GPL.

我想运行一个循环,以便我可以对其他许多变量进行编程(交换“change_WIraw”)。我很想得到一些指导,谢谢!我希望这是一个正确的论坛。 (我发现了类似的问题,但它们的功能更简单,比如频率。)

2 个答案:

答案 0 :(得分:2)

你最好的选择 - 远 - 就是使用Python。如果你还没有使用Python for SPSS,请参阅www.pythonforspss.org了解一些非常基本的基础知识。

然后尝试这个:用实际的变量名替换change_WIraw to v10(仅在第二行)。假设它们在您的活动DataSet中相邻。然后运行:

begin program.
variables='change_WIraw to v10'
import spss,spssaux
vList=spssaux.VariableDict().expand(variables)
for vrbl in vList:
    spss.Submit("""
GGRAPH 
  /GRAPHDATASET NAME="graphdataset" VARIABLES=GROUP %(vrbl)s MISSING=LISTWISE 
REPORTMISSING=NO 
      /GRAPHSPEC SOURCE=INLINE. 
BEGIN GPL 
  SOURCE: s=userSource(id("graphdataset")) 
  DATA: GROUP=col(source(s), name("GROUP"), unit.category()) 
  DATA: change_CTBWss=col(source(s), name("%(vrbl)s")) 
  DATA: id=col(source(s), name("$CASENUM"), unit.category()) 
  GUIDE: axis(dim(1), label("GROUP")) 
  GUIDE: axis(dim(2), label("%(vrbl)s")) 
  SCALE: cat(dim(1), include("1", "2", "3", "4")) 
  SCALE: linear(dim(2), include(0)) 
  ELEMENT: schema(position(bin.quantile.letter(GROUP*%(vrbl)s)), label(id)) 
END GPL."""%locals())
end program.

对于您指定的每个变量,语法将运行一次,并使用变量名称替换%(vrbl)s

答案 1 :(得分:0)

为多个变量生成单独图形的一种简单方法是将数据集从宽到长整形(即将所有变量放在一列中),然后在图形命令之前使用split file。示例如下。

set seed = 10.
input program.
loop #i = 1 to 1000.
compute V1 = RV.NORM(0,1).
compute V2 = RV.NORM(20,5).
compute V3 = RV.NORM(100,15).
end case.
end loop.
end file.
end input program.
dataset name sim.
execute.

varstocases
/make V from V1 to V3
/index groups.

sort cases by groups.
split file by groups.

* Chart Builder.
GGRAPH
  /GRAPHDATASET NAME="graphdataset" VARIABLES=V MISSING=LISTWISE
  REPORTMISSING=NO
  /GRAPHSPEC SOURCE=INLINE.
BEGIN GPL
 SOURCE: s=userSource(id("graphdataset"))
 DATA: V=col(source(s), name("V"))
 GUIDE: axis(dim(1), label("V"))
 GUIDE: axis(dim(2), label("Frequency"))
 ELEMENT: interval(position(summary.count(bin.rect(V))), shape.interior(
  shape.square))
END GPL.

split file off.

我现在使用的是旧版本,没有viztemplates(所以如果这对他们不起作用,请告诉我)。虽然您可以使用Viztemplates(地图除外)在内联GPL语句中生成任何图形。

如果您希望通过循环更好地控制特定标签或图表的美感,则需要使用宏工具或python,但这是实现您想要的快速方法。