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

Don*_*llo 0 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;
Run Code Online (Sandbox Code Playgroud)

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;
Run Code Online (Sandbox Code Playgroud)

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

cat*_*uas 5

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

  • 不正确.虽然读取了6条记录,但根据if条件的评估仅输出3条记录.如果你在程序1中取出明确的`output`语句,你会看到6个观察值,但只有3个在money字段中有一个值. (2认同)