Pregunta

No creo que las macros SPSS puedan devolver valores, por lo que en lugar de asignar un valor como VIXL3 = !getLastAvail target=VIX level=3 Pensé que necesitaba hacer algo como esto:

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

los compute !name = ...es donde está el problema.

¿Cómo se debe hacer esto correctamente? Los retornos anteriores:

>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.
¿Fue útil?

Solución

Cuando pasas tokens a la macro, se interpretan literalmente. Entonces cuando especificas

!compLastAvail name="VIXCL3"

Se pasa al correspondiente compute declaración "VIXCL3", en lugar de solo un nombre variable sin comillas (por ejemplo, VIXCL3).

Otros dos consejos generales;

  1. Si haces el comando set mprint on Antes de ejecutar su macro, verá cómo se pasan sus tokens a la macro. En este caso, si hubiera dado ese paso, habría visto que la declaración de cómputo ofensiva y el mensaje de error.

  2. A veces haces qué usar comillas en tokens, y cuando ese es el caso los comandos de cadena !QUOTE y !UNQUOTE Ser util.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top