我有以下数据集:
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在这种情况下的行为,但无法理解它。有人可以帮忙吗?
答案 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);