如何从python中的spss xml输出中检索表

时间:2016-02-05 20:04:56

标签: python xml spss

我试图从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中的代码注释,此函数的最小输入似乎是tagtableSubtype。这里的tableSubtype是在spss输出中找到的“OMS表子类型”的字符串Correlation Matrix

任何人都可以帮我解决这个问题吗?或者告诉我如何调试这个问题?

2 个答案:

答案 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
乔恩佩克