SAS Download Manager and Hotfixes.

Всем привет.

Сегодня хотел бы рассказать немного о SAS Download Manager.

Кто не знает — это программка для закачки depota SAS.

К особенностям этой программки можно отнести ее размер — это более 40мб :).

Но рассказать я хотел не об этом…

Дело в том, что правилом хорошего тона при инсталляции является разбиение этой самой инсталляции на несколько шагов:

  1. Непосредственная инсталляция компонентов
  2. Скачивание и накат HotFixes
  3. Конфигурация системы
Так вот если вы скачиваете свой депот впервые с помощью SAS Download Manager, то он сам определяет какие вам нужны Hotfixes и также докачивает их. 
Поэтому всю инсталляцию и конфигурацию в этом случае можно сделать за один шаг.
Не стоит забывать, если ваш депот был скачан более месяца назад, то в этом случае лучше воспользоваться программой определения свежих HotFixes.
Более подробно об этом можно посмотреть здесь.
До скорых встреч в Новом Году.
С уважением,
Николай.

SAS Visual Analytics 6.3

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

Сегодня вся Европа и Америка праздную рождество, но речь пойдет не об этом.

Хотел бы затронуть тему новых релизов SAS, а именно речь пойдет о только что вышедшей на прошлой неделе версии SAS Visual Analytics 6.3

Скажу так, что SAS скорее всего в ближайшем будущем будет отказываться от своего стандартного BI (SAS Web Report Studio) в пользу SAS Visual Analytics и всеми силами будет его продвигать на рынке.

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

Скажу так, что SAS 9.4 Был представлен лишь этим летом и практически сразу появилась версия SAS VA 6.2 использующая как раз SAS 9.4 и не прошло и пол года, как появилась версия SAS VA6.3.
Для сравнения могу сказать, что решение SAS Customer Intelligence (SAS Marketing Atumation+SAS Marketing Optimization+ SAS Digital Marketing + SAS RTDM) до сих пор не переведено на SAS 9.4, а ожидать этого мы можем лишь весной 2014 года.

Так вот по себе скажу, что продукт SAS VA достаточно интересный и в английский блогах достаточно много о нем говорят. Чего только стоит использование карт (OpenStreetmap.org) Когда вы отображаете на карте свои показатели.

Хочу еще поделиться интересным новогодним постом по SAS VA, где оптимизируется маршрут Деда Мороза (Санта Клауса):

http://blogs.sas.com/content/sgf/2013/12/19/santas-route-in-sas-visual-analytics/

Описывать подробно то, что появилось в SAS VA 6.3 не буду, так как для полного понимания всех прелестей нужно было поработать с SAS VA 6.2 (или 6.1) и понять как он был ограничен.
Приведу лишь ссылку на официальный сайт SAS касающаяся «Что нового в SAS VA 6.3», которая появилась лишь на этой неделе:

http://support.sas.com/documentation/cdl/en/vaug/66720/HTML/default/viewer.htm#vaugwhatsnew63.htm

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

Книга «Практические уроки по SAS» готова.

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

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

Так, что я не останусь в долгу и дарю всем желающим свою книгу «Практические уроки по SAS»

Для того что бы получить электронный вариант книги напишите мне на почту:
с пометкой «Книга «Практические уроки по SAS».
Всех поздравляю с Наступающим Новым годом!


P.S. 
Если будут желающие получить бумажный вариант книги, то просьба сделать пометку в письме (цена книги будет зависеть от кол-ва желающих, т.к. печатать буду за свой счет). Бумажный вариант будет готов после Нового Года.
С уважением,
Николай.

Проверка на существование макропеременных

Всем привет!

В данной статье я опишу способы проверки существования макропеременных. Случается, что несуществующая макропеременная в функции ломает программу, то есть в логе появляется запись типа ERROR:…


Самый колхозный случай, который обычно применяется в случае дебага, это вывод всех макропеременных в лог (или куда-либо ещё):
%PUT _ALL_;
Так же могут быть варианты типа вывода только локальных (_LOCAL_) или глобальных (_GLOBAL_) макропеременных.
Далее уже идёт обработка этого списка на наличие или отсутствие необходимых значений.
Можно также вывести значение переменной NAME:
%PUT &NAME;

Другой вариант проверки предоставляет сам SAS. Существует функция %SYMEXIST, которая проверяет макропеременную на наличие:
           %SYMEXIST(макропеременная)
Функция возвращает значение 1 (TRUE) или 0 (FALSE).

Пример кода, с официальной страницы прост и понятен:

%global x;
%macro test;
%local y;
%if %symexist(x) %then %put %nrstr(%symexist(x)) = TRUE;
%else %put %nrstr(%symexist(x)) = FALSE;
%if %symexist(y) %then %put %nrstr(%symexist(y)) = TRUE;
%else %put %nrstr(%symexist(y)) = FALSE;
%if %symexist(z) %then %put %nrstr(%symexist(z)) = TRUE;
%else %put %nrstr(%symexist(z)) = FALSE;
%mend test;
%test;

А вот что появится в ЛОГе:

%symexist(x) = TRUE
%symexist(y) = TRUE
%symexist(z) = FALSE

И третий способ заключается в написании своего собственного способа. Здесь вариантов много, всё зависит от задачи.
Данный вариант взят с официального сайта поддержки.

