将first.variable和last.variables与累加器变量一起使用

时间:2018-11-13 07:58:00

标签: sas

我试图了解该程序的作用。

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语句会做什么? (为什么它不会说诸如first.c = 1?)

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

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

2 个答案:

答案 0 :(得分:1)

在SAS中,有两个不同的if语句-if-then-else和子集if。它们具有相似的语法,但是它们执行不同的操作。您的代码中每个都有一个。

这是documentation中的解释:

  

子集IF语句等效于此IF-THEN语句:

     

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

答案 1 :(得分:1)

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

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

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