Искусственный вызов ошибки и вывод русского текста ошибки в SAS Customer Intelligence Studio

Всем привет!
В этой статье будет описан способ выводить сообщение об ошибке со своим русским текстом в SAS Customer Intelligence Studio (SAS CI).

В одной из предыдущих статей было описано, как обрабатывать ошибки в SAS Macro. Также в статье были упомянуты, какие переменные отвечают за  ошибки в SAS
Случается, что необходимо остановить работу программы и сообщить пользователю какое-то сообщение. Когда же речь идёт о SAS Customer IntelligenceStudio, то появляется ряд моментов как правильно это осуществить. 
Чтобы искусственно вызвать ошибку, требуется поменять значение автоматической макропеременной SYSCC на целое значение, которое больше 1.  
Например, присвоим значение 500:
 %let SYSCC = 500;
Создадим PROCESS NODE (узел процесс) в SAS Customer Intelligence Studio и посмотрим что получится:
Таким образом, значение SYSCC отображается в окне ошибки.
Макро переменная MAMsg отвечает за параметр текста ошибки. 
Присвоим следующее значение:
%let MAMsg = HELLO WORLD!;

Теперь видно и текст ошибки. И вроде бы ничего, но выглядит это немного странно – всё на русском, кроме сообщения. 
 
Попробуем присвоить значение переменной русские текст:
%let MAMsg = ПРИВЕТ!;
Попробуем разобраться, почему так происходит. Для этого возьмём функцию KCVT и преобразуем слово ПРИВЕТ в кодировку UTF-8.
Несложными манипуляциями можно выяснить, что слово ПРИВЕТ изначально в кодировке ANSI, но когда передаётся из SAS в Java программы, преобразуется в кодировку UTF8. 
Более того, если немного покопаться в исходниках программы, то можно обнаружить код, который отвечает за вывод этой ошибки. В принципе, можно сделать соответствующую доработку и перекомпилировать исходники, но сложность такой доработки очень высока.
Кстати, текст который стандартно отображается при любой ошибке также «зашит» в Java в качестве UTF кода и представлен в виде кодов букв. 
Например, слово ПРИВЕТ будет отображено в виде:
Но, к сожалению, если этот код подать в качестве ошибки, он так и останется в том же виде:
В итоге, после долгого времени экспериментирования был найден способ вывести русские буквы в тексте ошибки, используя функцию KCVT в макросе:

На этом всё!
Пользуйтесь на здоровье!

Обработка ошибок через 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. Принцип работы примерно такой-же, как и для стандартных ошибок, описанных выше.
На этом всё!
До скорых встреч!