2017-11-06 14 views
2

ケースを複数の異なるファイルに分割する必要があるデータセットがあります。 は、現在、私が実行している:それは25枚のコピーを作るSPSS 23構文:単純なマクロループ

DATASET COPY DATA1 WINDOW = FRONT. 
... (repeats) ... 
DATASET COPY DATA25 WINDOW = FRONT. 

後に各1上のコマンドは、私が欲しいだけのケースを選ぶと、DATA25を通じて、DATA1として保存する場合、私は選択の束を使用します。代わりに、ほぼ同一のシンタックスの25行を必要とする

LET %X = 1 to 25 
    loop 
    DATASET COPY DATA'%X' WINDOW = FRONT. 
    end loop 

を:私が言うことができるように

は、私は何をしたいマクロまたはループのいくつかの種類が設定されています。これは単なる非常に単純なユースケースですが、私はそこから分岐して、この種の構文を使用して他のものをたくさんやりたいと考えています。たとえば、複数のファイルを開き、その部分のワイルドカードを置くことができますファイル名が変更されたり、ワイルドカードを使用しているので、「シート1」を開き、Excel 2から10まで繰り返すことができます。 これはSPSSで何かできますか? PythonまたはR拡張が必要ですか?私がこれまで見てきたことはすべて、一連の変数に対して一連のコマンドを実行することでループすることができます。

答えて

1

SPSSバージョン23を使用している場合は、Python拡張機能をインストールする必要はありません。これは元のSPSSインストールに含まれています。 PythonまたはRを使用したくない場合は、SPSSマクロを使用して構文だけで説明したことを実行できます。!define - !enddefineを参照してください。

たとえば、次のマクロはループを25回繰り返します。ループごとに元のファイルに移動し、DATA#というデータセットにコピーし、ケースを選択してMyFilterVar=#を選択し、ケースを別のファイルに保存しますデータセットのような名前:あなたは、元のファイルに名前を付けた後、マクロを呼び出すために必要なマクロを定義した後

define CreateCopies() 
!do !i=1 !to 25 
dataset activate Orig. 
dataset copy !concat('DATA',!i). 
dataset activate !concat('DATA',!i). 
select if MyFilterVar=!i. 
!let !FileName=!concat('MyPath\DATA',!i,".sav") 
save out=!quote(!FileName). 
!doend 
!enddefine. 

dataset name orig. 
CreateCopies. 
+0

はどうもありがとうございました!これは非常に役に立ちます。 – KaWraith