Что нового в 9.4 с точки зрения администрирования и установки SAS.


SAS версии 9.4, несмотря на то, что мы его считаем «новым», он вышел в июле 2013 года, он до сих пор мало где используется. Я подозреваю, что те, кто используют более старые версии SAS попросту боятся переходить на последнюю версию в силу ряда достаточно понятных причин. Это и сложно, это и затратно, а зачастую и очень трудоёмко.
Давайте вспомним, чем же так хороша версия 9.4. В книге Whats New in SAS 9.4 огромное количество информации, 140 страниц. Действительно, появилось огромное количество новшеств, которые могут перевесить в пользу перехода на версию 9.4 на чаше весов.

Попробую указать самые интересные нововведения с точки зрения внедрения,  администрирования и поддержки:
1)      Появился тонкий клиент Environment Manager(EM), который вполне способен заменить в будущем Management Console. EM позволяет осуществлять администрирование и мониторинг через веб интерфейс и, следовательно, не требует установки на компьютере пользователя.

2)      Большинствосерверов Web Application (Jboss, WebLogic, WebSphere) для Mid-Tier, которые ранее требовались приустановке SAS, теперь всезаменены на SAS Web Application Server. Как заявляют в компании, достаточно SAS специалистов поддержания нового сервера. Тем не менее, для внедрения и разработки одних навыков SAS будет недостаточно, так как этот сервер построен на методологии Spring Web Services. Тем не менее, этот шаг является «прорывом», так как значительно уменьшает количество проблем связанных с совместимостью, которые присутствовали в предыдущих версиях.
3)      Самое интересное, на мой взгляд, это уровень работоспособности и отказоустойчивости многократно улучшен в связи с возможностью установки более одного сервера метаданных. Другими словами, теперь возможность разместить как сервера метаданных, так и MidTier по кластерам. Таким образом, в случае поломки одного из серверов, служба продолжит работать.
Данная статья как бы калька другой статьи, которую можно прочитать по этой ссылке.

Работа с командной строкой CMD PROMPT через SAS


Всем привет!
Данная небольшая статья о работе с командной строкой (COMMAND PROMPT) в SAS и запуском внешних программ.


Работа с prompt осуществленная несколькими способами. В качестве примера используется команда копированияпереименование файла:
1.       Через синтаксис X:
x ‘copy input.txt input_x.txt’;

2.       Через макро вызов:
%sysexec(copy input.txt input_sysexec.txt);

3.       Через синтаксис в DATA STEP:
data _null_;
                call system(‘copy input.txt input_system.txt’);
run;
Также есть возможность синтаксиса через вызов SYSTASK, но я никогда им не пользовался. На мой взгляд, этот способ является расширенным, по сравнению с первыми 3. Возможно, в будущих статьях будет затронут этот метод.

В SAS путь по умолчанию SASconfigLev1SASApp для среды Windows. Для того чтобы изменить этот путь можно выполнить команду CD. Правда в случае с %sysexec команда отработана не будет. Пример синтаксиса:

data _null_;
                call system(‘cd c:’);
run;

или

x ‘cd c:’;

Запуск команд может быть двух типов: синхронный и асинхронный.
  • В первом случае запущенная команда должна быть завершена до начала следующей задачи. Синтаксис: options XSYNC
  • Во втором случае команда выполняется независимо от других задач, которые в настоящее время работают. Синтаксис: options NOXSYNC. Данная опция может быть полезна, если требуется запустить какой-то сторонний процесс и продолжить работу. Например, запустить Microsoft Excel.
Существует опция, которая также заставляет пользователя напечатать EXIT, чтобы вернуться к своей текущей сессии SAS в случае запуска команды. Синтаксис: options XWAIT / NOXWAIT.

В случае если возникла ошибка с запуском CMD команд в SAS Enterprise Guide, то вам сюда.

На этом всё и до скорых встреч!

Возможности автоматизированной работы с Google Analytics

