Sas 为什么未定义变量在数据步骤中不返回错误?

Sas 为什么未定义变量在数据步骤中不返回错误?,sas,Sas,我编写了下面的代码来创建一个名为“sum”的“running total”列。虽然它似乎可以工作,但我不明白SAS是如何执行这段代码的。当它遇到语句sum+var时,如果sum未定义,它如何知道该怎么做?基于《小SAS手册:入门》一书,SAS数据步骤有一个内置循环,通过观察执行程序观察。考虑到这一点,当程序到达第二行时,它如何知道执行与之等价的sum[row2]=sum[row1]+var[row2] data df; input var; datalines; 1 3 . 5 1 ; run;

我编写了下面的代码来创建一个名为“sum”的“running total”列。虽然它似乎可以工作,但我不明白SAS是如何执行这段代码的。当它遇到语句
sum+var
时,如果
sum
未定义,它如何知道该怎么做?基于《小SAS手册:入门》一书,SAS数据步骤有一个内置循环,通过观察执行程序观察。考虑到这一点,当程序到达第二行时,它如何知道执行与之等价的
sum[row2]=sum[row1]+var[row2]

data df;
input var;
datalines;
1
3
.
5
1
;
run;

data df2;
    set df;
    sum+var;
run;

此语法称为隐式retain,相当于:

retain sum 0;
sum=sum(sum,var);
当您保留变量时,在重新加载PDV时,该变量的值不会设置为“缺失”(它“保留”以前的值)。它不读取前一行的内容-这是一个常见的误解


有关retain语句的更多信息,请参见SAS

Sum语句,该语句还将变量初始化为零,而不是缺少<代码>保留和0