2

SPSSマクロは値を返すことができないと思うので、私が考えたようVIXL3 = !getLastAvail target=VIX level=3に値を割り当てる代わりに、次のようなことをする必要があります。

/* computes last available entry of target at given level */
define !compLastAvail(name !Tokens(1) /target !Tokens(1) /level !Tokens(1))
   compute tmpid= $casenum.
   dataset copy tmpset1.
   select if not miss(!target).
   compute !name= lag(!target, !level).
   match files /file= * /file= tmpset1 /by tmpid.
   exec.
   delete variables tmpid.
   dataset close tmpset1.
!enddefine.

/* compute last values */

!compLastAvail name="VIXCL3" target=VIXC level=3.

問題があるのcompute !name = ...はここです。

これはどのように適切に行う必要がありますか?上記は戻ります:

>Error # 4285 in column 9.  Text: VIXCL3
>Incorrect variable name: either the name is more than 64 characters, or it is
>not defined by a previous command.
>Execution of this command stops.
4

1 に答える 1

2

トークンをマクロに渡すと、文字どおりに解釈されます。なので指定すると

!compLastAvail name="VIXCL3"

引用符なしの単なる変数名 (例: ) ではなく、対応するcomputeステートメントに として渡されます。"VIXCL3"VIXCL3

他に 2 つの一般的なアドバイスがあります。

  1. set mprint onマクロを実行する前にコマンドを実行すると、トークンがどのようにマクロに渡されるかがわかります。この場合、その手順を実行していれば、問題の計算ステートメントとエラー メッセージが表示されます。

  2. トークンで引用符を使用する場合、文字列コマンド!QUOTE!UNQUOTE便利な場合があります。

于 2012-01-13T23:27:00.883 に答える