Данная статья прольёт свет в вопросе возможности автоматизированной интеграции SAS с системой Google Analytics.

Что такое Google Analytics? Для меня это в первую очередь система сбора статистики по Web-сайту, приложениям AppStore и GooglePlay. Я подозреваю, что многие из вас знакомы с данной системой, и особо останавливаться на том не буду. Данная система – лишь одна из немногих, которая сегодня предоставляет сервис Google. По этой причине, чтобы пользоваться этими благами требуется создать себе или одолжить аккаунт в Google.
В своё время, поискав возможные пути решения задачи по автоматизации сбора статистики из Google Analytics, решил сначала пойти по наилегчайшему пути, как мне тогда казалось. Мне попалась на глаза Web страница, которая называется When Google Analytics Meets SAS.
Интересная статья была написана в 2011 году по поводу того, как можно работать с Google Analytics через SAS. Правда стоит отметить, что Google не стоит на месте, и по этой причине статья достаточно сильно устарела. Единственное, что могу сказать, практика интеграции (которые описаны в статье) является отличным опытом, которым можно воспользоваться и в других случаях.
Пройдусь по методам, описанным в статье:
1.       Метод ClientLogin+ HTTP Protocol
Данный подход подразумевается использовать программирование в SASвместе с использованием сторонней внешней программой SSL соединения CURL.
Удобство данного метода манит тем, что код уже написан и, вроде как, требуется лишь установить и правильно настроить CURL.
Действительно, данный метод позволяет пройти первичную авторизацию Google через ClientLogin. И это, пожалуй, всё, что может предложить данный метод, так как с полученной авторизацией выполнить какой-либо запрос в другой Google API более не возможно.
Всё дело в том, Google с 2007 года, а именно тогда была написана статья по использованию данного метода, выпустила ряд новых API, а старые либо отменила, либо скоро отменит.
2.       Метод с использованием Web портала от Google.
Данный метод действительно самый простой, так как Google Analytics API позволяет выгружать любые данные в файл. С другой стороны это и самый не надёжный способ с точки зрения автоматизации. Другими словами, нужен человек, который на регулярной основе будет скачивать эти отчёты, обрабатывать и создавать на их основе свои. Для автоматизации этот метод не подходит.
3.       Метод с использованием Google Oauth авторизацией через Python
В этом пункте вместо языка Python мог оказаться любой другой язык программирования на выбор: Java, .NET, Ruby, PHP, Javascript. Все эти языки официально поддерживаются и подробно описаны на сайте для Google разработки.
Наверно можно написать Java код в SAS PROC GROOVY, но, к моему сожалению, я не очень силён в Java. Как мне показалось, мне проще разобраться в языке Python и использовать его возможности, нежели возиться с Java или любыми другими языками.
Метод, который был предложен в статье, немного устарел, но всё ещё может быть полностью использован в качестве работы с Google Analytics. Более того, если будет понятно как использовать Oauth, то можно без особых проблем использовать и более новый способ. В моём случае был использован самый последний — Oauth2.
Далее, опишу подробней что необходимо, для того чтобы была возможна интеграция через Python. Я полагаю, что эти настройки универсальны и для других языков.
1. Для формирования статистики Google Analytics для Web сервера, приложения AppStoreили Google Play предварительно необходимо получить уникальные идентификаторы с сайта разработки:
·         CLIENT_ID
·         CLIENT_SECRET
·         REDIRECT_URIS.
2. Для успешного соединения с сервером требуется создать файл client_secrets.json со следующей структурой:
{
  «installed»: {
    «client_id»:»XXX.apps.googleusercontent.com»,
    «client_secret»: «XXX»,
    «redirect_uris»: [«XXX»],
    «auth_uri»: «https://accounts.google.com/o/oauth2/auth»,
    «token_uri»: «https://accounts.google.com/o/oauth2/token»
  }
}
3. Установка клиентов:

3.1. Python 2.7

