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

SPSS Macro to create new variable based on 2 existing variables

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

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

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

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

所以行 COMPUTE !var1 = !var2. 将产生一个计算命令,变量名分配给 !var1 和 !var2。

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

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

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.

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