Немного о сертификатах SAS

Всем привет!
В данной статье я напишу об официальных сертификатах от компании SAS, немного о своём опыте получения сертификатов, и помогли ли они мне при трудоустройстве на работу.

Насколько мне известно, сертификаты от SAS можно получить двумя способами:
1. Пройти обучение и после него получить сертификат об успешном прохождении курсов
2. Пройти тестирование в специальных центрах
Сертификаты в этом случае немного разные. Насколько мне известно, вторые за рубежом ценятся больше и имеют вес при приёме на работу. В России пока разницу я не заметил.
Я попробую немного рассказать о втором пункте, а именно о сертификатах, которые надо сдавать.
На официальном сайте можно найти список экзаменов. К слову, список экзаменов иногда меняется: что-то появляется, что-то уходит. Некоторые экзамены меняют версии по продуктам, но в целом они не сильно отличаются. Если была 8 версия продукта, то экзамен по 9 будет идентичным. Сертификаты с некоторых пор выдают бессрочно.
Блок SAS программирование:
SAS Certified Base Programmer for SAS 9 представляет собой экзамен по программированию в DATA STEP. Ни больше, ни меньше. По-моему, для успешной сдачи данного экзамена требуется уделить от 3 до 6 месяцев на подготовку. Мне было достаточно легко подготовиться, так как я активно использовал SAS Base в учебе за рубежом. И всё же, даже при активном программировании в SAS, сдать успешно экзамен без подготовки маловероятно. Некоторые люди, которые программировали в SAS более 15 лет набирали всего 80%. Собственно, как и в любом другом тесте. Из этой серии, как вы думаете в тесте на знание английского языка, какой балл в среднем набирает носитель языка? =)

SAS Certified Advanced Programmer for SAS 9 — экзамен по MACRO, PROC SQL и оптимизации кода. Получение этого сертификата возможно только при наличии сертификата SAS Base. На подготовку к этому экзамену зависит то, чем вы занимаетесь. Если в вашей рутиной работе вы постоянно сталкиваетесь с вышеперечисленными вещами, то я думаю можно подготовиться за 1-3 месяца. Хотя я сам только планирую сдавать этот экзамен в ближайшее время =)

Мой личный опыт сдачи экзамена можно прочитать тут.

SAS Certified Clinical Trials Programmer Using SAS 9 — экзамен для тех, кто собирается работать и заниматься клиническими исследованиями. Как я понял, экзамен представляет собой смесь из SAS Base, некоторых специфических процедур и очень сугубо специфических вопросов по клиническим исследованиям. Сам не сдавал и не планирую.

Блок продвинутой аналитики
SAS Certified Predictive Modeler Using SAS Enterprise Miner 7 — на мой взгляд самый сложный экзамен. Экзамен этот по Data Mining. Подготовиться к нему без преподавателя будет очень сложно. Во время экзамены сдающий подсоединяется к некой тестируемой базе, заходит в Enterprise Miner. Далее экзамен представляет собой список вопросов по основным блокам для статистического анализа. Один блок — одна база. Для каждого пользователя создаётся своя база, то есть списать не получится. Почти на каждый вопрос приходится искать ответ в Enterprise Miner. Из 10 человек, кто сдавал со мной, сдало лишь 3. Все мы проходили полугодовой курс по SAS EM.

SAS Certified Statistical Business Analyst Using SAS 9: Regression and Modeling — судя по вариантам вопросов, экзамен представляет собой на понимание основ построения регрессий и моделирования. Так же будет набор вопросов по процедурам связанным с моделированием.

Блок BI
SAS Certified BI Content Developer for SAS 9 — экзамен по Web Studio и BI DashBoard. На мой взгляд экзамен простоват.

Блок Работа с данными
SAS Certified Data Integration Developer for SAS 9 — как видно из названия экзамен по DIS, то есть по ETL в SAS. Аналогично, экзамен выглядит простым.

