Я не уверен, что вы ссылаетесь на формат в proc print
как FORMAT d1f 9.0 d1 WEEKDATE.;
или последний формат в шаге данных FORMAT d1f DATE9. d2f WORDDATE. d3f MMDDYY8.;
.
В любом случае формат влияет только на способ отображения данных без изменения сохраненного значения, которое в вашем случае является просто числовым, поскольку именно в нем хранятся даты.
Даты SAS начинаются с 0
с 1 января 1960 года, затем 1
за 2 января 1960 года и так далее. Вот почему такие значения, как 10
и 11
можно увидеть в выводе proc print
в первом наблюдении, а второе наблюдение следует той же последовательности подсчета.
Повторюсь, формат влияет только на отображение, а не на значение.
Редактировать
В ответ на вопрос в комментарии:
Итак, исходя из вашего объяснения, последний "d1f 9.0" должен был сделать d1f из
01/11/60 -> "01111960"?
Краткий ответ на ваш вопрос "нет", пояснение ниже.
Первое наблюдение для d1f
основано на входных данных 01111960
, которые относятся к 11 января 1960 года, а также день 10
, поскольку SAS считает дни (как объяснено в моем первоначальном ответе).
Переменная d1f
содержит значение 10
для первого наблюдения.
d1f
имеет формат DATE9.
, примененный к нему на начальном шаге данных, поэтому первый proc print
показывает 11JAN1960
в качестве первого значения d1f
.
Второй proc print
имеет формат 9.0
, примененный к значению d1f
, это указывает SAS отображать значение d1f
(значение 10
) в пределах 9 столбцов (с 0 десятичными знаками) Вот почему вы видите 10
, отображаемое как первое значение d1f
во втором proc print
.
Следующий шаг данных может также помочь продемонстрировать, что происходит, если вы запустите его после своего кода и проверите в журнале результаты:
data _null_;
set SASWEEK.Datestest;
put d1f;
put d1f 9.0;
put d1f 8.0;
put d1f 7.0;
put d1f 6.0;
put d1f 5.0;
put d1f 4.0;
put d1f 3.0;
run;