Необходимо скачать под соответствующую операционную систему установочный файл:
После установки необходимо указать в системной переменной PATH путь к python.exe. Например, C:PYTHON27.

3.2. Google APP Engine

Необходимо скачать дистрибутив для PYTHON:
3.3. Библиотеки Google API для Python
Данные библиотеки можно как скачать напрямую по ссылке, так и установить, используя утилиту easy_install.
Инструкция к установке: https://pypi.python.org/pypi/setuptools
Далее в командной строке или через интерфейс Python необходимо запустить следующую строку:
easy_install -upgrade google-api-python-client
Подробное руководство по разработке можно найти на сайте:

Не стоит пугаться изучать другие языки программирования. Это полезно как для головы, так и для будущих карьерных возможностей. К тому же я уверен, что в случае с Google Analytics  достаточно внимательно изучить предоставленные примеры от Google, чтобы можно было по образу и подобию написать свой код, который будет выполнять поставленные задачи.
Далее, когда вы получите файл со статистикой из Google Analytics, я надеюсь, что проблем с обработкой этого файла не возникнет.
Появились вопросы? Задавайте. Буду рад на них ответить!

SAS Information Maps. Базовая работа с информационной картой. Часть 1.

Всем привет!
Данная статья целиком и полностью посвящена работе в Information Map Studio 4.31 и всему, что с этим связано.

Работа с Information Maps начинается с работы в Management Console, а именно с управления библиотек:
Библиотеки, которые были созданы в Management Console, далее будут отображаться в Information Map Studio. С ними мы и будем работать:
 
Далее, для работы потребуется включить Custom Properties значений, а также их шаблоны. Это обязательный элемент при проектировании информационной карты. 
Заходим в Tools-> Options -> Advanced:
 
Ставим галочки дляCustom properties at start-up и находим шаблон matemplate.txt в SASHomeSASCustomerIntelligenceStudio 
 
MATemplate.txt необходим для удобства и для ускорения работы с Information Maps. Он позволяет в несколько кликов выбрать соответствующие параметры для любых полей. Более того, его можно редактировать индивидуально для каждого конкретного случая.
Для того чтобы изменения вступили в силу, необходимо перезапустить Information Map Studio.
В качестве примера будем использовать стандартную схему Marketing Automation Sample
Данная таблица представляет собой описание о потребителях и домохозяйствах, а также связи между ними. Сохраним информационную карту и добавим таблицы из существующей библиотеки в Selected Resources:
 
Перенесём таблицу CUSTOMER в Information Map Contents:
 
Рассмотрим обязательные значения:
MAMeta – указание библиотеки (синтаксис SAS), где будут храниться значения метаданных после их генерации. В нашем случае будет так: libname mametac:temp’; Очень важно не ставить слэш в концеc:temp’, иначе генерация метаданных не будет работать.
Subject_Default – значение сущности (обычно ключа) по умолчанию. Используем: Subject_ID_C
Subject_ID_C – значение сущности, которое будет отображаться в выпадающем списке при работе в Customer Intelligence Studio.  Используем: Customer
Subject_Code_Subject_ID – уникальное двухзначное числовое значение, которое требуется для некоторых внутренних параметров в системе. Используем: 01
MetadataTable_Prefix_Subject_ID_C – значение, которое будет автоматически присвоено в начало названия у таблиц, содержащих метаданные. Используем: Cust
Также есть необязательные значения. Хочу выделить одно:
Metadata – указание на создание метаданных на самом верхнем уровне. Это означает, если было выбрано, что генерируются метаданные, то они будут сгенерированы абсолютно для всех элементов, если не указано обратное. На этом уровне рекомендую установить значение NONE. Если же параметр Metadata не указан, то по умолчанию у него проставлено значение COUNTS, что может очень сильно сказаться на скорости обновления метаданных.
 