Блок администрирования
SAS Certified Platform Administrator for SAS 9 — экзамен на понимание работы библиотек, администрирования в Eguide и Management Console. 
Кстати, SAS делит тесты на уровни сложности. Каждый из них помечен в описании на официальном сайте.
Для сдачи теста необходимо зарегистрироваться на сайте http://www.pearsonvue.com/sas/, выбрать место и время, а затем оплатить.

Подготовиться и сдать эти экзамены вполне реально. Существует несколько сайтов, где выложены примеры вопросов и ответы к ним (возможно даже правильные).
Вот некоторые из них:
Достаточно много сайтов готовы предоставить эти примеры за символическую плату в 5-20 американских долларов.
К большинству экзаменов можно будет подготовиться, если скачать ответы и их выучить.
Как вы можете убедиться, большого ума не надо, для того чтобы сдать тест. Всего лишь необходимо выучить 200-300 вариантов.
Но тут есть небольшой подвох:
  • Не все ответы правильные, их надо проверять
  • SAS добавляет новые вопросы (может и удаляет старые)
  • Визуально ответы будут расположены каждый раз в случайном порядке
  • Не все тесты имеют подготовленные заранее ответы (SAS Enterprise Miner)
  • Не все варианты вопросов можно найти в интернете
Для сдачи теста, достаточно набрать 70%. У каждого теста есть свои нюансы, смотрите ссылки выше.
Про сертификаты у меня всё. А вот про то, насколько они помогают при трудоустройстве на работу, много писать не придётся.
Как я понял, сегодня российский работодатель не в курсе что это за сертификаты такие и зачем они ему нужны (или мне как работнику). Моя статистика говорит, что только 2 из 9 работодателей сегодня в курсе что это за сертификат. На моё нынешнее трудоустройство  наличие сертификатов повлияло.
Заинтересованы в сертифицированных специалистах пока только IT компании, так как это может позволить выиграть тендер или иметь статус компании партнёра. Банкам нужны руки, а не сертификаты. Компаниям, которые занимаются клиническими исследованиями нужны люди, которые умеют программировать. Научить программировать в SAS Base они вроде знают как.
Есть ещё наверно и другие вакансии где используется SAS, но на собеседования меня в эти компании не приглашали.
На этом всё!
До следующего раза!

Удаление строк дубликатов в SAS

Тема довольно простая и задача, я думаю, распространенная, но поскольку мне в моей работе с ней пришлось столкнуться совсем недавно, то не обошлось без кривого кода и дальнейшего радостного нахождения необходимой функции. Поэтому для наглядности расскажу все по порядку.
Вначале мной был опробован метод основанных на тех знаниях которые у меня были, а именно использовались магические First.переменная и Last.переменная . Что это?
Если вы отсортируете вашу базу по какой-либо переменной , например, Name, то получите, скажем, такой  результат:
Name
1
Андрей  
2
Андрей  
3
Вася   
4
Коля   
5
Яна    
6
Яна    
7
Яна    
8
Яна    
Так вот, поскольку SAS обрабатывает данные построчно, то находясь на первой строке он будет знать что Андрей под номером 1 это начало группы Андреев и для первого Андрея будет выполнятся условие  Fist.Name=1, для последнего Андрея (2 строка), замыкающего группу будет верно Last.Name=1.
Name
Для проверки переменной Name
1
Андрей  
Fist=1
2
Андрей  
Last=1
3
Вася   
Fist=1    Last=1
4
Коля   
Fist=1    Last=1
5
Яна    
Fist=1
6
Яна    
7
Яна    
8
Яна    
Last=1
Т.к. Вася у нас в списке один то он является как началом, так и концом группы т.е. обрабатывая строчку с Васей  SAS будет считать что для него верны оба выражения Fist.Name=1 и Last.Name=1.
Ян у нас много, для Ян в 6 и 7 строке оба условия
if  Fist.Name=1 и 
if  Last.Name=1 
ложные т.к. они не начинают и не замыкают отсортированные группы. 
Если попытаться подытожить, то после сортировки вы с помощью условий Fist.переменная=1 и Last. переменная =1 можете понять — где начинается и где кончается отсортированная группа. К слову если вы будете сортировать по нескольким переменным картина будет примерна такая:
Name
Age
Для проверки переменной Name
Для проверки переменной Age
1
Андрей  
12
Fist=1
Fist=1    Last=1
2
Андрей  
13
Last=1
Fist=1    Last=1
3
Вася   
11
Fist=1    Last=1
Fist=1    Last=1
4
Коля   
15
Fist=1    Last=1
Fist=1    Last=1
5
Яна    
14
Fist=1
Fist=1
6
Яна    
14
7
Яна    
14
Last=1
8
Яна    
67
Last=1
Fist=1    Last=1
Ну вот на идеи заключающейся в том, что нам надо оставить только те записи, которые являются началом очередной группы ( при сортировке по двум переменным началом группы по второй переменной) и был основан «гениальный» метод  удаления дубликатов. Этот метод еще допустим, если надо решить проблему дубликатов по одной или двум переменным, но как только встает вопрос о всех переменных, тут уж простите «хана», надо сперва отсортировать по всем переменным а потом прописать кучу условий и становится понятно что кто-то чего то не знает. Т.к. не могли создатели языка не подумать о столь простой и нужной вещи. Она и нашлась спустя пары минут поиска:
PROC SORT  in= ФАЙЛ out=ФАЙЛ NODUNKEY;
BY _ALL_; *в этом случае дубликаты ищутся по всем переменным, можно прописать по каким именно вам надо;
Run;
Отрабатывае этот код, естественно, в разы быстрее чем все придуманные мной до этого извращения.
Заметка будет полезна скорее начинающим чем людям долго работающим с SAS

