2012-01-13 9 views
2

私はSPSSマクロは値を返すことができると思うので、代わりに私はこのような何かをする必要があります考え出しVIXL3 = !getLastAvail target=VIX level=3のような値を割り当てるはありません:SPSSマクロ:変数名によって計算

/* 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. 
+0

マクロに渡すときは、 'VIXCL3'を引用符で囲むべきではありません。マクロが実行されたときにコンパイルされたコードを見るために 'mprint on'を設定しましたか?また、あなたが達成しようとしていることを示すおもちゃのデータセットを提供すれば、他の人々の仕事を助けやすくなります。 –

+0

@AndyW素晴らしい、ありがとう。それをコピーペーストすれば、私はそれを受け入れることができます。 – Tom

答えて

2

トークンをマクロに渡すと、文字通り解釈されます。あなたは

!compLastAvail name="VIXCL3"

を指定した場合ので、それは、引用符(例えばVIXCL3)なし"VIXCL3"として対応compute文だけではなく、変数名に渡されます。

2つの他の一般的な助言;

  1. あなたのマクロを実行する前にコマンドset mprint onを行う場合、あなたのトークンがマクロに渡される方法について説明します。この例では、その手順を実行した場合、問題の計算文とエラーメッセージが表示されます。

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

関連する問題