Программирование шага данных SAS - объясните набор данных (obs = 0)

Не могли бы вы объяснить, почему никакие операторы шага данных не обрабатываются, если мы установили параметр набора данных (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 будут иметь одинаковый результат.


person jaamor    schedule 27.02.2015    source источник


Ответы (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.
person Quentin    schedule 28.02.2015
comment
Таким образом, в моем примере размещение оператора set последним также будет работать. Спасибо! - person jaamor; 28.02.2015
comment
Я не понимаю, почему вы хотите поставить оператор set последним (в отличие от того, чтобы просто оставить его и добавить stop), но конечно. - person Joe; 01.03.2015