SAS 9.4. AES Enctyption. Продвинутый стандарт шифрования.

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

И мы продолжаем тему новых «фишек» SAS 9.4.

Сегодня хотел бы затронуть тему шифрования.

Как-то уже эта тема поднималась, когда речь шла о шифровании паролей здесь.

Так вот в SAS 9.4 появился новый продвинутый стандарт шифрования.

Чем же он отличается от предыдущего. Давайте посмотрим на сравнительные таблицы:

Features
ENCRYPT=YES
ENCRYPT=AES
License required
No
No
Encryption level
Medium
High
Algorithm supported
within Base SAS software
AES
Installation required
No (part of Base SAS software)
No SAS/SECURE (with Base SAS software)
Operating environments supported
UNIX
Windows
z/OS
UNIX
Windows
z/OS
SAS version support
8 and later
9.4 and later

Так вот теперь мы можем использовать также новый метод при шифровании паролей:

Encoding Method
Description
Supported Data Encryption Algorithm
sas001
Uses base64 to encode passwords.
None
sas002, which can also be specified assasenc
Uses a 32-bit key to encrypt passwords.
SASProprietary, which is included in SAS software.
sas003
Uses a 256-bit key plus 16-bit salt to encrypt passwords.
AES (Advanced Encryption Standard), which is supported inSAS/SECURE.
sas004
Uses a 256-bit key plus 64-bit salt value to encrypt passwords.
AES (Advanced Encryption Standard), which is supported inSAS/SECURE.

К сожалению, в сегодняшнем уроке я не смогу вам показать все прелести шифрования с помощью AES, т.к. в используемой лицензии отсутствует такая возможность :).

При попытке использовать AES получаю следующего рода сообщения в Log файле:

Так что будьте внимательны при заказе лицензии, если захотите использовать данные преимущества.

P.S.
Использовались материалы:  pwencode, aes.

С уважением,
Николай.

SAS SignOn. Подключение удаленных(remote) библиотек.

Все привет.

В сегодняшнем уроке речь пойдет о такой замечательной возможности, как подключение удаленных библиотек с помощь signon.

Представьте, что вы работает в SAS и вам понадобилось данные с другого сервера, на котором также установлен SAS.

Как же решить эту задачу?

Конечно же можно расширить данные, однако в таком случае мы можем нарушить политики безопасности. SAS в таких случаях позволяет присоединить удаленную библиотеку. (Для этого необходимо, чтобы на сервере куда вы присоединяетесь был настроен SAS/Connect Server, а у вас стоял SAS/Connect Client)

