2015-05-18 2 views
0

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

я обычно делаю это следующим образом:

proc sql noprint ; 
select MAX(MDY(input(SUBSTRN(MyDate, 6, 2),2.), input(SUBSTRN(MyDate, 9, 2),2.), input(SUBSTRN(MyDate, 1, 4),4.))) as max_date FORMAT=date9. 
into :max_date 
from FooData; 
quit; 

В этом случае данные содержит более 100 млн строк и работает этот код каждый день кажется громоздким. Может ли кто-нибудь подумать о более эффективном способе подхода к этой проблеме?

+1

Ваши даты, похоже, хранятся в формате yyyymmdd10, можете ли вы подтвердить, что в столбце MyDate хранится только дата? (т. е. никакого другого текста впоследствии) – Longfish

+0

@Keith. Я могу подтвердить, что в этой переменной нет другого текста. – Herm

ответ

3

Хорошей вещь о ГГГГММДДЕ, что при сортировке его в виде строки, она также заканчивает отсортированные в качестве даты (в отличие, например, ММ/ДД/ГГ). Так что просто возьмите max().

+0

после того, как не нужно преобразовать переменные символов в числовое значение, просто поиск значения MAX() будет молниеносно. благодаря – Herm

1

Вы можете, безусловно, упростить заявление select, используя единый информационный документ для чтения в дате вместо 3 подстрочных вычислений. Очевидно, что это нужно делать для каждой записи, поэтому она все равно замедлит ее работу, но, надеюсь, не так сильно, как в настоящее время.

proc sql noprint ; 
select MAX(input(mydate,yymmdd10.)) as max_date FORMAT=date9. 
into :max_date 
from FooData; 
quit; 
Смежные вопросы