Код SAS в терминах «Дата» - PullRequest
       11

Код SAS в терминах «Дата»

0 голосов
/ 24 августа 2018

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

    DATA SASWEEK.Datestest;
  INPUT d1 MMDDYY8. +1 d2 DATE9.;
  * informat does;
  * Can be replaced by an informat statement;
  d1f = d1;
  d2f= d2;
  d3f = d2;
  FORMAT d1f DATE9. d2f WORDDATE. d3f MMDDYY8.; *formats;
  datalines;

01111960 12JAN1960
01011961 01MAR2013
;

PROC PRINt;
RUN;

PROC PRINT;
   FORMAT d1f 9.0 d1 WEEKDATE.;
RUN;

Любые предложения и объяснения будут высоко оценены !!

1 Ответ

0 голосов
/ 24 августа 2018

Я не уверен, что вы ссылаетесь на формат в 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;
...