SET语句的后端处理以及SAS中继续和离开语句的使用

时间:2016-08-04 07:50:41

标签: sas

我是SAS编程的初学者。 我已经写了一段代码来理解这些东西,但是我得到的原因是在获得continue语句之后,它将输出一个语句。 以下是代码:

data a B;
put 'entering do DATASTEP' ;
do i=1 to 4;
    put 'entering do loop'"   " i;
if (i=1) then do;
    put 'value of i is 1'"   " i;

    put 'Entering the loop' ;
    put j=_N_;
    if _N_ = 2 then continue;
    set sashelp.class(firstobs=1 obs=5);
    put 'Ouside the loop';
    output a;
    end;
if (i=2) then do;
    put 'value of i is 2'"   " i;

    put 'Entering the loop' ;
    put j=_n_;
    set sashelp.class(firstobs=6 obs=10);
    put 'Ouside the loop';
    output B;
    end;
end;
put 'GETING OUT OF THE DATASTEP';
run;

为了更清楚地说明我的怀疑请求请运行此,然后我们可以讨论输出数据集和日志。

提前致谢。

1 个答案:

答案 0 :(得分:2)

我认为CONTINUE工作正常。

通常,当您读取输入数据的末尾时,SAS将停止数据步骤。没有CONTINUE语句,它会在第6次尝试从第一个SET语句中读取时。但是,当你试图第6次执行第二个SET语句时它会停止一次。

以下是数据步骤的简化版本。请注意它如何以1,6,7,2,8,3,9,4,10,5顺序读取记录。

data sample;
  do i=1 to 10; output; end;
run;

data _null_ ;
  if _n_^=2 then do;
    set sample (firstobs=1 obs=5);
    put i=;
  end;
  set sample (firstobs=6 obs=10);
  put i=;
run;

i=1
i=6
i=7
i=2
i=8
i=3
i=9
i=4
i=10
i=5