2017-05-04 7 views
1

異なるSPSSファイルを1つの新しいファイルにマージしたいと思います。私はこれのためにSPSSでMATCHコマンドを使用する予定です。その話題に関する私からの別の質問も参照してください(Combining add cases and add variables by merging files in SPSS)。指定されたフォルダにある場合にファイルをマージする

ただし、自動的にマージしたいファイルの数は必ずしも同じではありません。これは、顧客が要求されたデータに依存します。一方、各ファイルは常に同じMATCHコマンドで使用されます。

たとえば、健康に関するデータを含む7つのファイルがあります。顧客がすべてのデータを要求したら、7つのファイルすべてを1つの新しいファイルにマージする必要があります。しかし、別の顧客が3つのファイルからのデータのみを要求した場合、これらの3つのファイルのみを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もありません! matchcommandで

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.") 

文字列がwrite コマンドを使用して.spsファイル(複数可)に書き込むことができます。これらの構文にsaveコマンドを追加すると、insert fileを使用して簡単に構文ビットまたはファイルを呼び出すことができます。

マクロやPythonを使用する方が、このアプローチよりはるかに柔軟性があります。しかし、私はいつもこのことを覚えています。それは錆びているかもしれませんが、速いです。だから私はそんなに好きです。

2

フォルダ内のすべてのファイル、またはワイルドカード名に一致するすべてのファイルに対して数行のPythonコードを使用して、MATCH FILESコマンドを生成して実行することができます。次に、特定のフォルダ内のすべての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. 
+0

'by'コマンドがありませんか? –

+0

必要に応じて、コマンドに任意の修飾子を追加する必要があります。 – JKP

関連する問題