%macro check(mvar);
    %local i tmp;
    %let dsid=%sysfunc(open(sashelp.vmacro));
    %let num=%sysfunc(varnum(&dsid,name));

    %do %until(&ob = -1);
        %let i=%eval(&i+1);
        %let ob=%sysfunc(fetchobs(&dsid,&i));
        %let val=%sysfunc(getvarc(&dsid,&num));

        %if &val = %upcase(&mvar) %then
            %do;
                %let ob = -1;
                %let tmp=yes;
            %end;
        %else
            %do;
                %let tmp=no;
            %end;

        %if &ob=-1 %then
            %do;
                &tmp
            %end;
    %end;
    %let rc=%sysfunc(close(&dsid));
%mend check;

Или вот один из примеров, взятых отсюда:
%macro isBlank(param);
       %sysevalf(%superq(param)=,boolean)
%mend isBlank;
В это плане мне нравится сравнительная статья.

На этом всё!

Обработка ошибок через SAS Macro

Всем привет!
Я прошу прощения, что некоторое время не писал, так как проходил тренинг в Московском Тренинговом Центре. Если у Вас есть вопросы по поводу тренинга, то пишите: я всегда рад поделиться!
В данной статье я опишу достаточно простой способ обработки ошибок в SAS.

Недавно я столкнулся с задачей, где требовалось обрабатывать ошибку связанную с неправильной работой БД Oracle. То есть, например, необходимо было записать что-то, а база недоступна.
Начну по порядку. Ошибки записываются в стандартные автоматические макропеременные:
&SYSERR
&SYSERRORTEXT
&SYSWARNINGTEXT
Для того, чтобы код отработал после ошибки (которая по идее прекращает работу программы) необходимо создать макрос и поместить его в конец программы.
На официальном сайте очень подробно расписано какие значения может принимать макропеременная SYSERR. Данная переменная содержит коды по ТИПАМ ошибок. И используя, например, следующий код можно проверить условие на то, что есть ошибка или нет:
%MACRO ERROR_CHECK1();
     %IF &SYSERR NE 0 %THEN
            %DO;
                %PUT %SYSERR;
                * <В ДАННОЕ МЕСТО МОЖНО ВСТАВИТЬ НЕОБХОДИМЫЙ КОД!> ;
            %END:
%MEND;
%ERROR_CHECK1;
К сожалению, не всегда и не во всех приложениях SAS можно использовать данную переменную. Особенно это заметно, когда «проваливаешься» на стороннюю БД.
В этом случае приходят на помощь SYSERRORTEXT и SYSWARNINGTEXT. На официальном сайте есть несколько примеров по работе с ними. Данные переменные содержат тексты ошибок и предупреждений, даже если &SYSERR = 0. В качестве примера можно использовать следующий код, которые обрабатывает оракловые ошибки:
%MACRO ERROR_CHECK2();
     %IF  %SYSFUNC(FIND(&SYSERRORTEXT, ‘ORACLE EXECUTE ERROR’,1)) %THEN
            %DO;
                %PUT %SYSERRORTEXT;
                * <В ДАННОЕ МЕСТО МОЖНО ВСТАВИТЬ НЕОБХОДИМЫЙ КОД!> ;
            %END:
%MEND;
%ERROR_CHECK2;
Также есть интересные примеры на сайте support.sas.com, связанные с обработкой ошибок. google.com в данном случае поможет =)
В некоторых приложениях SAS существуют дополнительные макропеременные. Например, в SAS Customer Intelligence Studio можно выделить две: MAError и MAMsg. Принцип работы примерно такой-же, как и для стандартных ошибок, описанных выше.
На этом всё!
До скорых встреч!

SAS and libname parameters DBSERVER_MAX_BYTES, DBCLIENT_MAX_BYTES.

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

Сегодня речь пойдет об интересных параметрах библиотеки libname:

DBSERVER_MAX_BYTES,
DBCLIENT_MAX_BYTES

Бывало ли у вас так, что вы регистрируете таблицу в SAS Managment Console, потом смотрите свойства полей таблицы и обнаруживаете, что они не совпадают с оригиналом.

Так вот виной тому как раз те самые настоечные параметры DBSERVER_MAX_BYTES, DBCLIENT_MAX_BYTES.

Обычно они выставлены в значении 1. В таком случае вы ничего не заметите.
Но выставите другое значение и вы увидите к чему это приведет.
Метаданные начнут резко расширяться, причем как в случае с выгрузкой данных в SAS, так и загрузкой обратно в БД, от куда вы их брали.

И так давайте же посмотрим на примере что к чему:

И так если вы досмотрели видео до конца, то вопрос следующий.

Что будет с полем Varhcar2(1100) когда его с коэффициентами:
DBSERVER_MAX_BYTES =4
DBCLIENT_MAX_BYTES =4
пере зальют обратно в Oracle?

64-bit and 32-bit SAS & 64-bit and 32 Oracle client.

Всем доброго времени суток.

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

Так получилось, что для работы с Oracle я предпочитаю использовать PL/SQL Developer. Однако у этого продукта есть своя особенность..

А состоит она в том, что это программа является 32-битной и, видимо, в ближайшее время так оно и останется.

К чему я об этом говорю, а к тому, что  этот самый 32-битный Developer работает лишь с 32-битным клиентом Oracle. Поэтому, зная об этом я себе локально поставил именно 32-битного клиента.

Однако когда подошло время устанавливать SAS, я решил отдать дань моде и поставить 64-битную версию.

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

Как нетрудно догадаться, исходя из лога, подключить библиотеку мне не удалось.

В логе последовательно перечисляются причины возникновения подобной ошибки. И именно вторая является настоящей причиной:  32/64-bit mismatch between Oracle client & SAS.

Решение данной проблемы заключается в установке себе еще и 64 битного клиента Oracle. Либо доставить 32 битный SAS.

Так что будьте внимательны.

P.S.
Да, кстати! Хочу напомнить, что начинаю с версии SAS 9.4 останется только 64-версия.