И так в следующем примере мы подсоединяем удаленную библиотеку:

Далее попробуем подсоединить папку с сервера в качестве удаленной библиотеки:

В результате у нас появиться специфическая иконка в библиотеках:
Для того чтобы разъединиться необходимо выполнить команду signoff:
Хочу заметить, что в параметре real time — указано время всего соединения. 
Ниже привожу виде с уроком:
До скорых встреч!
С уважением,
Николай.

Возможные проблемы при работе с SFTP в SAS

Всем привет!

Надеюсь, что вы уже прочитали мой пост ранее.

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

Обычно при первом подсоединении SAS выдаёт следующее сообщение:

Looking up host. Connecting to 00.00.00.00 port 000
..
..
The server’s host key is not cached in the registry.
You have no guarantee that the server is the computer you think it is.
The server’s rsa2 key fingerprint is: ..
If you trust this host, enter «y» to add the key to PuTTY’s cache and carry on connecting.
If you want to carry on connecting just once, without adding the key to the cache, enter «n».
If you do not trust this host, press Return to abandon the connection.
Store key in cache? (y/n)
Решение этой проблемы лежит на поверхности: необходимо подсоединиться к серверу клиентом PUTTY, чтобы он запомнил fingerpring сервера в реестре.

HKEY_CURRENT_USERSoftwareSimonTathamPuTTYSshHostKeys

Так же официальная поддержка ссылается на документ в котором расписаны некоторые детали подключения по защищённым соединениям.

Но что будет, если вам надо запланировать или отправить на расписание процесс, которые использует SFTP соединение?
В этом случае в логах мы опять увидим сообщение, что ключ не зарегистрирован.

Дело в том, что запланированный процесс запускается не вами, а пользователем SASSRV или Stored Process Server (Spawned Servers). 

Как было указано ранее, для того, чтобы SAS сумел подсоединиться требуется запись в реестре. И тут возникает вопрос, а как сделать запись в реестре для пользователя SASSRV?
Я подозреваю, что есть несколько вариантов, но расскажу лишь про самый «колхозный» =)

Заходим в локальные политики User Rights Assignment Allow log on through Remote Desktop Services и добавляем туда пользователя SASSRV.
Если такого пользователя нет, то необходимо его создать в Server Manager.
Далее заходим в систему под SASSRV, запускаем Putty и подсоединяемся по SFTP.

Вуаля! Теперь всё работает!

До скорых встреч!

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

ERROR: Public Key Authentication is required, Password validation is not supported.
ERROR: For further debugging assistance, insert the PSFTP verbose parameters «options=’-v’ debug» on the Filename sftp statement
and review the SAS log.
ERROR: Connection refused, check key authentication and sshd server status.

Одним из возможных  решений данной проблемы может быть указание дополнительных опций в FILENAME statement. Необходимо добавить следующий параметр:

filename XXX sftp <options> WAIT_MILLISECONDS=XXXX;

То есть, мы искусственно добавляем время ожидания сервера, например до 5 секунд (5000) и всё опять начинает работать! 

SAS Fraud detection

Все наверное видели рекламный ролик SAS: Enterprise Fraud and Financial Crimes. Оратор произнес очень важную фразу — “reducing false positives”. Это, наверное, одна из важнейших характеристик fraud detection системы для организации работающей с клиентами. Абсолютно не проблема отметить как подозрительные транзакции все действия “похожие” на уже совершенные мошеннические операции. Проблема — не отпугнуть добросовестных клиентов, попавших в этот список.

Приведу несколько цитат из статьи “Statistical Fraud Detection: A Review” by Richard J.Bolton and David J.Hand:

