使用循环将50多个.dat文件导入SPSS

时间:2015-01-22 18:20:42

标签: foreach stata spss

我需要将多个.dat文件(美国每个状态一个,导入数年)导入SPSS,然后将每个文件保存为Stata .dta数据集。这些文件具有带有年份和州名缩写的标准化名称,例如: data_2000_AL.dat。我有SPSS代码来读取和格式化每个文件,在这里逐个指定每个州 - 年文件的路径,然后运行代码。

在Stata中,我会通过设置forvalues / foreach循环来节省时间,以便贯穿每年和每个州,即:

forvalues y=2000/2010 {
    foreach s in AL AK AZ AR CA ... {
        [CODE TO RUN STATA .DCT FILES THAT READ/FORMAT .DAT FILES]
        save data_`y'_`s'.dta, replace
    }
}

不幸的是,我只有SPSS代码(不是Stata字典文件),而且我不熟悉SPSS。有没有办法在SPSS中复制上面的Stata代码?

1 个答案:

答案 0 :(得分:0)

您可以使用宏来执行此操作或使用Python。以下是如何使用宏进行简要说明。

DEFINE !StateLoop (!POSITIONAL = !CMDEND) 
!DO !I !IN (!1) 
  !DO !J = 2000 !TO 2002 
    !LET !F = !QUOTE(!CONCAT(!I,"_",!J,".dat")) 
    ECHO !F. 
    *You import/export commands here.
  !DOEND 
!DOEND 
!ENDDEFINE. 

!StateLoop PA NY NJ.

随后打印出来:

PA_2000.dat 
PA_2001.dat 
PA_2002.dat 
NY_2000.dat 
NY_2001.dat 
NY_2002.dat 
NJ_2000.dat 
NJ_2001.dat 
NJ_2002.dat

只是使用宏运算符!CONCAT来为每个状态生成必要的字符串并循环它们。

如果您宁愿在python中执行此操作,则可以使用spss.Submit和字符串替换以类似的方式:

BEGIN PROGRAM Python.
import spss
sa = ["PA","NY","NJ"]
for i in range(2):
  for j in sa:
    f = j + "_" + str(2000 + i)
    spss.Submit("""
                ECHO "%s".
                """ % (f))
END PROGRAM.