首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在spss宏中做IF和计算

在spss宏中做IF和计算
EN

Stack Overflow用户
提问于 2017-09-30 20:06:10
回答 4查看 747关注 0票数 3

我有以下spss语法:

代码语言:javascript
运行
复制
DO IF SYSMIS(V5).
 COMPUTE V5 = LAG(V5).
END IF.
EXE.

效果很好。但是,我想对几个变量重复相同的过程。我试图编写一个宏来实现这一点,但是我一直收到错误消息。这是我的尝试:

代码语言:javascript
运行
复制
define filldown (!positional !cmdend).
  do if sysmis(!1).
   compute !1 = lag (!1).
  end if.
  execute.
!enddefine.

!filldown V5 age wt htm.

如何编写能够工作的宏(我是宏新手)?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-09-30 21:08:14

@horace_vr的do repeat解决方案肯定是适合这种情况的方法。下面的内容只是为了在你学习宏的时候了解它。

首先,可以对每个变量分别使用当前宏,但需要使用原始宏调用(不要添加"!"),因此:

代码语言:javascript
运行
复制
filldown V5.
filldown age.
....

当然,您可以在宏中创建一个循环,如下所示:

代码语言:javascript
运行
复制
define filldown (!positional !cmdend).
!do !vr !in (!1)
  do if sysmis(!vr).
   compute !vr = lag (!vr).
  end if.
  execute.
!doend
!enddefine.

现在,您可以在完整列表中使用宏调用一次:

代码语言:javascript
运行
复制
filldown V5 age wt htm.
票数 3
EN

Stack Overflow用户

发布于 2017-09-30 20:48:52

宏只是一个文本替换函数。它实际上将用调用宏( !1 )时提供的任何参数替换您的V5 age wt htm

为了保持简单,我建议使用一个简单的do repeat命令,而不是宏,如果您不熟悉宏,使用它们可能会有点不舒服。

代码语言:javascript
运行
复制
do repeat varlist=V5 age wt htm.
if sysmis(varlist) varlist=lag(varlist).
end repeat.
exe.

P.S.:如果你真的想要使用宏,你需要对每个变量分别调用它。

票数 2
EN

Stack Overflow用户

发布于 2022-04-06 13:18:23

将自动和设置为lisp。其他变量无法量化。量词是一个lisp命令,它显示程序的下一个和。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46506603

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档