SAS Optimization Code. Where and IF in Data Step code.

Сегодня хотел бы затронуть темы оптимизации SAS кода. На эту тему можно много чего сказать, но сегодня расскажу о том, что можно внедрить у себя уже сейчас, сразу после прочтения данной статьи.

Речь сегодня пойдет о разнице в использовании условий отбора Where и IF в Вашей коде. 
Не будем ходить в округ да около, а сразу начнем с примера:
WHERE:
IF:
Как говориться посмотри и найди разницу.
А разница состоит в отличии считанных строк. 
Таким образом best practices нам говорит использовать Where условие, хотя я честно говоря в примере особого выигрыша по времени не заметил. 
А теперь приведу картинку, раскрывающую теоретическую часть данного эксперимента:
Из приведенной картинки видно, что условие where проверяется еще до записи в PDV вектор, что экономит время работы программы. 
P.S. Если Вас заинтересовала статья по оптимизации кода и хотели бы ознакомиться еще с возможностью оптимизации, то просьба написать об этом в комментариях к данной статье. 

SAS Visual Analytics. GEO Map Russian.

Всем привет!

Сегодняшний урок будет плавным продолжением предыдущего. В котором мы познакомимся с продуктом SAS Visual Analytics и научимся загружать и просматривать визуальную географическую аналитике.
(P.S. Для более комфортного просмотра видеоролика лучше его просматривать на полном экране в Full HD качестве)

Надеюсь данный видио-урок был познавателен и интересен. Если есть вопросы можете задавать.

Download information from internet site by SAS. Координаты городов России для SAS Visual Analytics.

Всем добрый день.

Сегодня будем рассматривать задачу выгрузки данных с сайта в интернете.

Чтобы задача была более интересной, то давайте результатом нашей работы будет справочник городов России с их координатами.

Данный справочник будет нам полезен при работе с продуктом SAS Visual Analytics, где можно отображать данные на географической карте в SAS VA.

В качестве источника возьмем следующий сайт: http://sas-education.ru/Citycoord.html

На приведенной страничке подготовлены координаты российских городов.

Ниже приведен, код который позволяет сделать выгрузку содержимого страницы в sas file:

Далее на необходимо привести формат координат из обычного (с.ш.   в.д.) в понятный для карт формат (например для yadex карт). Для этого нужно перевести минуты и секунды в градусы. (в наших примерах имеются только минуты).

В итоге получаем следующую таблицу:

Проверим, что все сходиться (для этого вобьем координаты в yandex картах) для этого допустим введем координаты Королева — города в Московской области. :

P.S.

Ниже привожу полный код программы. Так что вы можете сами у себя попробовать запустить ее и получить справочник с координатами российских городов

http://sas-education.ru/city_coord.sas

Создание Workflow в SAS. Постановка Workflow на расписание. Снятие с расписания.

Всем добрый день.

Сегодня хотел бы освятить вопрос по созданию Workflow в SAS. Постановки потока на расписание и также показать как убрать данный поток с расписания.

P.S. 
Хотел также отметить, что кнопка снять с расписания появилась лишь с версии SAS 9.3.
Если у Вас есть какие-либо вопросы задавайте.

Дирректория WORK

Сегодня проведем эксперимент по тому когда очищается директория WORK.

Для начала давайте узнаем директорию в которую сохраняются данные из библиотеки work, для этого запустите команду:

 proc options option=work;
 run;

И в логах вы увидите путь к папке.

Создадим простую таблицу и убедимся, что она находиться в нашей папке:

Теперь закроем нашу сессию и посмотрим что произойдет.

А произойдет ровно то, что наша папочка с табличкой исчезнет.

Следовательно наш work чиститься сразу после закрытия сессии.

А теперь сделать обрыв сессии, путем убийства процесса

Теперь войдем в папку где должна находиться наша директория work и мы обнаружим, что наша директория не удалилась.

P.S. Если у вас происходит отрубание сессии пользователя, то не надо сразу паниковать и говориться, что данные в Work очень важны и они уничтожены. Скорее всего все ваши таблички живы и хорошо себя чувствуют. Просто надо отыскать вашу директорию.

P.P.S. Из вышесказанного видно, что при разрыве сессий пользователей директория work не чистится и со временем может забиться!
На это надо также обращать внимание и периодически чистить старые данные.

SAS and Excel 2010. XLSX.

Всем добрый день.

Сегодня рассмотрим пример работы SAS с файлами расширения xlsx, т.е. excel 2010.

Все мы знаем, что  excel-2003 файлы обладали ограничением в 65 536 строк.

Так вот давайте проведем эксперимент и попробуем записать в excel 2 000 000 записей.

Сперва попробуем сделать export в xls файл и увидим следующее:

В результате мы видим, что сам SAS на указывает на ограничения количества строк.

Теперь попробуем сделать выгрузку в xlsx файл:

Мы видим, что выгрузка прошла успешна и заняла чуть больше минуты.

Теперь попробуем загрузить данные обратно в SAS через proc import:

