SAS。输出何时覆盖数据步骤中的默认输出?

时间:2014-06-01 18:13:57

标签: sas

我对output声明感到困惑。这是两个都有输出的程序。

1)计划一。按照我的预期生成3个观察结果,output会覆盖默认data step output

data test ;
infile datalines ; 
input type $ @ ; 
if type='a' then do;
input money ; 
output ; 
end;
datalines ;
a 100
b 200
a 500
a 400
x 500
v 500
;
run;
proc print;
run;

2)计划二。产生6个观察结果。为什么output不会覆盖此数据步骤?

data test ;
infile datalines ; 
input type $ @ ; 
if type='a' then input money ; 
output ; 
datalines ;
a 100
b 200
a 500
a 400
x 500
v 500
;
run;
proc print;
run;

为什么第一种情况下的output会完成工作,但在第二种情况下却没有呢?

1 个答案:

答案 0 :(得分:5)

在第一个程序中,输出是有条件执行的执行组的一部分,因为它位于if type='a' then do;end;之间。因此,只有在类型等于'a'时才会执行。在第二个程序中,输出根本不属于do组,因此它对所有观察都执行,因此输出所有观察结果。