在SPSS中用Python循环保存输出文件

1 投票
2 回答
904 浏览
提问于 2025-04-18 03:59

好的,我最近在玩Python和SPSS,想实现我想要的功能。我可以打开文件并进行修改,但在保存文件(和这些修改)时遇到了问题。我现在的代码是这样的(只用了一所学校在schoollist里):

begin program.
import spss, spssaux
import os
schoollist = ['brow']
for x in schoollist:
   school = 'brow'
   school2 = school + '06.sav'
   filename = os.path.join("Y:\...\Data", school2) #In this instance, Y:\...\Data\brow06.sav
   spssaux.OpenDataFile(filename)

   #--This block are the changes and not particularly relevant to the question--#
   cur=spss.Cursor(accessType='w')
   cur.SetVarNameAndType(['name'],[8])
   cur.CommitDictionary()
   for i in range(cur.GetCaseCount()):
      cur.fetchone()
      cur.SetValueChar('name', school)
      cur.CommitCase()
   cur.close()

   #-- What am I doing wrong here? --#
   spss.Submit("save outfile = filename".)

end program.

有没有什么建议可以让我在循环中使用save outfile呢?谢谢!

2 个回答

1

我对 spssaux.OpenDataFile 这个东西不太熟悉,也找不到相关的文档(除了提到如何在unicode模式下处理SPSS数据文件)。不过我猜测问题可能是,它只是把SPSS数据文件拿来给Python程序块用,但实际上并没有打开这个文件来执行后续的命令。

在这里,我做了一个测试案例,直接用SPSS的命令来处理文件,而不是用 spssaux.OpenDataFile。然后再通过Python插入必要的部分。首先,我们来创建一些假数据来进行测试。

*Prepping the example data files.
FILE HANDLE save /NAME = 'C:\Users\andrew.wheeler\Desktop\TestPython'.
DATA LIST FREE / A .
BEGIN DATA
1
2
3
END DATA.

SAVE OUTFILE = "save\Test1.sav".
SAVE OUTFILE = "save\Test2.sav".
SAVE OUTFILE = "save\Test3.sav".
DATASET CLOSE ALL.

现在,这里是你代码的简化版本。我插入了 LIST ALL. 命令,这样你就可以检查输出,看看它是否把你关心的变量添加到了文件中。

*Sequential opening the data files and appending data name.
BEGIN PROGRAM.
import spss
import os
schoollist = ['1','2','3']
for x in schoollist:
  school2 = 'Test' + x + '.sav'
  filename = os.path.join("C:\\Users\\andrew.wheeler\\Desktop\\TestPython", school2)
  #opens the SPSS file and makes a new variable for the school name
  spss.Submit("""
GET FILE = "%s".
STRING Name (A20).
COMPUTE Name = "%s".
LIST ALL.
SAVE OUTFILE = "%s".
""" %(filename, x,filename))
END PROGRAM.
1

在你的保存调用中,你没有把文件名转换成它实际的值。应该像这样写:
spss.Submit("""save outfile="%s".""" % filename)

撰写回答