Основное различие, о котором вы говорите, - это разница между данными, которые хранятся в ФИКСИРОВАННЫХ местах столбцов, и данными, которые РАЗЛИЧИНЫ. Поскольку в вашем первом примере используются данные с фиксированным расположением столбцов, вы можете использовать диапазоны столбцов (1-11
) для чтения данных. С данными с разделителями вы не можете указать фиксированные столбцы (или даже фиксированные длины для чтения), поскольку вы не знаете, сколько символов находится между разделителями. Вместо этого вы должны использовать ввод в режиме списка, и SAS будет читать значение до следующего разделителя.
Давайте разберемся с подробными вопросами.
- Почему? Потому что так была написана программа. Существует большая гибкость в написании кода SAS.
При построении набора данных важно понимать, как порядок операторов может повлиять на результат. SAS попытается определить определение переменных, которые вы используете, как можно скорее. Таким образом, если вы поместите оператор FORMAT
перед оператором INPUT
, это может повлиять как на тип переменной, создаваемой SAS, так и на порядок, в котором они создаются на этапе данных.
- Нет, это НЕ то же самое.
Когда вы просите его прочитать VAR1 $ 1-11
, вы просите его прочитать все, что находится в столбцах с 1 по 11, включая любые встроенные пробелы. Он также знает, что вы хотите, чтобы VAR1 был определен как символ (поскольку вы использовали $
), и в нем должно быть место для 11 байтов. Когда вы попросите его прочитать @1 VAR1 $
, он прочитает следующее слово, которое он увидит, начиная с столбца 1. Он остановится на первом пустом месте. Таким образом, он может читать столбцы с 1 по 5 или он может читать столбцы с 70 по 77, если столбцы с 1 по 69 пусты. Это также приведет к тому, что VAR1 будет иметь длину только 8 (если вы не определили ее ранее), поскольку это значение по умолчанию для символьных переменных, когда SAS не может сказать, что вы хотите другую длину.
Причина, по которой исходная программа использовала @18 VAR3 MMDDYY10.
, заключается в том, что вам нужно указать информацию, чтобы SAS правильно преобразовал текст в данных в число, которое SAS использует для представления этой даты, и вы не можете сделать это с диапазоном столбцов.
- Длина не нужна. Вам даже не нужен
$
, поскольку вы уже определили тип переменной.
Вы ранее установили длину переменной при первом обращении к ней. Таким образом, у оператора (ов) INFORMAT
есть побочный эффект, заключающийся в установке длины переменной в дополнение к INFORMAT, который должен использоваться для преобразования читаемого текста. Если вы действительно хотите определить свои переменные, вы должны использовать оператор LENGTH
или ATTRIB
.
person
Tom
schedule
06.01.2016