【问题标题】:SAS Data Step programming - explain dataset(obs=0)SAS 数据步编程 - 解释数据集(obs=0)
【发布时间】:2015-02-27 22:23:54
【问题描述】:

如果我们在下面的(错误)示例中设置了 (obs=0) 数据集选项,您能否解释一下为什么不处理数据步骤语句?

data temp;
    x=0;
run;

data wrong;
    set temp(obs=0);
    x=1;
    y=1;
    output;
    y=2;
    output;
run;

data right;
    set temp(obs=1);
    x=1;
    y=1;
    output;
    y=2;
    output;
run;

我通常希望 work.wrong 和 work.right 具有相同的输出。

【问题讨论】:

    标签: sas datastep


    【解决方案1】:

    数据步骤停止执行的一种方式是执行 SET 语句并读取文件结尾字符(即没有更多记录要读取)。

    因此,如果您使用 (obs=0) 设置数据集,则当执行 SET 语句时,数据步骤将停止。例如:

    122  data _null_ ;
    123    put _n_= "I ran" ;
    124    set sashelp.class(obs=0) ;
    125    put _n_= "I did not run" ;
    126  run;
    
    _N_=1 I ran
    NOTE: There were 0 observations read from the data set SASHELP.CLASS.
    

    第一个 PUT 语句执行,但第二个不执行,因为执行 SET 语句时步骤停止了。

    当您使用 (OBS=1) 设置数据集时,数据步骤会在第二次迭代时停止:

    135  data _null_ ;
    136    put _n_= "I ran before SET" ;
    137    set sashelp.class(obs=1) ;
    138    put _n_= "I ran after SET" ;
    139  run;
    
    _N_=1 I ran before SET
    _N_=1 I ran after SET
    _N_=2 I ran before SET
    NOTE: There were 1 observations read from the data set SASHELP.CLASS.
    

    【讨论】:

    • 所以在我的示例中,将 set 语句放在最后也可以。谢谢!
    • 我不明白您为什么要将 set 语句放在最后(而不是将其关闭并添加 stop),但可以肯定。
    猜你喜欢
    • 2015-04-20
    • 2019-04-20
    • 1970-01-01
    • 2013-04-22
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多