“One of the difficulties with fraud detection is that typically there are many legitimate records for each fraudulent one. A detection method which correctly identifies 99% of the legitimate records as legitimate and 99% of the fraudulent records as fraudulent might be regarded as a highly effective system. However, if only 1 in 1000 records is fraudulent, then, on average, in every 100 that the system flags as fraudulent, only about 9 will in fact be so. In particular, this means that to identify those 9 requires detailed examination of all 100 — at possibly considerable cost. This leads us to a more general point: fraud can be reduced to as low a level as one likes, but only by virtue of a corresponding level of effort and cost. In practice, some compromise has to be reached, often a commercial compromise, between the cost of detecting a fraud and the savings to be made by detecting it.”
  

Почему так происходит поясняет следующая схема:

Области множества символизируют:
1 — все транзакции (N)
2 — мошеннические транзакции классифицированные как не мошениические (False negatives)
3 — правильно классифицированные мошеннические транзакции (True positives)
4 — нормальные транзакции классифированные как мошеннические (False positives)
Мы предполагаем что в базе данных примерно каждая тысячная транзакция — мошенническая

 

Это так называемая prior probability. Т.е. изначально мы можем сказать (после просмотра существующей базы данных), что каждая следующая транзакция которую мы будем наблюдать, с вероятностью 0.001 является мошеннической. Математически это так, но это тоже самое как если бы врач объявлял пациенту, только что зашедшему в кабинет, что он болен с такой то вероятностью такой то болезнью. Но потом бы он проводил осмотр, проверял симптомы и корректировал бы вероятность, получая posterior probability, которая нас и интересует (и потенциального больного тоже). 
Предположим что всего в базе содержится N записей. Точность классификации (accuracy) мошенников и нормальных транзакций- 0.99 (в обоих случаях). Далее, 100 записей было классифицировано как fraud (область 3 + область 4):

истинные мошенники попадают только в область 3:

Теперь посчитаем долю истинных fraud transactions (область 3) среди всех записей классифицированных как fraud (область 3 + область 4)

То есть из 100 “подозрительных” транзакций только примерно 0.09 будут действительно мошеннические. И это при том, что наш классификатор имеет очень выскокую точность 99%.

Еще несколько цитат:

“Fraud detection is a continuously evolving discipline.Whenever it becomes known that one detection method is in place, criminals will adapt their strategies and try others..”
“The development of new fraud detection methods is made more difficult by the fact that the exchange of ideas in fraud detection is severely limited.”
Т.е. помимо того, что имеется очень мало записей о реальных мошеннических операциях, мы еще имеем адаптивное поведение мошенников и естественные ограничения на обмен знаниями между банками в силу специфики отрасли. Всё это делает fraud detection очень сложной задачей. Скорее всего для ее решения нужна комбинация supervised (для мониторига он-лайн) и unsupervised (для выявления новых, ранее не известных мошеннических схем) алгоритмов.
Банки должны находить некий баланс между стоимостью “ручной проверки” всех транзакций классифицированных как fraud и возможными потерями связанными с false positives.
Второй случай встречается довльно часто. Одним из важных параметров fraud detection системы является location транзакции. Если клиент совершал транзакции в течении месяца например из Франции, а в один прекрасный день прилетел в Бразилию и решил там срочно снять наличных на 1000 евро, то велика вероятность что карточу заблокируют. Тоже самое и в США, только там банки рекомендуют клиентам сообщать о своих передвижениях даже если они перемещаются в другой штат.
Вывод: учитывая перечисленные трудности, коробочное решение, которое работает “out of the box” — врят ли возможно в принципе.

Одна из глав книги: «Стартовая дата 1 января 1960 года. Почему?»

Всем привет!

Ниже привожу одну из глав книги. Думаю многим будет интересно, кто когда-либо задавался этим вопросам, как и я.

В продукте SAS есть такая специфика, что нулевая дата считается с 1 января 1960 года. Дата храниться в виде числа, отображается в том виде, в каком захотите и эта дата, если мы говорим просто про день без времени, храниться в виде числа — кол-во дней от 1 января 1960 года. Вот такой интересный факт. Кто об этом знает, наверняка задумывался вопросом – «почему именно эта дата?».




