Под метаданными понимается заранее подсчитанные и сгенерированные значения для выборки в Customer Intelligence Studio. Бывает 3 варианта: без метаданных (NONE), со значениями (VALUES) и со счётчиками (COUNTS). Выбор генерации метаданных определяет удобство с одной стороны, с другой стороны же – количество времени, требуемое на обновление этих метаданных. 
Приведу примеры отображения метаданных в Customer IntelligenceStudio по характеристике Gender (пол):
 Без метаданных (NONE)
 
Со значениями (VALUES). 
В этом случае достаточно быстро можно получить актуальные счётчики значений, если предварительно выбрать интересующее значение из списка и нажать обновить счётчики.
 
Со счётчиками (COUNTS)
Продолжим настройку информационной карты. На уровне ниже (на уровне папки) также выставляем значение Subject_ID_C  Subject_ID_C:
Далее переходим к основным элементам таблицы, с которой работаем. 
Основной параметр, который необходимо указать при работе с элементами – это LEVEL.
Level– значение, которое определяет как SAS будет работать с этой переменной. Оно бывает следующих типов:
Значение
Описание
Тип CHAR
Тип Num
Тип Дата
ID
Определяет данные, но не используется в анализе и не отображается в Customer Intelligence Studio
да
да
да
Unary
Может иметь лишь одно значение, включая пропущенное (NULL)
да
да
нет
Binary
Может иметь лишь два значения, включая пропущенное (NULL)
да
да
нет
Nominal
Может иметь множество различных значений, включая пропущенное (NULL). 
Без какого-либо порядка, например пол человека, семейное положение и тд.
да
да
нет
Interval
Может иметь множество значений, включая бесконечность.
нет
да
да
Ordinal
Может иметь множество значений, которые могут быть упорядочены. Например, доход, возраст и тд.
да
да
нет
Также очень важный параметр – Classification. Параметр связан со значение Level, а также он определяет, каким образом будет производиться классификация в SAS Information Map Studio.
Значение Level
Classification
Category
Measure
ID
да
нет
Unary
да
нет
Binary
да
нет
Nominal
да
нет
Interval
да
да
Ordinal
да
нет
Разница между Category и Measure заключается в том, что Measure позволяет проводить агрегацию по сущности. Для поля этого типа будет доступно значение AGGREGATION, где указывается, какого рода манипуляцию можно будет сделать. В списке значений представлено огромное количество на выбор. Например, значение среднего, минимума, максимума и тд. 
Продолжение читайте во второй части статьи про информационные карты.

SAS Information Maps. Базовая работа с информационной картой. Часть 2.

Продолжение первой части статьи по работе с информационными картами.

Основной выбор Level для числовых значений будет INTERVAL

Рассмотрим данные и их типы для таблицы CUSTOMER:
Cid – сущность таблицы. Идентификатор потребителя. Значения в таблице уникальны, и по этой причине использование Classification будет Category. Для обозначения сущности необходимо указать в значениях:
  • ·         level= ID,
  • ·         UseInSubjectId= Subject_Id_C (значение, которое будет использовано выше по иерархии  для обозначения сущности таблицы).
Ageвозраст. Level может быть Interval или Ordinal.
  • ·         Level = Interval
  • ·         Classification = Category
Gender – гендерная принадлежность (М Ж).
  • ·         Level = Nominal
  • ·         Classification = Category
State – штат проживания.
  • ·         Level = Nominal
  • ·         Classification = Category
Оставшиеся 3 элемента относятся ко второй таблице, речь о которой пойдёт чуть ниже. Тем не менее, этим элементам так же необходимо выставить значения уровня и классификации:
Hhid – идентификатор для таблицы HH.
  • ·         Level = Id
  • ·         Classification = Category
Hohageвозраст главы домохозяйства.
  • ·         Level = Interval
  • ·         Classification = Category
Hohgender – пол главы домохозяйства.
  • ·         Level = Nominal
  • ·         Classification = Category
Таким образом, получается следующая картинка: