длина переменной определяет объем пространства, занимаемого значением при сохранении на диск. ПРИМЕЧАНИЕ. Во время выполнения шага DATA все числовые значения имеют двойную точность, усечение до длины <8 происходит только во время вывода. </em>
informat является отдельной концепцией от length . Informat определяет, как представления входящего значения должны интерпретироваться для хранения как числовое значение SAS. Представления входящего значения будут тем, что когда-либо должен обрабатываться текст; будь то оператор INPUT, читающий файл, редактирование поля VIEWTABLE, обработка введенного значения, редактирование ячейки сетки EG и т. д. *
Формат также является отдельной концепцией, которая определяет, как SAS отображает числовое значение для вывода; будь то оператор PUT, визуализация строки VIEWTABLE, размещение в выходных данных PROC, ячейка сетки EG и т. д. *
Объяснение
Теперь, когда это не так, информат учитывается, когда это явно указано в операторе INPUT:
data _null_;
attrib number length=6 informat=5.;
input number 5.;
put 'NOTE: ' number=;
datalines;
987654321
run;
===== LOG =====
NOTE: number=98765
И, как вы спрашиваете, переменные, связанные с informat не применяются, явная числовая информация не указывается
data _null_;
attrib number length=6 informat=5.;
input number;
put 'NOTE: ' number=;
datalines;
987654321
run;
===== LOG =====
NOTE: number=987654321
Таким образом, первый - это LIST-ввод с указанным форматом, а второй - простой LIST-ввод (поскольку формат не указан).
Простой ввод в список примет некоторые нелепо большие данные, и результирующее значение, хотя и не является точным в хвостовой части, будет на правильном экспоненциальном уровне.
data _null_;
attrib number length=6 informat=5.;
input number;
put 'NOTE: ' number= ;
datalines;
123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
run;
===== LOG =====
NOTE: number=1.2345679E89
Что говорят документы для оператора INPUT, список ? Конечно, ничего о с использованием переменных, объявленных informat, когда ни одна не указала
Простой ввод списка
Простой ввод списка накладывает несколько ограничений на тип данных, которые
оператор INPUT может читать:
• По умолчанию хотя бы один пробел должен отделять входные значения. использование
опция DLM = или DLMSTR = или опция DSD в инструкции INFILE
указать разделитель, отличный от пробела.
• Представлять каждое пропущенное значение точкой, а не пробелом или двумя
Смежные разделители.
• Значения ввода символов не могут быть длиннее 8 байт, если только
переменной дается более длинная длина в более ранней длине, ATTRIB или
ИНФОРМАТ, заявление.
• Символьные значения не могут содержать встроенные пробелы, если вы не измените
разделитель.
• Данные должны быть в стандартном числовом или символьном формате. (сноска 1)
СНОСКА 1: См. Справочник по языку SAS: Концепции для получения информации о стандартных и нестандартных значениях данных. (мой LOL)
Понятия для «переменных переменных SAS»:
информ
относится к инструкциям, которые SAS использует при чтении значений данных. Если
информация не указана, информация по умолчанию - w.d для числового
переменная и $ w. для символьной переменной. Вы можете назначить SAS
информатирует переменную в операторе INFORMAT или ATTRIB. Вы можете
используйте процедуру FORMAT, чтобы создать собственный информат для переменной.
(мой жирный)
Очевидно, что нет явного значения по умолчанию, такого как 32. или best32. потому что значения с более чем 32 цифрами будут введены без ошибок.
Так что документация объясняет вещи? Да, хорошо, Сорта. Что взять с собой:
- Человеческая интуиция числовой переменной, наследующей ее информацию при простом вводе списка не выравнивает с фактическим реализованным поведением .
- Тектоническое количество существующего кода SAS означает, что изменение для реализации этой интуиции крайне маловероятно
- Простые утверждения могут включать в себя множество концепций с обширной документацией
- Возможное изменение в том, что документация будет обновлена, чтобы быть более точной в отношении простых предостережений при вводе списка