2017-04-20 3 views
2

変数のグループに対して特定のアクションを実行したい。各グループには、名前に特定のインデックスがあります。私は各グループの構文を繰り返す必要はありません。変数名を動的に参照する方法はありますか?SPSS構文で参照される動的変数名

以下は構文です。 207は、変数の各グループごとに変化するインデックスです。

DO REPEAT aa= M9_207_1 to M9_207_99. 
..... 
END REPEAT. 
EXECUTE. 

答えて

1

マクロを使用してこれを行うことができます。

最初のマクロを定義:

define !MyMacro() 
!do !ndx=201 !to 207 
    DO REPEAT aa= !concat("M9_",!ndx,"_1") to !concat("M9_",!ndx,"_99"). 
    ..... 
    END REPEAT. 
    EXECUTE. 
!doend 
!enddefine. 

それを呼び出す:

!MyMacro. 

ここで定義されたマクロ「はインデックス201、202、203、等を介して実行されます。あなたは、インデックスのより具体的なリストが必要な場合は、この方法でマクロを定義することができます。

define !MyMacro (!pos=!cmdend) 
!do !ndx !in(!1) 
    DO REPEAT aa= !concat("M9_",!ndx,"_1") to !concat("M9_",!ndx,"_99"). 
    ..... 
    END REPEAT. 
    EXECUTE. 
!doend 
!enddefine. 

し、それを呼び出して、インデックス(あなたが個別に各インデックスを指定して行く必要があり)を与える:!

をMYMACRO 207 311 501 502 503 504 785.

+0

なぜあなたは!indを連結しますか?それはすべきではありません! – jivko

+0

さて、私は以下を実行しようとしました: define!MyMacro(!pos =!cmdend) !do!ndx!in(!1) DO REPEAT aa =!concat( "Q1 _" ,! ind、 "_ 1" )を!concat( "Q1 _" ,! ind、 "_ 5")に変換します。 \t \t \t FREQ aa。 END REPEAT。 EXECUTE。 !doend !enddefine。 !MyMacro '010' '123'。 エラーが発生したのは >列34のエラー#6835です。テキスト:、 >マクロ式では、関数名の後に左括弧が付きませんでした。 >このコマンドの実行は停止します。 >エラー番号4508(第23欄)。テキスト:_ > DO REPEATコマンドに認識されないテキストが表示されます。それは無視されます。 >このコマンドの実行は停止します。 – jivko

+0

1.あなたは '!ind'と'!ndx'について正しいです - 今すぐコードを修正してください。 –

0

ループ操作ができるようです。私はRのこの種の問題を非常によく見ました。 SPSSでも同様の考えが働くと思います。通常、私はこれを試してみる:

for i in (1:207) { 
    for j in (1:99) { 
    M9[i,j] = ... 
    certain actions... 
    } 
} 

私はこれが役立ちます。

関連する問題