Сегодня хотелось бы заглянуть в будущее и посмотреть что нас ждет через год или два.
А ждет нас конечно же еще один болезненный переход на новую версию SAS, а именно на 9.4 (ну конечно же если вы уже с 9.2 перешли на 9.3)
Честно говоря очень много изменений случилось в новой версии SAS, чтобы об всем рассказать и книги не хватит. Я бы даже сказал произошла некая небольшая революция. Можно было бы даже назвать версию сразу 10, но в SAS Institute видимо посчитали, что еще рано.
Ну так о новшествах: В SAS 9.4 появился новый язык DS2. Чем-то он может напоминать объектно-ориентированный, но не дотягивает до него. Однако обычные возможности Data Step сильно расширились. И видимо многим придется заново переучиваться или сильно доучиваться, чтобы начать писать свои программы на языке DS2. Я думаю что до этого пройдет еще не менее 2-3 лет. Как показывает практика от запада мы отстаем на 2 года, а там еще не начали во всю использовать этот язык.
И все же сегодня затронем тему параллельных вычислений. Как же все мы мечтали распараллелить наш data step последовательный код (по крайней мере я очень давно мечтал это сделать 🙂
И вот это свершилось теперь мы может распараллеливать наши вычисления.
Примеры:
Для начала создадим тестовую таблицу с 10 000 000 записей.
Затем создаем THREAD:
Теперь будет делать подсчет всех чисел от 1 до 10 000 000 в один поток:
Мы видим, что real_time практически идентичен cpu time и составляет почти 28 секунд.
Теперь выполним ту же задачу только в 8 потоков:
Из лога можно видеть, что реальное время работы программы уменьшилось до 7 секунд. А также работа cpu выросла до 50 секунд.
Теперь давайте решим эту задачу с помощью нашего обычного data step кода:
Мы видим, что результат практически идентичен работе нашей программы в один поток.
Ниже привожу результаты выполнения наших экспериментов:
Таблица T1 (формировалась в один поток):
Таблица Т8 (формировалась в 8 потоков):
И табличка которая получилась через data step код:
В общем и целом результат везде одинаков: 50 000 005 000 000 (сумма всех чисел от 1 до 10 миллионов).
P.S.
При написании статьи были использованы следующие материалы: