質問

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.
役に立ちましたか?

解決

トークンをマクロに渡すと、文字通り解釈されます。したがって、指定するとき

!compLastAvail name="VIXCL3"

対応するものに渡されます compute 声明として "VIXCL3", 、引用符のない単なる変数名の代わりに(例: VIXCL3).

他の2つの一般的なアドバイス。

  1. コマンドを行う場合 set mprint on マクロを実行する前に、トークンがマクロにどのように渡されるかがわかります。この例では、その一歩を踏み出した場合、問題のある声明とエラーメッセージが表示されることがわかりました。

  2. トークンで見積マークを使用することがあります。 !QUOTE!UNQUOTE 便利です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top