SPSS宏基于2个现有变量创建新变量

时间:2015-03-06 21:36:18

标签: macros spss

我正在尝试编写一个宏来执行以下操作:

do if SYSMIS(V2).
compute V3=V1.
ELSE.  
compute V3=V2.
end if.

我尝试了几种方法,但它总是卡在计算命令上。

1 个答案:

答案 0 :(得分:1)

重要的是,您应该了解SPSS宏,SPSS宏语言只是一个"字符串解析器"。这意味着,DEFINE!ENDDEFINE块中的文本被解析,并且作为输出,将创建语法代码。变量(以"!"开头)将被分配给这些变量的字符串(值)替换。

因此,行COMPUTE !var1 = !var2.将生成一个计算命令,变量名称分配给!var1和!var2。

另一方面,像!IF (SYSMIS(!Var2)) !Var1 = !Var3.这样的命令 没有意义,因为你真正想要的是执行IF命令,而!IF是一个条件宏指令,它决定'如果某些语法代码由宏生成(如果满足条件),或者不是。

所以你的解决方案看起来像这样:

DEFINE !crevar ( !POSITIONAL !TOKENS(1)
                 /!POSITIONAL !TOKENS(1)
                 /!POSITIONAL !TOKENS(1))
   DO IF SYSMIS(!2).
      compute !3=!1.
   ELSE.  
      compute !3=!2.
   END IF.
!ENDDEFINE.

* Macro call.
!crevar V1 V2 V3.

EXECUTE.

上面的宏调用将由宏解析器评估您在问题中给出的代码。