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

2024-10-01 13:40:58 发布

您现在位置:Python中文网/ 问答频道 /正文

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

数字1seq:当以12位数字的顺序画出“1”时

Digit1Ht:数字“1”的高度

Digit1Width:它的宽度

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

直到数字“12”

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

第一位数

第一位数。。。在

十二指宽

下面是我在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和{}),其中COMDigit1WidthCOMDigit2Width等被写入其中。在

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

已经在谷歌上广泛搜索,但找不到办法。在

由于我刚开始在SPSS中使用Python(而不是使用SPSS的wiz那么多),可能有一种更简单的方法来实现这一点。在

欢迎所有建议。在


Tags: 命令com信息execute宽度高度数字program
3条回答

有很多方法可以通过Python处理Statistics保存的案例数据,但是必须使用spss光标, spssdata.spssdata,或spss.数据集班级。它不在Python名称空间中。在

在这种情况下,最简单的方法就是将seq的公式替换到后面的引用中。有很多其他方法可以解决这个问题。在

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

将SPSS变量数据转换为Python变量进行操作的最简单方法可能是使用spss.数据集班级。在

为此,您需要: 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访问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.

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

相关问题 更多 >