Всем привет!
В данной статье я поделюсь, как создаются web-сервисы на базе архитектуры SAS, и как используются хранимые процессы SAS для работы с web-сервисами.
Как оказалось, ничего сложного в этом нет!
Итак, приступим.
Всем привет!
В данной статье я поделюсь, как создаются web-сервисы на базе архитектуры SAS, и как используются хранимые процессы SAS для работы с web-сервисами.
Как оказалось, ничего сложного в этом нет!
Итак, приступим.
Данная статья посвящена пиратам =)
И моим самым часто используемым макросам!
В данной статье я опишу способы проверки существования макропеременных. Случается, что несуществующая макропеременная в функции ломает программу, то есть в логе появляется запись типа 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;
В это плане мне нравится сравнительная статья.
На этом всё!