SAS Ввод и порядок информации операций - PullRequest
0 голосов
/ 22 февраля 2019

Мне интересно, как SAS обрабатывает информаты и операторы ввода с информатами.Каков «порядок действий» этих утверждений?Я включил пример фрагмента из программы, созданной мастером импорта SAS EG.

Отказ от ответственности: я редко использую EG Import Wizard, но мой работодатель попросил нас использовать EG, когда это возможно, т.е. создавать новые программы, поэтому мне было любопытно, как работает эта функция.

Данные:
TimeStamp 01/01/2019 12:00:00 AM

Пример сгенерированного кода EG:

data Input;
length TimeStamp 4;
format TimeStamp mmddyy10.;
informat TimeStamp mmddyy10.;
...some infile statement...
input TimeStamp : Best32;
TimeStamp = DatePart(TimeStamp);
run;

Приведенный выше пример - сгенерированный код EG, но мне любопытно, почему были сгенерированы все эти операторы.Я также не уверен, почему SAS использовал информат : Best32 с оператором ввода, когда мой мастер импорта сообщает: DateTime18.

Исторически, используя BASE SAS, я только что использовал:

  1. Informat с оператором ввода
  2. Informat оператор, а затем следующий оператор ввода.В этом случае входной оператор содержал бы только имя переменной.

Пример # 1:

Data Test;
...infile...;
input @1 TimeStamp DateTime18.;
...format...;
run;

Пример # 2:

Data Test2;
...infile...;
informat TimeStamp DateTime18.;
input TimeStamp;
...format...;
run;

IsПример № 1 просто сокращение от примера № 2?Если так, почему EG генерирует дополнительные шаги?В сгенерированном коде EG - как оператор informat не перекрывает операторы input informat

1 Ответ

0 голосов
/ 23 февраля 2019

Операторы INFORMAT и FORMAT не являются исполняемыми.Таким образом, вы можете разместить их в любом месте шага данных (исключая побочный эффект от принудительного определения типа для переменной, которую компилятор еще не набрал).Обратите внимание, что это также означает, что если вы назначите несколько FORMAT (информатов) для одной и той же переменной, то последним будет то, что используется.

Когда инструкция INPUT выполняет любую явную спецификацию informat, которую вы включили в сам оператор INPUT,переопределить любую информацию, связанную с переменной.Еще раз обратите внимание, что если переменная еще не была введена компилятором, то использование оператора INPUT этой переменной приведет к выбору типа переменной.

Поэтому для наиболее предсказуемых результатов вы должны определить свои переменные.вместо того, чтобы позволить SAS угадать, основываясь на том, как они сначала появляютсяВы можете определить их, используя оператор LENGTH или оператор ATTRIB.Или определите их, вытянув существующий набор данных с SET, MERGE и другими операторами.Тогда порядок операторов INPUT, FORMAT и INFORMAT не будет иметь значения.

Вам придется спросить SAS, почему Enterprise Guide Wizard работает так, как он работает.Насколько я понимаю, для некоторых файлов (например, электронных таблиц Excel) они преобразуют данные в текстовый файл и загружают сгенерированный текстовый файл.Поэтому я предполагаю, что EG сгенерировал значения DATE и TIME как необработанное количество дней или количество секунд, и поэтому он считывает значение, используя обычный числовой информат, а не информацию о дате или времени.Я предполагаю, что он присоединяет INFORMAT к переменным даты и времени, так что метаданные в определении набора данных заполняются чем-то, что соответствует прикрепленному формату.

Относительно того, почему они использовали информацию BEST32., я понятия не имею.На самом деле в SAS нет информата BEST, так что на самом деле это просто псевдоним для 32. (или они могли бы использовать F32.).Понятие «лучший» для информатов даже не имеет смысла.Формат BEST используется для определения для этого конкретного числа, какую комбинацию цифр лучше всего генерировать для аппроксимации значения в ограниченном количестве символов.Для чтения строки символов в число SAS просто необходимо прочитать цифры и преобразовать их в число, которое они представляют.Там нет выбора каких-либо "лучших" альтернатив.

...