SAS。在数据步骤中,输出何时覆盖默认输出?
我对SAS。在数据步骤中,输出何时覆盖默认输出?,sas,Sas,我对输出语句感到困惑。这里有两个程序都有输出 1)程序一。生成3个观察值,正如我所期望的,输出覆盖默认的数据步输出 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; data test ; infile
输出
语句感到困惑。这里有两个程序都有输出
1)程序一。生成3个观察值,正如我所期望的,输出
覆盖默认的数据步输出
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;
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;
2)节目二。产生6个观察结果。为什么
输出不覆盖此数据步骤?
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;
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;
为什么
输出
在第一种情况下执行作业,而在第二种情况下不执行作业?在第一个程序中,输出是有条件执行的do组的一部分,因为它介于如果type='a',则do之间代码>和结束代码>。因此,它仅在类型等于“a”时执行。在第二个程序中,输出根本不是do组的一部分,因此它对所有观察值执行,因此所有观察值都是输出的。在第一个程序中,输出是有条件执行的do组的一部分,因为它介于之间,如果type='a',则为do代码>和结束代码>。因此,它仅在类型等于“a”时执行。在第二个程序中,输出根本不是do组的一部分,因此它对所有观察值执行,因此所有观察值都是输出的。+1谢谢。但按照这种逻辑,第一个程序也应该有6个观察值。原因如下:因为输入类型$@
位于if-then
块之前,因此无论if-then
结果如何,都会执行。因此,在我们到达if-then
块之前,程序已经执行了输入类型$@
即使if-then
块结果为false,我们也会输入类型
。所以所有的类型
值都被读取,因此第一个程序应该有6个观察值,对吗?不正确。尽管读取了6条记录,但根据if条件的评估,仅输出了3条记录。如果在程序1中取出显式的output
语句,您将看到6个观察结果,但在money字段中只有3个值。+1谢谢。但按照这种逻辑,第一个程序也应该有6个观察值。原因如下:因为输入类型$@
位于if-then
块之前,因此无论if-then
结果如何,都会执行。因此,在我们到达if-then
块之前,程序已经执行了输入类型$@
即使if-then
块结果为false,我们也会输入类型
。所以所有的类型
值都被读取,因此第一个程序应该有6个观察值,对吗?不正确。尽管读取了6条记录,但根据if条件的评估,仅输出了3条记录。如果在程序1中取出显式的output
语句,您将看到6个观察结果,但只有3个在money字段中有值。