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.
上面的宏调用将由宏解析器评估为您在问题中提供的代码。
我正在尝试编写一个宏来执行以下操作:
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.
上面的宏调用将由宏解析器评估为您在问题中提供的代码。