我试图从spssaux.CreateXMLOutput
获取一些表格输出。 spss命令从spss.submit
验证。以下是我的代码中的示例:
varList = ["QPOVTY", "PERCAP", "MDGRENT", "QRICH200K", "QNOAUTO", "QSSBEN", "QED12LES",
"QFEMALE", "QAGEDEP", "QNATAM", "QHISP", "QASIAN", "QFEMLBR", "QSERV", "QEXTRCT",
"QCVLUN", "QFHH", "QFAM", "PRENTER", "QMOHO", "QUNOCCHU", "MHSEVAL"]
spssPCASyntax = ["FACTOR //VARIABLES " + ' '.join(varList) + " //MISSING LISTWISE" +
" //ANALYSIS " + ' '.join(varList) +
" //PRINT UNIVARIATE INITIAL CORRELATION KMO EXTRACTION ROTATION FSCORE" +
" //CRITERIA MINEIGEN(1) ITERATE(25)" +
" //EXTRACTION PC" +
" //CRITERIA ITERATE(25)" +
" //ROTATION VARIMAX" +
" // SAVE REG(ALL)" +
" //METHOD=CORRELATION."]
tag = spssaux.CreateXMLOutput(spssPCASyntax, omsid = 'Factor Analysis')
CorM = spssaux.getValuesFromXmlWorkspace(tag, 'Correlation Matrix')
print CorM
有关于CorM = spssaux.getValuesFromXmlWorkspace(tag, 'Correlation Matrix')
[errLevel 12] Invalid handle object.
我尝试调试这个并深入研究spssaux模块,但无法找到解决方法。我检查了调用层次结构,发现在DOS模式下无法查看的某些代码中嵌入了一个函数(代码只显示为无法识别的符号)。
根据spssaux.getValuesFromXmlWorkspace
中的代码注释,此函数的最小输入似乎是tag
和tableSubtype
。这里的tableSubtype
是在spss输出中找到的“OMS表子类型”的字符串Correlation Matrix
。
任何人都可以帮我解决这个问题吗?或者告诉我如何调试这个问题?
答案 0 :(得分:0)
我将在星期六试着看一下(我是这个模块的作者),但我想知道Statistic,操作系统和spssaux版本的版本。我还想提供一些显示问题的小数据样本。
答案 1 :(得分:0)
这里有几个问题。首先,CreateXMLOutput的返回代码是(标记,错误代码)的双重代码。您应该始终检查错误代码
tag,errcode = spssaux.CreateXMLOutput(...
您传递给getValuesFromXmlWorkspace的标记只是第一个元素。在这种情况下,错误代码是1001,并且没有创建输出对象,因此尝试检索输出会导致错误,因为XPath表达式求值程序无法找到该对象,并且传入的标记项是双重的,无论如何,而不是实际的标签,所以参数是无效的。
那么问题就变成了为什么FACTOR命令失败了。有两个问题。一个是语法无效,因为所有//应该只是/。因素可能会容忍,但这是不正确的。
其次,汇编命令可能超过最大行长度。我只是加入像var这样的varList变量
varList =“\ n”.join(“xxx”,“yyy:等等
然后将整个命令连接到带有换行符的单个字符串中:
spssPCASyntax =“\ n”.join(“FACTOR VARIABLES”,...)
并将该字符串传递给CreateXMLOutput。
提示:在命令字符串中使用命名参数替换组装命令比使用“+”连接更容易。例如,
cmd =“”“commandname / varlist%(varList)s
/ someoption
/其他选项“”“%locals()
这更具可读性且不易出错。
最后,如果您尝试找到引发错误的代码行,这里有一个提示。默认情况下,Statistics会抑制错误将生成的回溯,因为它对大多数用户没有意义。但是,如果在启动Statistics之前创建名为SPSS_EXTENSIONS_RAISE且值为true的环境变量,则会显示回溯,从而可以在代码中查明错误位置。
创建环境变量的方式是特定于操作系统的,但在Windows上,您可以使用“控制面板/系统/高级/环境变量”来执行此操作。不同的Windows版本中确切的措辞和路径会有所不同。
HTH
乔恩佩克