【问题标题】:Using first.variable and last.variables with accumulator variables将 first.variable 和 last.variables 与累加器变量一起使用
【发布时间】:2018-11-13 07:57:59
【问题描述】:

我想了解这个程序的作用。

data a;
set b (keep=c d);
by c;
if first.c then e=0;
e+d;
if last.c;
run;

让我感到困惑的是以下内容。

1)、当没有THEN语句时,IF语句是做什么的?

2),当没有值被评估时,IF 语句做什么? (为什么不说 if first.c =1 之类的话?)

3),我的理解是e是一个从0开始的累加器变量,d是迭代相加的。但由于某种原因,e 表示所有 c 值的总和,而不是 d,即使我们添加了 d。

我认为前两个问题将回答我的问题 3,但我非常感谢您的帮助。

【问题讨论】:

  • 您查看过 IF 语句的文档吗?请证明您在发布问题之前已经完成了一些基础研究。
  • 我了解 IF-THEN/ELSE 语句可以有条件地执行代码。我也知道 FIRST.variable 在找到该变量的第一个观察值时等于 1,否则为 0。令人困惑的是,当后面没有 THEN 或 ELSE 语句时。这就像说,我评估了最后一个变量是 1 还是 0,那又如何?
  • 请添加一个创建输入数据集 B 的示例步骤,并显示您从步骤中获得的输出,并描述它与您想要的输出有何不同。一旦你有了这个例子,你就可以使用你的代码,尝试注释掉if last.c;语句并将if first.c then e=0更改为if first.c=1 then e=0,看看它们是否/如何改变输出。也可以尝试在e+d; 之后添加put (c d e)(=);

标签: sas


【解决方案1】:

在 SAS 中有两个不同的 if 语句 - if-then-else 和子集 if。它们具有相似的语法,但它们做不同的事情。您的代码中各有一个。

documentation中是这样解释的:

子集 IF 语句等价于这个 IF-THEN 语句:

如果不是(表达式)则删除;

【讨论】:

  • 谢谢,我是初学者,所以我真正想要的只是一个简单的指导。这很有帮助。
【解决方案2】:

如果没有 THEN 子句,则 IF 语句是子集语句。基本上,如果条件不成立,则数据步骤的当前迭代停止,控制返回顶部以处理下一个观察。

SAS 将任何不为零或缺失的值评估为真。自动第一。最后。使用 BY 语句时生成的变量将具有值 1(真)或 0(假)。首先。在第一次观察 BY 组和 LAST 时,变量将为真。在 BY 组的最后一次观察中,变量将为真。

您的数据步骤是获取每个 C 值的 D 值之和。

【讨论】:

    猜你喜欢
    • 2011-05-18
    • 1970-01-01
    • 1970-01-01
    • 2014-09-05
    • 2011-09-16
    • 1970-01-01
    • 2015-04-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多