在指定文件夹中可用时合并文件

时间:2017-05-04 11:51:24

标签: python merge match spss

我想将不同的SPSS文件合并到一个新文件中。我计划在SPSS中使用MATCH命令。另请参阅我关于该主题的另一个问题(Combining add cases and add variables by merging files in SPSS)。

但是,我想自动合并的文件数并不总是相同。这取决于客户被请求的数据。另一方面,每个文件将始终在同一MATCH命令中使用。

例如,我们有7个文件,其中包含有关健康状况的数据。当客户请求所有数据时,应将所有7个文件合并为一个新文件。但是,当另一个客户仅请求3个文件中的数据时,只应将这3个文件合并为一个新文件。

我想知道是否有人知道如何实现这一目标。也许文件应放在特定的文件夹中,以便现有的文件可以加载/匹配?应忽略不存在的文件。也许是一种&if-then-then' -statement?

非常感谢提前!

2 个答案:

答案 0 :(得分:2)

您可以为文件夹中的所有文件生成并运行MATCH FILES命令,或者使用几行Python代码生成和匹配通配符名称的所有文件。这是一个合并特定文件夹中所有sav文件的示例。

begin program.
import spss, glob

cmd = ["MATCH FILES"]

for f in glob.glob(r"c:/temp/*.sav"):
    cmd.append("""/FILE="%s" """ % f)
spss.Submit(cmd)
end program.

答案 1 :(得分:1)

我要做的是以下内容。可能不是最有效的方式,但它工作正常......

我想你有一个文件,里面有每个客户的记录,还有7个变量表明需要每个文件,如下所示:

data list /ID 1-3 (A) FIL1 to FIL7 5-11.
begin data
001 1100101
002 0100110
003 0011111
004 1111111
end data.

我总是喜欢以下老式方法。没有宏,没有python!

str matchcommand (a2000).
compu matchcommand eq "match files".
do rep a = FIL1 to FIL7
      /b = "C:\fil1.sav" "C:\fil2.sav" "C:\fil3.sav" "C:\fil4.sav" 
           "C:\fil5.sav" "C:\fil6.sav" "C:\fil7.sav". 
if a matchcommand eq concat(matchcommand, "\n  /file='", b, "'").
end rep.

compu matchcommand eq concat(matchcommand, " /by id.")

matchcommand中的字符串可以使用write写入.sps文件 命令。如果为这些语法添加保存命令,则可以使用insert file轻松调用语法位或文件。

使用宏或Python比这种方法更灵活。然而,这个我永远记得的,我可以在任何时间记下来。它可能生锈,但速度很快。这就是我喜欢它的原因。