Объясните порядок, в котором SAS считывает шаг данных (концептуальный)

Мне нужно понять, как SAS читает / выполняет шаги данных. Когда я посмотрел информацию о том, как SAS считывает шаги данных, мне кажется, что я нашел только информацию о том, как он читает для целей объединения, что я не понимаю в связи с обычным шагом данных. Допустим, например, у меня есть эта строка кода:

data work.DATA;
  if amount_a= . then
     amount_a= 1;
  amount_b= 1;
  amount_a= . ;
  total = (amount_a + amount_b) + 0 ;
run;

Теперь, учитывая это, что будет "всего" равным? Я хочу знать, по сути, как SAS будет читать этот шаг - какую строку он будет читать / выполнять первым? Начинается ли он в конце концов, а затем идет вверх? Или начать сверху и идти вниз? Благодарю.

1 ответ

Решение

Шаг данных SAS обрабатывает код сверху вниз, начиная с DATA заявление и заканчивая RUN; заявление. Данные шаги подразумевают OUTPUT; заявление включается непосредственно перед RUN; если код не имеет явного оператора вывода.

Поскольку SAS является "интерпретируемым" языком, код для каждого шага данных компилируется перед выполнением. Часть компиляции включает в себя создание структуры, называемой Вектор данных программы (PDV), которая содержит атрибуты выполнения всех переменных, используемых программой. Переменные определяются для PDV в порядке их появления в коде (сверху вниз).

Удобный инструмент отладки является PUTLOG оператор, с помощью которого вы можете записать вывод в файл журнала SAS во время выполнения программы. Например, рассмотрим это:

data work.DATA;
   if amount_a= . then
      amount_a= 1;
   amount_b= 1;
putlog amount_a= amount_b=;
   amount_a= . ;
putlog amount_a= amount_b=;
   total = (amount_a + amount_b) + 0 ;
putlog amount_a= amount_b= total=;
   output;
run;

Обратите внимание, что я добавил явное OUTPUT; Заявление для иллюстрации. Результатом является набор данных SAS с одним наблюдением и тремя переменными. Ваша переменная total будет отсутствующим значением, потому что во время его расчета, amount_a пропал, отсутствует. Вы также получите примечание в журнале SAS, указывающее, что "сгенерированы отсутствующие значения".

Лучшее место, чтобы узнать все о том, как SAS делает это, в книге SAS Language Reference: Concepts. Вот ссылка на книгу для SAS версии 9.3. В частности, прочитайте главу Обработка шагов данных.

Другие вопросы по тегам