我对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
会完成工作,但在第二种情况下却没有呢?
答案 0 :(得分:5)
在第一个程序中,输出是有条件执行的执行组的一部分,因为它位于if type='a' then do;
和end;
之间。因此,只有在类型等于'a'时才会执行。在第二个程序中,输出根本不属于do组,因此它对所有观察都执行,因此输出所有观察结果。