Так вот ни какому особенному событию эта дата не привязана, как могло бы показаться на первый взгляд. Изначально я раньше сам полагал, что это дата основания компании SAS, однако как это видно из предыдущей главы – это не так. Да туже 1 января 1960 года выбрал в качестве стартовой сооснователь компании — Энтони Барр. Точных причин, думаю, никто не узнает, однако одной из них являлось то, что дата должна была занимать мало машинной памяти и должна быть больше чем начальная дата на машинах IBM – 1 января 1900г. Также возможно эта дата была приурочена к выходу релиза IBM System 360 (апрель 1964). IBM здесь упоминается, в связи с тем, что компоненты SAS работали исключительно на мэнфреймах IBM.

Hash-Merge. Самый быстрый способ обновления или обогащения данных.

Всем привет.

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

Так вот кто помнит с какими трудностями связано использование Merge в SAS?

Да, правильно! С тем что данные приходиться предварительно подготавливать. Чаще всего вы обычно сортируете данные перед этим по ключу (либо строите индекс по ключу, что тоже как вариант подходит).

Так вот самый быстрый способ — так называемый Hash-Merge.

Думаю, мало кто его применят на практике ввиду его более сложного понимания, однако он действительно является самым быстрым.

Далее сравним время выполнения на примерах:

В качестве примера рассмотрим объединение двух таблиц: Large (315975) и small (63406).
Сначала объединим эти таблицы быстрым способом, т.е. с использованием hash join:
В логах видно, что время выполнения данной операции составилось 1 минута и 22 секунды:
Теперь сделаем туже самую операцию через обычный merge:
Конечно же для начала нам потребуется данные подготовить, т.е. сделать сортировку как в нашем случае с большой таблицей и построить индекс на маленькой.
И что мы видим:
А то что вся наша операция заняла: 5 секунд+ 3 мин 15 сек + 1 мин 7 сек = 4 минуты 28 секунд
Т.е. более чем в 3 раза быcтрее оказался hash-merge!
P.S. пример был взят от сюда.
С уважением, 
Николай.

SAS Global Forum 2014

SAS Global Forum, March 23-26, 2014

Conference tutorials — интересные темы, но за каждый семинар надо отдельно платить. 
И это помимо registration fee. Дорогие у них семинары.
#Update:
Удивительно, но в прошлом году этот форум посетило больше людей из Health Care чем из Banking сектора. Хотя Banking + Financial Services дадут в сумме больший процент.
Интересно есть ли подобная статистика по SAS форуму в России.

SAS Export Metadata from one instance to another. Экспорт метаданных.

Всем привет!

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

Все мы сталкивались и работали с парадигмой: DEV, TEST, PROD (иногда этот список гораздо шире добавляются пре-проды и еще всякие, но как правило среды три).

Так вот при разработке на одной среде нам необходимо перенести наши наработки на другую среду и тут возникает вопрос «как это сделать?».

На самом деле многие знают ответ на этот вопрос  — для этого нужно зайти в SAS Managment Console и сделать export метаданных в пакет

, а затем после переноса этого пакета на другой сервер сделать импорт.  Вот в общем-то и вся технология.

Таким образом можно было переносить различные ваши наработки такие как: OLAP кубы, jobs, различные reports, maps и так далее.

Однако в версии SAS MC 9.2 остро стоял вопрос переноса пользователей.

Так вот в SAS MC 9.3 эта проблема ушла. Добавилась еще одна полезная закладка (Search):

Где вы можете выбрать желаемые объекты (в том числе и пользователей) воспользовавшись удобным интерфейсом:

И уже, запаковав их в пакет, перенести на другой сервер.

В конце хочу сказать следующее: в каждом правиле есть свои исключения и одно из таких исключений — это Business Context (Бизнес контекст), который вы создаете, работая в SAS Marketing Automation.
Так вот этот бизнес контекст перенести нельзя :).

Поэтому в если вам нужно перенести капании и шаблоны, то вам предварительно нужно создать ручками бизнес контекст на новой среде по образу и подобию эквивалентный исходному и уже после переносить все ваши наработки.

Так что пользуйтесь на здоровье.

С уважением,
Николай.