SAS输出不正确

时间:2019-02-06 10:33:16

标签: sas

我担心的是我在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?

2 个答案:

答案 0 :(得分:3)

之所以输出5个观察值,是因为

  • 显式条件outputinput之前
  • 条件始终为真

知道

  • 在DATA步骤循环的顶部,将所有非保留变量重置为 失踪
  • 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.

推荐阅读:

  • "A SAS® Programmer's View of the of the SAS Supervisor",Ian Whitlock,Westat Inc.,SUGI 22会议论文集,1997年。
      

    摘要

         

    本教程回答诸如以下问题:

         
        
    • 作为DATA步骤程序员,我需要了解SAS主管什么,为什么?
    •   
    • SAS主管如何处理DATA步骤代码?
    •   
    • SAS MERGE如何工作?
    •   
    • 引擎,索引和视图如何?
    •   
    • 当我的DATA步骤代码包含宏变量时会发生什么?
    •   
    • 如果我的DATA步骤调用宏或包含在宏中怎么办?
    •   

答案 1 :(得分:1)

您将获得5个观测值,因为数据步骤重复了5次。第五次,当INPUT语句读取的数据超出末尾时,它将停止。

所有变量都是空的,因为在执行output语句之前执行了input语句。

通常,SAS在数据步骤的末尾添加一个隐式output语句。但是,如果该步骤已经有一个明确的output语句,则它不会添加一个。