您好,我正在尝试将 Python 脚本转换为独立的 Python 脚本,但这不能按预期工作。输出发布到 Python 窗口,而不是普通的 SPSS 输出窗口 - 我该如何解决这个问题?
import spss
import SpssClient
import spssaux
from collections import defaultdict
import time
try:
SpssClient.StartClient()
SpssDataDoc=SpssClient.GetActiveDataDoc()
print SpssDataDoc.GetDatasetName()
print spssaux.GetActiveDatasetName()
spssaux.spssaux.openDataFile("c:\bla.sav", filetype='sav')
spss.spss.SetOutput("off")
filterStr = """USE ALL.
COMPUTE filter_$=({0}and category = {1}).
FORMATS filter_$ (f1.0).
FILTER BY filter_$.
EXECUTE."""
regressionStr ="""
REGRESSION
/DESCRIPTIVES MEAN STDDEV N
/MISSING LISTWISE
/STATISTICS COEFF OUTS R ANOVA COLLIN TOL
/CRITERIA=PIN(.05) POUT(.10)
/NOORIGIN
/DEPENDENT TotalLoyaltyScore
/METHOD=ENTER var {0}
/RESIDUALS DURBIN."""
#initializing Lists
CategoryDict = {1 : "Washing", 2: "dishwasher", 3: "Oven", 4:"Fridge", 5:"Vacuum"}
CategoryVarDict = {1 : " recQ21r8 recQ21r9 recQ21r10 recQ21r11 recQ21r12 recQ21r13"}
CategoryVarDict[2] = " recQ21r14 recQ21r15 recQ21r16 recQ21r17 recQ21r18 recQ21r19"
CategoryVarDict[3] = " recQ21r20 recQ21r21 recQ21r22 recQ21r23 recQ21r24"
CategoryVarDict[4] =" recQ21r25 recQ21r26 recQ21r27 recQ21r28 recQ21r29"
CategoryVarDict[5] = " recQ21r30 recQ21r31 recQ21r32 recQ21r33 recQ21r34"
VarDict = spssaux.spssaux.VariableDict()
#vars = spssaux.spssaux.VariableDict().variables
#for var in vars:
# print var
ContinentVar = VarDict["Continent"]
GenderVar = VarDict["Q25"]
SchoolVar = VarDict["Q28"]
AgeVar = VarDict["AgeEasy"]
ContinentVL = spssaux.spssaux.GetValueLabels(ContinentVar)
GenderVL = spssaux.spssaux.GetValueLabels(GenderVar)
SchoolVL = spssaux.spssaux.GetValueLabels(SchoolVar)
AgeVL = spssaux.spssaux.GetValueLabels(AgeVar)
ToProcess = [ContinentVar, GenderVar, SchoolVar, AgeVar]
SpssOutputDoc = SpssClient.GetDesignatedOutputDoc()
for Category in CategoryDict:
for Item in ToProcess:
ValueLabel = spssaux.spssaux.GetValueLabels(Item)
for Labels in ValueLabel:
if not ValueLabel[Labels] == "no Answer":
SpssClient.LogToViewer("Category: " + CategoryDict[Category] + " Item: " + ValueLabel[Labels] +"\n")
# SpssOutputItem=SpssOutputDoc.CreateHeaderItem ("Category: " + CategoryDict[Category] + " Item: " + ValueLabel[Labels])
# itemlist = SpssOutputDoc.GetOutputItems()
# itemListLength = itemlist.Size()
# root = itemlist.GetItemAt(0).GetSpecificType()
# root.InsertChildItem(SpssOutputItem,root.GetChildCount())
spss.spss.Submit("title " + "" + "Category: " + CategoryDict[Category] + " Item: " + ValueLabel[Labels] + "" + "")
#Filtering
FirstPart = str(Item) + " =" + Labels + " "
realFilter = filterStr.format(FirstPart, Category)
#SpssClient.LogToViewer(realFilter)
spss.spss.Submit(realFilter.replace('\t',''))
#Regression
realRegression = regressionStr.format(CategoryVarDict[Category])
spss.spss.Submit(realRegression.replace('\t',''))
OutputItems = SpssOutputDoc.GetOutputItems()
for index in range(OutputItems.Size()):
OutputItem = OutputItems.GetItemAt(index)
if OutputItem.GetType() == SpssClient.OutputItemType.HEAD and OutputItem.GetDescription() == "Regression":
TitleElem = OutputItems.GetItemAt(index-1)
Spec = TitleElem.GetSpecificType()
TitleText = Spec.GetTextContents()
print(TitleText)
OutputItem.SetDescription(TitleText)
SItem = OutputItem.GetSpecificType()
TitleChild = SItem.GetChildItem(0)
STitleChild = TitleChild.GetSpecificType()
STitleChild.SetTextContents(TitleText)
# var title = Elem.GetChildItem(0)
# title.SetTextContents(TitleText)
finally:
SpssClient.StopClient()