我担心的是我在Odamid中执行的那段代码。代码是:
data b;
if id lt 3 then output b;
input id name $ class $;
datalines;
1 Sudha A
2 Gaurav B
3 Saurabh C
4 Preeti D
;
run;
这段代码为我提供了5个观测值的空数值数据集。
我担心为什么它会给我5分。为什么不4?
答案 0 :(得分:3)
之所以输出5个观察值,是因为
output
在input
之前知道
if id < 3
的评估为. < 3
,这是真的,并且发生了output
input
隐式检查数据结束条件,如果为true,则该步骤终止input
解析数据行并分配变量值正在检查
data b;
put 'NOTE: ' _n_= 'before if';
if id lt 3 then output b;
put 'NOTE: ' _n_= 'before input';
input id name $ class $;
put 'NOTE: ' _n_= 'before datalines';
datalines;
1 Sudha A
2 Gaurav B
3 Saurabh C
4 Preeti D
;
run;
---------------- LOG -----------------
NOTE: _N_=1 before if
NOTE: _N_=1 before input
NOTE: _N_=1 before datalines
NOTE: _N_=2 before if
NOTE: _N_=2 before input
NOTE: _N_=2 before datalines
NOTE: _N_=3 before if
NOTE: _N_=3 before input
NOTE: _N_=3 before datalines
NOTE: _N_=4 before if
NOTE: _N_=4 before input
NOTE: _N_=4 before datalines
NOTE: _N_=5 before if
NOTE: _N_=5 before input
NOTE: The data set WORK.B has 5 observations and 3 variables.
推荐阅读:
摘要
本教程回答诸如以下问题:
- 作为DATA步骤程序员,我需要了解SAS主管什么,为什么?
- SAS主管如何处理DATA步骤代码?
- SAS MERGE如何工作?
- 引擎,索引和视图如何?
- 当我的DATA步骤代码包含宏变量时会发生什么?
- 如果我的DATA步骤调用宏或包含在宏中怎么办?
答案 1 :(得分:1)
您将获得5个观测值,因为数据步骤重复了5次。第五次,当INPUT语句读取的数据超出末尾时,它将停止。
所有变量都是空的,因为在执行output
语句之前执行了input
语句。
通常,SAS在数据步骤的末尾添加一个隐式output
语句。但是,如果该步骤已经有一个明确的output
语句,则它不会添加一个。