<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Cant get return value from user defined functions in SAS in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Cant-get-return-value-from-user-defined-functions-in-SAS/m-p/285824#M311531</link>
    <description>&lt;P&gt;I have a function which calls a SAS macro that is responsible for making a call to an API and get your answer. This function is called from a step data, passing a parameter.&lt;/P&gt;&lt;P&gt;The whole process works properly, except I can not get the response value in datastep.&lt;/P&gt;&lt;P&gt;If I run the macro separately, I can write to the log the API response, so I understand should be able to return to my datastep.&lt;/P&gt;&lt;P&gt;Any ideas?&lt;/P&gt;&lt;P&gt;Here is the code:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Macro&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;%macro acortador();
%put &amp;amp;url_larga;

data _null_;
 length url $ 2048;
 url = catt(
 'http:XXXXXX',urlencode(trimn(&amp;amp;url_larga)));  
 call symputx('REQUEST_URL', url);
 run;

 %put &amp;amp;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                       
            @"&amp;lt;status&amp;gt;" shorturl $255. @@;
        shorturl = substr(shorturl,1,index(shorturl,'&amp;lt;/')-1);   
        call symputx('r', shorturl);
run;

 %put &amp;amp;r;

%mend acortador;&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Function&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;&lt;STRONG&gt;proc fcmp outlib=work.funcs.test;
function acortador(url_larga $) $ 300;
 rc = run_macro('acortador', url_larga, r);
  return (r);
endsub;
quit;&lt;/STRONG&gt;&lt;/PRE&gt;&lt;P&gt;&lt;STRONG&gt;Datastep&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;options cmplib=work.funcs;

data test;  
    set work.origin_table;
    r = acortador(some_parameter);  
run;&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Wed, 20 Jul 2016 14:26:38 GMT</pubDate>
    <dc:creator>bigandrew</dc:creator>
    <dc:date>2016-07-20T14:26:38Z</dc:date>
    <item>
      <title>Cant get return value from user defined functions in SAS</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Cant-get-return-value-from-user-defined-functions-in-SAS/m-p/285824#M311531</link>
      <description>&lt;P&gt;I have a function which calls a SAS macro that is responsible for making a call to an API and get your answer. This function is called from a step data, passing a parameter.&lt;/P&gt;&lt;P&gt;The whole process works properly, except I can not get the response value in datastep.&lt;/P&gt;&lt;P&gt;If I run the macro separately, I can write to the log the API response, so I understand should be able to return to my datastep.&lt;/P&gt;&lt;P&gt;Any ideas?&lt;/P&gt;&lt;P&gt;Here is the code:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Macro&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;%macro acortador();
%put &amp;amp;url_larga;

data _null_;
 length url $ 2048;
 url = catt(
 'http:XXXXXX',urlencode(trimn(&amp;amp;url_larga)));  
 call symputx('REQUEST_URL', url);
 run;

 %put &amp;amp;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                       
            @"&amp;lt;status&amp;gt;" shorturl $255. @@;
        shorturl = substr(shorturl,1,index(shorturl,'&amp;lt;/')-1);   
        call symputx('r', shorturl);
run;

 %put &amp;amp;r;

%mend acortador;&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Function&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;&lt;STRONG&gt;proc fcmp outlib=work.funcs.test;
function acortador(url_larga $) $ 300;
 rc = run_macro('acortador', url_larga, r);
  return (r);
endsub;
quit;&lt;/STRONG&gt;&lt;/PRE&gt;&lt;P&gt;&lt;STRONG&gt;Datastep&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;options cmplib=work.funcs;

data test;  
    set work.origin_table;
    r = acortador(some_parameter);  
run;&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 20 Jul 2016 14:26:38 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Cant-get-return-value-from-user-defined-functions-in-SAS/m-p/285824#M311531</guid>
      <dc:creator>bigandrew</dc:creator>
      <dc:date>2016-07-20T14:26:38Z</dc:date>
    </item>
    <item>
      <title>Re: Cant get return value from user defined functions in SAS</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Cant-get-return-value-from-user-defined-functions-in-SAS/m-p/286025#M311532</link>
      <description>&lt;P&gt;It sounds like you need CALL EXECUTE() :&lt;/P&gt;
&lt;P&gt;and Need change your macro .&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;%macro acortador();
%put &amp;amp;url_larga;

data _null_;
 length url $ 2048;
 url = catt(
 'http:XXXXXX',urlencode(trimn(&amp;amp;url_larga)));  
 call symputx('REQUEST_URL', url);
 run;

 %put &amp;amp;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                       
            @"&amp;lt;status&amp;gt;" shorturl $255. @@;
        shorturl = substr(shorturl,1,index(shorturl,'&amp;lt;/')-1);   
        call symputx('r', shorturl);
run;

 %put &amp;amp;r;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;data temp;&lt;BR /&gt; length r $ 2000;&lt;BR /&gt; r="&amp;amp;r";&lt;BR /&gt;run;&lt;BR /&gt;proc append base=temp_want data=temp force;&lt;BR /&gt;run;&lt;BR /&gt;&lt;BR /&gt;

%mend acortador;&lt;/PRE&gt;
&lt;PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;data test;&lt;BR /&gt; set work.origin_table; &lt;BR /&gt; call execute('%acortador(some_parameter)'); &lt;BR /&gt;run;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;data want;&lt;BR /&gt; merge work.origin_table temp_want;&lt;BR /&gt;run;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 21 Jul 2016 02:43:32 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Cant-get-return-value-from-user-defined-functions-in-SAS/m-p/286025#M311532</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2016-07-21T02:43:32Z</dc:date>
    </item>
    <item>
      <title>Re: Cant get return value from user defined functions in SAS</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Cant-get-return-value-from-user-defined-functions-in-SAS/m-p/286047#M311533</link>
      <description>thanks for your answer, it works correctly!</description>
      <pubDate>Thu, 21 Jul 2016 07:17:01 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Cant-get-return-value-from-user-defined-functions-in-SAS/m-p/286047#M311533</guid>
      <dc:creator>bigandrew</dc:creator>
      <dc:date>2016-07-21T07:17:01Z</dc:date>
    </item>
  </channel>
</rss>

