Почему использование do пока не дает мне только одно наблюдение в SAS? - PullRequest
0 голосов
/ 08 октября 2018

Здравствуйте. Я пытаюсь решить проблему, используя итерацию с помощью do, пока я не получаю никаких результатов.Также я изучаю SAS самостоятельно, используя книги, документацию и видео, поэтому я новичок в этом языке.Моя проблема:

Автомобиль доставляет пробег 20 миль за галон.Напишите программу, чтобы программа перестала генерировать наблюдения, когда расстояние достигает 250 миль или когда было использовано 10 галлонов топлива. Подсказка Мили = галлон * мили на галлон

Я использовал следующий код:

data mileage;
mpg = 20;
do until (miles le 250);
miles +1;
do until (gallon le 10);
gallon + 1;
miles = gallon * mpg;
end;
end;
output;
run;

Скажите, пожалуйста, что я здесь не так делаю?Большое спасибо за ваше время и внимание!

1 Ответ

0 голосов
/ 08 октября 2018

Потому что вы подождали, пока не закончатся циклы DO, чтобы записать какие-либо наблюдения.Если вы хотите написать несколько наблюдений, вы должны переместить ваш оператор output в цикл do.

Также ваша программа никогда не инициализирует gallon, поэтому mpg всегда будет отсутствовать и поэтому будет меньше 250, что означаетВаш внешний цикл DO будет выполняться только один раз.

На ваш вопрос в письменном виде можно ответить без программы, поскольку 10 * 20 меньше 250. Если предположить, что вы также хотите изменить значения mpg, возможно, этобольше, чем вы хотели?

data mileage;
  do mpg = 20 by 1 until (miles ge 250);
    do gallon=1 to 10 until (miles ge 250);
      miles = gallon * mpg;
      output;
    end;
  end;
run;

Возможность комбинировать итерационный цикл с условием UNTIL - одна из многих приятных особенностей цикла DO шага данных.

...