SAS DO LOOP OUTPUT

Я пытаюсь понять этот вопрос SAS и то, как здесь работает оператор вывода. Вопрос спрашивает, каковы значения i и x.

Но когда я добавляю оператор вывода, он показывает 3 наблюдения x 1,3,5 и i 1,3,5.

(Я думал об операторе вывода как о записи текущих значений, но я не уверен, что это значит здесь)

Это код и объяснение, которое он дает,


data new;
x = 0;
do i = 1 to 5 by 2;
x = i;
end;
run;

Answer

x=5 i=7

Step check

1. x=0, i=1
2. x=1, i=3
3. x=3  i=5
4  x=5  i=7

person Ryan M    schedule 17.04.2020    source источник
comment
Где вы добавили оператор OUTPUT?   -  person Reeza    schedule 18.04.2020
comment
Я поставил только один вывод после x = i   -  person Ryan M    schedule 18.04.2020
comment
Что такое STEP CHECK? Это должно показывать значения этих переменных? В какой момент шага данных он проверяется?   -  person Tom    schedule 18.04.2020
comment
Я не уверен, экзаменационный вопрос показал, что это часть ответа   -  person Ryan M    schedule 18.04.2020
comment
пошаговая проверка — это проверка значений в начале цикла.   -  person Reeza    schedule 20.04.2020


Ответы (2)


Шлейф правильный. Цикл DO завершается, когда значение равно 7. Таким образом, в последней итерации цикла, i=5, затем он увеличивается в операторе DO, понимает, что прошел интервал для цикла, а затем завершается. X остается равным 5, потому что цикл никогда не выполнялся, но i равно 7.

Если вы добавите операторы OUTPUT, обратите внимание на множественность, тогда вы сможете это увидеть. Примечание. Я использовал PUT в журнале, чтобы облегчить чтение вывода.

data new;
    x=0;

    do i=1 to 5 by 2;
        x=i;
        output;
    end;
    output;
run;

Выход:

 69         data new;
 70         file log dsd;
 71         x = 0;
 72         do i = 1 to 5 by 2;
 73         x = i;
 74         put _all_;
 75         end;
 76         put _all_;
 77         run;

 x=1 i=1 _ERROR_=0 _N_=1
 x=3 i=3 _ERROR_=0 _N_=1
 x=5 i=5 _ERROR_=0 _N_=1
 x=5 i=7 _ERROR_=0 _N_=1
person Reeza    schedule 17.04.2020
comment
Отличное объяснение, спасибо! Вот как я представлял себе зацикливание, значит ли это, что пошаговая проверка, которую они дают, неверна? Это сбило меня с толку - person Ryan M; 18.04.2020

Не уверен, что нижняя часть этого вопроса пытается показать/спросить. Но если вы добавите несколько операторов PUT и запустите код, вы увидите, как меняются значения.

2511  data new;
2512  putlog 'Loc 1 ' x= i=;
2513  x = 0;
2514  putlog 'Loc 2 ' x= i=;
2515  do i = 1 to 5 by 2;
2516  putlog 'Loc 3 ' x= i=;
2517  x = i;
2518  putlog 'Loc 4 ' x= i=;
2519  end;
2520  putlog 'Loc 5 ' x= i=;
2521  run;

Loc 1 x=. i=.
Loc 2 x=0 i=.
Loc 3 x=0 i=1
Loc 4 x=1 i=1
Loc 3 x=1 i=3
Loc 4 x=3 i=3
Loc 3 x=3 i=5
Loc 4 x=5 i=5
Loc 5 x=5 i=7
NOTE: The data set WORK.NEW has 1 observations and 2 variables.
person Tom    schedule 17.04.2020
comment
Спасибо. Почему этот способ отличается от использования put all в журнале, этот способ показывает дополнительные шаги? И счетчик журнала идет 1,2,3,4,3,4,3,4,5 - person Ryan M; 18.04.2020
comment
Значения X и I будут отображаться одинаково независимо от того, используете ли вы x= i= или _all_, вы просто не загромождаете журнал теми другими переменными, которые вам не нужны. Значения Loc n представляют собой постоянный текст в каждом отдельном операторе put, поэтому вы можете увидеть в журнале, какой именно оператор написал эту строку, и проследить, как выполняется программа. - person Tom; 18.04.2020
comment
Ах, это имеет смысл, спасибо. Я просто пытаюсь понять разницу между этими значениями и значениями в нижней части объяснения Ризы? - person Ryan M; 20.04.2020