我试图编写一个宏来执行以下操作:
do if SYSMIS(V2).
compute V3=V1.
ELSE.
compute V3=V2.
end if.我尝试了几种方法,但它总是停留在计算命令上。
发布于 2015-03-10 00:57:44
重要的是,你应该知道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.上面的宏调用将由宏解析器对您在问题中给出的代码进行评估。
https://stackoverflow.com/questions/28908083
复制相似问题