Формат сообщает SAS, как отображать значение при просмотре. Формат не меняет базовое значение. Таким образом, если переменная date1
отформатирована date9.
, это означает, что переменная является числовой, принимая значения, которые представляют значения даты в эпоху дат SAS (0 - 01 января 1960 г.). Таким образом, числовое значение не должно передаваться в INPUT
.
Символьная переменная может иметь значение, конструкция которого ddMONyyyy
. Эта переменная не будет отформатирована date9.
Символьное значение будет представлять собой форматированное представление значения даты и должно быть пропущено через INPUT
, чтобы получить числовое значение, соответствующее дате в эпоху SAS.
intck
наверняка может иметь дело с переменными - фактически он имеет дело с любым выражением, которое оценивает (неявно или явно) число. Строка, содержащая отформатированное представление даты, не может быть неявно оценена как число SAS, ей придется пройти через input
.
Форматированное число, пропущенное через INPUT
, неверно. Числовое значение будет введено в функцию INPUT
, неявно не отформатированным и преобразованным в строку, и «цифры» будут проанализированы в соответствии с заданной информацией, и при этом не получится.
Вот пример кода, в котором рассматривается описанная выше история:
data _null_;
today = today();
tomorrow = today + 1;
diff = intck ('day', today, tomorrow);
put today tomorrow diff;
date1num_as_char = '21560';
date2num_as_char = '21561';
diff = intck ('day', date1num_as_char, date2num_as_char);
put date1num_as_char date2num_as_char diff;
date1_as_string = '11JAN2019'; * not a SAS date value, is a date representation;
date2_as_string = '12JAN2019';
diff = intck ('day', date1_as_string, date2_as_string);
put date1_as_string date2_as_string diff;
now = today();
format now date9.;
put now=;
now_through_input = input(now,date9.); * just wrong;
put now_through_input=;
run;