SAS产生奇怪的输出,需要澄清

时间:2017-07-04 16:43:47

标签: sas

我有以下数据集:

DATA Test1;
INFILE DATALINES DSD MISSOVER;
INPUT A  B  C;
DATALINES;
1, 2, 3
1,  , 
 ,  , 3
 ,   ,
;
RUN;

然后我创建了2个数据集:

DATA Test2;
SET Test1;
i + a + b + c;
RUN;

DATA Test3;
SET Test1;
j + a + b + c + i;
RUN;

在Test2中,每次观察时i的值总是为6。

在Test3中,J的值全为0,i是句点。

我试图思考SAS在这种情况下的行为,但无法理解它。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:2)

您的数据步骤正在使用sum语句的示例。 sum语句的形式是:

variable + expression ;

基本上相当于

retain variable 0;
variable=sum(variable,expression);

所以在你的第一个例子中

i + a + b + c;

表达式为(A + B + C)。请注意,除了第一个观察之外,每个观察都会丢失A + B + C,因为缺少一个或多个变量。因此保留了第一次观察中的6,但没有添加任何东西。在第二种情况下,您引用了一个不存在的变量I,它将具有所有观察值的缺失值。 (也许你的意思是从第二个数据集读取该步骤?)因此,每次观察都缺少(a + b + c + i),因此J保持其初始值为零。

如果您真的希望我积累所有非缺失值,那么您应该使用。

i + sum(a,b,c);