在SPSS Python essentials中,我可以获取返回给Python的SPSS变量的值以供进一步使用吗?

在SPSS Python essentials中,我可以获取返回给Python的SPSS变量的值以供进一步使用吗?,python,variables,namespaces,spss,Python,Variables,Namespaces,Spss,我有一个数据库,每个案例都保存着关于手写数字的信息,例如: Digit1Seq:按12位的顺序绘制“1” Digit1Ht:数字“1”的高度 Digit1Width:它的宽度 Digit2Seq:数字“2”的信息相同 最多为数字“12” 我发现我现在需要的信息组织也有点不同。特别是我想要一个新的变量,第一个数字的高度和宽度被写入,第二个数字的高度和宽度等等,作为SPSS变量 第一数字 FirstDigitWidth 十二位数宽度 下面是我在SPSS中编写的Python程序,它应该是一个非常简单的

我有一个数据库,每个案例都保存着关于手写数字的信息,例如:

Digit1Seq:按12位的顺序绘制“1”

Digit1Ht:数字“1”的高度

Digit1Width:它的宽度

Digit2Seq:数字“2”的信息相同

最多为数字“12”

我发现我现在需要的信息组织也有点不同。特别是我想要一个新的变量,第一个数字的高度和宽度被写入,第二个数字的高度和宽度等等,作为SPSS变量

第一数字

FirstDigitWidth

十二位数宽度

下面是我在SPSS中编写的Python程序,它应该是一个非常简单的计算,但它遇到了一种名称空间问题:

BEGIN PROGRAM PYTHON.

import spss
indices = ["1", "2", "3","4","5", "6", "7", "8", "9", "10", "11", "12"]
seq=0
for i in indices:
  spss.Submit("COMPUTE seq = COMDigit" + i + "Seq.")
  spss.Submit("EXECUTE.")
  spss.Submit("COMPUTE COM" + indices[seq] + "thWidth =  COMDigit" + i + "Width.")
  spss.Submit("COMPUTE COM" + indices[seq] + "thHgt =  COMDigit" + i + "Hgt.")
  spss.Submit("EXECUTE.")

END PROGRAM.
这里的错误很明显:第一个
COMPUTE
命令中
seq
的值没有返回到Python,因此在接下来的两个
COMPUTE
命令中可以发生正确的事情。Python的
seq
值没有改变,因此我最终使用SPSS代码,它只给我两个变量(
COM1thWidth
COM1Hgt
),其中
COMDigit1Width
COMDigit2Width
,等等

有没有办法让Python每次都访问SPSS的
seq
值,以便字符串连接将创建正确的
COMPUTE
?还是我只是想错了

已经在谷歌上广泛搜索过了,但没有找到这样做的方法

由于我不太熟悉在SPSS中使用Python(而不是在SPSS中使用wiz),因此可能有一种更简单的方法来实现这一点


欢迎所有建议。

有很多方法可以通过Python处理统计数据保存的案例数据,但是必须使用spss.Cursor、spssdata.spssdata或spss.Dataset类显式读取案例数据。它不存在于Python名称空间中

在这种情况下,最简单的方法就是在后面的参考文献中用公式代替seq。还有很多其他方法可以解决这个问题


另外,要去掉那些EXECUTE调用。它们只是强制传递不必要的数据。统计数据将根据命令流在需要时自动传递数据。

嗨,我刚刚偶然发现了这一点,您可能已经继续前进,但它可能会帮助其他人。我并不认为你实际上需要让Python访问SPSS值。我认为这样做可能会奏效:

BEGIN PROGRAM PYTHON.

import spss

for i in range(1,13):
  k = "COMPUTE seq = COMDigit" + str(i) + "Seq."
  l = "Do if seq = " + str(i)+ "."
  m = "COMPUTE COM" + str(i) + "thWidth =  COMDigit" + str(i) + "Width."
  n = "COMPUTE COM" + str(i) + "thHgt =  COMDigit" + str(i) + "Hgt."
  o = "End if."
  print k
  print l
  print m
  print n
  print o
  spss.Submit(k)
  spss.Submit(l)
  spss.Submit(m)
  spss.Submit(n)
  spss.Submit(o)

spss.Submit("EXECUTE.")
END PROGRAM.

但我必须查看数据,以确保我正确理解您的问题。此外,打印的东西使代码看起来很难看,但这是我唯一能控制引擎盖下发生的事情的方法。干杯

将SPSS变量数据转换为Python变量以进行操作的最简单方法可能是使用SPSS.Dataset类

为此,您需要: 1.)SPSS数据集的数据集名称 2.)要从中提取数据的变量的名称或其在数据集中的索引

如果要从中提取数据的变量名为'seq'(我相信这是您的问题),则可以使用以下内容:

BEGIN PROGRAM PYTHON.
from __future__ import with_statement
import spss
with spss.DataStep()
    #the lines below create references to your dataset,
    #to its variable list, and to its case data
    lv_dataset = spss.Dataset(name = <name of your SPSS dataset>)
    lv_caseData = lv_dataset.cases
    lv_variables = lv_dataset.varlist

    #the line below extracts all the data from the SPSS variable named 'seq' in the dataset referenced above into a list
    #to make use of an SPSS cases object, you specify in square brackets which rows and which variables to extract from, such as:
    #Each row you request to be extracted will be returned as a list of values, one value for each variable you request data for
    #lv_theData = lv_caseData[rowStartIndex:rowEndIndex, columnStartIndex:columnEndIndex]

    #This means that if you want to get data for one variable across many rows of data, you will get a list for each row of data, but each row's list will have only one value in it, hence in the code below, we grab the first element of each list returned
    lv_variableData = [itm[0] for itm in lv_caseData[0:len(lv_caseData), lv_variables['seq'].index]]

END PROGRAM.
开始编写PYTHON程序。
from _ufuture _;使用u语句导入
导入spss
使用spss.DataStep()
#下面的行创建对数据集的引用,
#其变量列表和案例数据
lv_dataset=spss.dataset(名称=)
lv_caseData=lv_dataset.cases
lv_variables=lv_dataset.varlist
#下一行将上述数据集中名为“seq”的SPSS变量中的所有数据提取到一个列表中
#要使用SPSS案例对象,请在方括号中指定要从中提取的行和变量,例如:
#请求提取的每一行都将作为值列表返回,每个变量对应一个值
#lv_theData=lv_caseData[rowStartIndex:rowEndIndex,columnStartIndex:ColumEndIndex]
#这意味着,如果您希望跨多行数据获取一个变量的数据,那么您将获得每行数据的列表,但每行的列表中只有一个值,因此在下面的代码中,我们获取返回的每个列表的第一个元素
lv_variableData=[itm[0]表示lv_案例数据中的itm[0:len(lv_案例数据),lv_变量['seq'].索引]]
结束程序。

谢谢你的建议,但我不太明白;“替换公式”是指spss.Submit(“计算COM”+索引[“COMDigit”+i+“Seq”]+“thWidth=COMDigit”+i+“Width”)??看起来它有相同的名称空间问题。还是我错过了你的建议?谢谢显然,JKP不会作进一步解释。如果他/她每次回到这里,请允许我指出,如果你不真正解释其中任何一种,回答“有很多方法”和“有很多其他方法来解决这个问题”是多么令人恼火的无用。真的很没用。