我在单个文件夹中有.sav格式的24个spss文件。所有这些文件都具有相同的结构。我想在所有这些文件上运行相同的语法。是否可以为此在spss中编写代码?
答案 0 :(得分:1)
您可以使用SPSSINC PROCESS FILES
用户提交的命令执行此操作或编写自己的宏。因此,首先让我们创建一些非常简单的假数据。
*FILE HANDLE save /NAME = "Your Handle Here!".
*Creating some fake data.
DATA LIST FREE / X Y.
BEGIN DATA
1 2
3 4
END DATA.
DATASET NAME Test.
SAVE OUTFILE = "save\X1.sav".
SAVE OUTFILE = "save\X2.sav".
SAVE OUTFILE = "save\X3.sav".
EXECUTE.
*Creating a syntax file to call.
DO IF $casenum = 1.
PRINT OUTFILE = "save\TestProcess_SHOWN.sps" /"FREQ X Y.".
END IF.
EXECUTE.
现在我们可以使用SPSSINC PROCESS FILES
命令指定文件夹中的sav文件,并将TestProcess_SHOWN.sps
语法应用于每个文件。
*Now example calling the syntax.
SPSSINC PROCESS FILES INPUTDATA="save\X*.sav"
SYNTAX="save\TestProcess_SHOWN.sps"
OUTPUTDATADIR="save" CONTINUEONERROR=YES
VIEWERFILE= "save\Results.spv" CLOSEDATA=NO
MACRONAME="!JOB"
/MACRODEFS ITEMS.
答案 1 :(得分:1)
另一种(不太先进)的方法是使用命令INSERT
。为此,重复GET
每个sav文件,使用INSERT
运行语法,并保存文件。可能是这样的:
get 'file1.sav'.
insert file='syntax.sps'.
save outf='file1_v2.sav'.
dataset close all.
get 'file2.sav'.
insert file='syntax.sps'.
save outf='file2_v2.sav'.
etc etc.
祝你好运!
答案 2 :(得分:0)
如果您需要运行的语法完全独立于文件,那么您可以使用:INSERT FILE = 'Syntax.sps'
或将代码放在宏中,例如。
Define !Syntax ()
* Put Syntax here
!EndDefine.
然后您可以“手动”运行其中任何一个;
get file = 'file1.sav'.
insert file='syntax.sps'.
save outfile ='file1_v2.sav'.
或者
get file = 'file1.sav'.
!Syntax.
save outfile ='file1_v2.sav'.
或者如果文件遵循相当严格的命名结构,您可以将上述任何一个嵌入到python的简单位中;
Begin Program.
imports spss
for i in range(0, 24 + 1):
syntax = "get file = 'file" + str(i) + ".sav.\n"
syntax += "insert file='syntax.sps'.\n"
syntax += "save outfile ='file1_v2.sav'.\n"
print syntax
spss.Submit(syntax)
End Program.