0

我正在使用 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”)。希望得到一些指导,谢谢!我希望这是正确的论坛问。(我发现了类似的问题,但它们是针对更简单的功能,比如频率。)

4

2 回答 2

2

到目前为止,您最好的选择是为此使用 Python。如果您还没有使用 Python for SPSS,请参阅 www.pythonforspss.org 了解一些非常基本的基础知识。

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

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为变量名。

于 2012-12-11T17:45:15.073 回答
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 的旧版本(所以如果这对他们不起作用,请告诉我)。尽管您可以在内联 GPL 语句中生成任何图形,但您可以使用 Viztemplates(地图除外)。

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

于 2012-12-11T15:02:13.533 回答