【问题标题】:SPSS Macro to create new variable based on 2 existing variablesSPSS宏基于2个现有变量创建新变量
【发布时间】:2015-03-06 21:36:17
【问题描述】:

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

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

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

【问题讨论】:

  • 代码块应该缩进四个空格:stackoverflow.com/help/formatting。有一个预览,用于验证一切是否正常。
  • 您的代码在我的计算机上运行良好。你能具体说明你的问题吗?你得到了意想不到的结果吗?或者你真的是说你想用 DEFINE 命令写一个宏,但不知道怎么做?
  • @mirirai 我想编写一个宏来定义一个变量,该变量等于一个现有变量(V2)的所有值。如果缺少 V2,我想要另一个现有变量 (V1) 的值。我不知道该怎么做。我尝试了不同的方法,但我收到错误消息。谢谢!
  • 你能发布你的宏到目前为止的样子以及错误信息是什么吗?
  • @mirirai 这是我的语法:DEFINE crevar (VAR1=!CHAREND("/")/VAR2=!CMDEND)。 !crevar V2/V1。 !IF SYSMIS(!VAR2) (!VAR1)=(!VAR3)。 !ENDDEFINE。

标签: macros spss


【解决方案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.

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

【讨论】:

  • 谢谢!你的解释很有帮助。
猜你喜欢
  • 2018-06-05
  • 1970-01-01
  • 2022-01-05
  • 2021-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多