In this thread: https://communities.sas.com/t5/SAS-Programming/Macro-quoting-for-a-url/m-p/643575 I was asking about constructing a url to be fed to a macro that uses PROC HTTP to get a response from an API, and then uses several data steps to process that response. Only, the total process consisted of over 16 thousand API calls (i.e., the macro was called 16,000+ times). One thing I am failing to understand is this. I had hoped, in the interest of clean, error free code, to test the result of the API call, and if it was successful, then to proceed to the data steps: DATA _NULL_;
SET VOLUMES.ROOT;
CALL SYMPUT('GetOutcome',status);
RUN;
%IF &GetOutcome EQ success %THEN %DO; However, what I find is that &GetOutcome is not being reprocessed each time the macro is being called: DATA _NULL_;
SET MonitorsAndDates;
URL=CATS("'https://api.....com/api/monitor?auth=",SYMGET('Auth'),%NRSTR('&id='),Monitor,%NRSTR('&start='),PUT(StartDate,E8601DA10.),%NRSTR('&end='),PUT(EndDate,E8601DA10.),"'");
CALL EXECUTE('%GetVolume(MonitorLabel='||MonitorLabel||',N='||_N_||',URL='||URL||');');
RUN; Instead, the very first time I run the code, I get the error that GetOutcome has not yet been assigned. Thereafter, it is 'success' (sans quotes) for each and every call, regardless of what the result actually was. So this help file page: https://support.sas.com/documentation/cdl/en/mcrolref/61885/HTML/default/viewer.htm#a000210266.htm indicates that CALL SYMPUT "resolves variables at program execution instead of macro execution" so that is to be expected (I get that now). For the same reason, the url (which I was previously constructing in the macro, and not in the Data _Null_ step for CALL EXECUTE) was also not changing from iteration to iteration. The same help file states that: "SYMPUT assigns values produced in a DATA step to macro variables during program execution, but the SYMGET function returns values of macro variables to the program during program execution." My question, though, is how do I test the result of my API call, and then run all the following steps, if I cannot use CALL SYMPUT? Perhaps I need someone to explain the intricacies of how SAS macros are compiled and what changes when the are called from CALL EXECUTE? Thanks
... View more