И мы также видим, что все наши 2 миллиона записей отлично загрузились обратно в SAS за в два раза большее время чем export, т.е. за 3 минуты.

А теперь интересный момент:

давайте попробуем открыть наш xlsx файл из Excel и мы увидим следующее:

Во-первых файл будет открываться очень долго
Во-вторых мы не увидим там 2 000 000 записей, а всего 1 048 576 записей. Вот так вот.

P.S.
Изначально пример взят от сюда:
http://blogs.sas.com/content/sasdummy/2012/01/25/export-to-excel-got-easier/

Unrestricted user

Сегодня расскажу о небольшом cheat коде, как сделать пользователя Unrestricted, т.е. дать ему неограниченные права.

Весь фокус состоит в том, чтобы добавить пользователя в файл «adminUsers», который находиться в папке «SASHOMELev1SASMetaMetadataServer»

Если вы откроете данный файл, то увидите примерно следующее:

; This file contains a list of userids that, when connected
; to the SAS Metadata Server, are considered Administrators
; of the server.  Administrators have a number of special
; privileges including, but not limited to:
;     creating and deleting users
;     starting, stopping, and pausing the server
;     creating repositories
;
; Each line of this file contains a single UserID entry.
; The entries may be in the following forms: ‘userid’,
; ‘domainuserid’, and ‘userid@domain’.
; A semicolon at the beginning of a line indicates that the line is
; not to be processed.
;
;
*sasadm@saspw

Видно, что уже один пользователь в этом списке имеется, заданный при установке SAS — sasadm@saspw.

Если вы хотите еще добавить пользователя с безграничными правами, то вам следуют дописать ниже логин пользователя и вначале поставить *.  Пример:
*user1
*user2

После этого не забудьте перегрузить SAS Metadata Server, чтобы введенные изменения вступили в силу.

Данный способ хорош, когда вы забыв права доступа на sasadm@saspw неправильно ввели несколько раз пароль и заблокировали администратора тем самым.

Тогда вам поможет добавление еще одного unrestricted пользователя и с помощью него разблокирует sasadm@saspw.
Затем удалив пользователя из данного файла вы также легко вернете ему обычные права.

Преемственность версий SAS.

Странная картина наблюдается, когда вы пытаетесь подсоединиться через SAS Managment Console 9.3  или SAS Data Integration Stuido 4.4  к серверу SAS MetaData Server 9.2, а именно вы увидите следующее сообщение об ошибке:

Т.е из клиентов от SAS 9.3. вы не сможете подсоединиться к более старой версии SAS, а именно 9.2.

Обратное кстати не верно, т.е. из SAS Managment Console 9.2 и SAS Data Integration Stuido 4.2 вы сможете подсоединяться к SAS 9.3.

Таким образом при переходе на SAS 9.3 возможно на каких-то клиентских машинах потребуется переустанавливать клиентов SAS.

Кстати говоря SAS Enterprise Guide 5.1 отлично соединяться как с версией SAS 9.3, так и с версией SAS 9.2.

SAS connect to Oracle. Part 4. Hints.

Всем добрый день.

Сегодня рассмотрим задачу использования Oracle Hints при обращении к БД Oracle из SAS.

Для этого вам потребуется всего лишь в строку соединения добавить следующие слова:

preserve_comments

А теперь рассмотрим примеры:
Пример довольно простой — мы хотим узнать сколько строк в некой таблице Oracle

1. Вариант (без preserve_comments)

Прошу обратить внимание на Log данного запроса из которого видно, что наш parallel hint был вычеркнут из запроса.

2. Вариант (c preserve_comments)

А в этом варианте видно, что выражение с hint дошло до oracle именно в том виде в котором мы написали.

P.S.

Для получения подробных логов  необходимо использовать подключение следующих опций:

Однако хочу предостеречь от постоянного использования данной опции, т.к. сильно раздуваются лог файлы.

Использовать данную опцию стоит лишь на этапе отладки кода. В дальнейшем ее нужно отключать.
Также данную опцию часто просят включать в службе поддержки SAS для предоставлении более детальных логов в случае возникновения вопросов(ошибок) связанных с взаимодействием с внешними базами данных.

SAS connect to Oracle. Part 3. BULKLOAD.

В предыдущих примерах мы рассматривали задачу загрузки данных из Oracle в SAS.
Теперь же давай попробуем из положить из SAS в Oracle.

1. Data set.

В данном примере мы видим, что время выгрузки данных в Oracle существенно больше чем время загрузки, а именно более 2-х минут против 10 секунд загрузки.

 2. Proc sql.

Здесь также видим превышение 2-х минут.

3. Proc sql + BULKLOAD

В данном примере мы использовали опцию BULKLOAD и время выгрузки уменьшилось с более чем 2-х минут до 11 секунд.

P.S. Для работы параметра BULKLOAD вам необходимо чтобы стоял полный клиент Oracle, а именно в директории Oracle_HOMEproduct11.2.0client_1BIN находился файл: sqlldr.exe.
У меня изначально была поставлена легкая версия клиента и этот файл отсутствовал. Пришлось переставлять клиента.