Набор данных, в котором одна переменная даты предшествует другой переменной даты

#sas

#sas

Вопрос:

Я объединил два набора данных. Один набор данных содержит дату отправки проекта, а другой — дату завершения проекта. Я хочу иметь новый набор данных, содержащий только проекты, в которых дата окончания предшествует дате отправки. Я в основном пытаюсь определить, где проекты должным образом закрываются, прежде чем мы отправим их на внешние проверки. Обе переменные даты являются date9. форматы.

Данные выглядят примерно так (редактировать: пропущенных дат нет)

 Service Submission_date End_date
1       1/1/2010        2/1/2009
2       2/1/2010        12/31/2010
3       5/1/2012        3/1/2010
  

Я использовал простой оператор where, но я все еще не вижу неправильных дат. Я использовал код, подобный этому:

 data correctsubmission;
set projects;
where end_date < submit_date;
run;
  

Есть идеи?

Комментарии:

1. Если end_date отсутствует, то оно будет меньше, чем submit_date . SAS обрабатывает все пропущенные значения как меньшие, чем любое фактическое число.

2. Ни одна из моих дат не пропущена в этом экземпляре

3. Это submission_date или submit_date? Потому что у вас есть оба вопроса. Кроме того, я рекомендую протестировать ваш код с константой date, заменяющей end_date и submit_date по отдельности, чтобы проверить, правильно ли SAS распознает каждую переменную (например, где end_date < ’01JAN2010’d).

4. Какие-либо предупреждения или примечания в выходных данных журнала?

Ответ №1:

Убедитесь, что ваши переменные действительно содержат даты.

 data have;
  input Service Submission_date End_date ;
  informat Submission_date End_date mmddyy.;
  format Submission_date End_date yymmdd10.;
cards;
1       1/1/2010        2/1/2009
2       2/1/2010        12/31/2010
3       5/1/2012        3/1/2010
;
  

Они должны быть числовыми переменными, которые содержат количество дней с 1960 года. Предпочтительнее использовать формат даты (например, DATE, YYMMDD и т.д.), Чтобы пользователи могли прочитать отображаемое значение.

Также обязательно учитывайте пропущенные значения.

 data want;
  set have;
  where .Z < end_date < submission_date;
run;
  

Или выполните обратный тест.

 data want ;
 set have;
 where Submission_date > End_date ;
run;
  

Комментарии:

1. Спасибо, но пропущенных дат нет.