【问题标题】:Import 50+ .dat files into SPSS using a loop使用循环将 50 多个 .dat 文件导入 SPSS
【发布时间】:2015-01-22 18:20:41
【问题描述】:

我需要将多个 .dat 文件(美国每个州一个,持续数年)导入 SPSS,然后将每个文件保存为 Stata .dta 数据集。这些文件具有带有年份和州缩写的标准化名称,例如数据_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 代码?

【问题讨论】:

    标签: foreach stata spss


    【解决方案1】:

    您可以使用宏来执行此操作,也可以使用 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.
    

    【讨论】:

    • 读取数据的代码将是GET TRANSLATEDATA LIST(您可以将数据列表与.dat 文件一起使用,因为它们是纯文本)。保存到 Stata 将是 SAVE TRANSLATE。不过,Stata 肯定能够直接读取 .dat 文件吗?
    • 也许像@Andy W 我对问题是什么感到困惑。看来您有 Stata 代码,可以读取 .dat 文件并导出 Stata .dta 文件。那为什么还要在 SPSS 中做呢?
    • 很遗憾,我没有 Stata 代码。我只是想通过使用 Stata 代码作为说明来解释我需要在 SPSS 中做什么(我是 Stata 用户)。 Andy W -- 如果你有相应的字典文件 (.dct),Stata 可以读取 .dat 文件,但遗憾的是我没有。我只是让 SPSS 代码一次读取一个文件,在开始时您指定要读取的文件的文件路径(例如“D:\DATA\data_2000_AL.DAT”)。所以我必须填写 Alabama 文件的路径,然后运行并保存,然后填写 Arizona 文件的路径,然后运行并保存,等等。谢谢!
    猜你喜欢
    • 2015-11-27
    • 1970-01-01
    • 2012-07-24
    • 2015-09-26
    • 1970-01-01
    • 2016-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多