У меня есть функция, которая вызывает макрос SAS, который отвечает за вызов API и получает ваш ответ. Эта функция вызывается из данных шага, передавая параметр.Не могу получить возвращаемое значение из пользовательских функций в SAS
Весь процесс работает правильно, за исключением того, что я не могу получить значение ответа в datastep.
Если я запускаю макрос отдельно, я могу записать в журнал ответ API, поэтому я понимаю, что он сможет вернуться к моему файлу datastep.
Любые идеи?
Вот код
Макро
%macro acortador();
%put &url_larga;
data _null_;
length url $ 2048;
url = catt(
'http:XXXXXX',urlencode(trimn(&url_larga)));
call symputx('REQUEST_URL', url);
run;
%put &REQUEST_URL;
/* API request */
filename out "XXXXXXXX.xml";
proc http
out=out
url= "%superq(REQUEST_URL)"
method="get";
run;
/* response xml */
filename data 'XXXXXXX.xml';
data _null_;
infile data lrecl = 32000 truncover scanover;
input
@"<status>" shorturl $255. @@;
shorturl = substr(shorturl,1,index(shorturl,'</')-1);
call symputx('r', shorturl);
run;
%put &r;
%mend acortador;
Функция
proc fcmp outlib=work.funcs.test;
function acortador(url_larga $) $ 300;
rc = run_macro('acortador', url_larga, r);
return (r);
endsub;
quit;
options cmplib=work.funcs;
Datastep
data test;
set work.origin_table;
r = acortador(some_parameter);
run;
Что такое 'run_macro'? Это еще одна функция? –
Вам нужно было вызвать макрос. [Support.sas] (http://support.sas.com/documentation/cdl/en/proc/65145/HTML/default/viewer.htm#n19ylmyrvhp7y6n1889zmwsv9nuh.htm) – Bigandrew
Спасибо, я еще не видел эту функцию вызова , –