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