<?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 Re: DOSUBL scope of returned macro variables in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/DOSUBL-scope-of-returned-macro-variables/m-p/319148#M70011</link>
    <description>&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/19879"&gt;@Quentin&lt;/a&gt;&amp;nbsp;&amp;nbsp; I&amp;nbsp; am happy to&amp;nbsp; Report&amp;nbsp; that&amp;nbsp; the DOSUBL&amp;nbsp; Macro&amp;nbsp; variable Scope Issue has been fixed in&amp;nbsp; SAS 9.4M4.&amp;nbsp;&amp;nbsp; I&amp;nbsp; have&amp;nbsp; run the&amp;nbsp; below&amp;nbsp; Codes&amp;nbsp; on&amp;nbsp; SAS&amp;nbsp;&amp;nbsp; University&amp;nbsp; Edition&amp;nbsp; with 9.4M4.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;%let a = 1;
%let b = 2;
%let c = 3;

%macro test2;
	%local a b c;
	%let a = 10;
	%let b = 20;
	%let c = 30;
	%put BEFORE DOSUBL: a is &amp;amp;a, b is &amp;amp;b, c is &amp;amp;c;
	%let rc = %sysfunc(dosubl(%str(data _null_;run; )));
	%put AFTER DOSUBL: a is &amp;amp;a, b is &amp;amp;b, c is &amp;amp;c;
%mend test2;

%test2&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Result :&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;DIV class="sasSource"&gt;1 OPTIONS NONOTES NOSTIMER NOSOURCE NOSYNTAXCHECK;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;61&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;62 %let a = 1;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;63 %let b = 2;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;64 %let c = 3;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;65&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;66 %macro test2;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;67 %local a b c;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;68 %let a = 10;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;69 %let b = 20;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;70 %let c = 30;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;71 %put BEFORE DOSUBL: a is &amp;amp;a, b is &amp;amp;b, c is &amp;amp;c;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;72 %let rc = %sysfunc(dosubl(%str(data _null_;run; )));&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;73 %put AFTER DOSUBL: a is &amp;amp;a, b is &amp;amp;b, c is &amp;amp;c;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;74 %mend test2;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;75&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;76 %test2&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;&lt;STRONG&gt; BEFORE DOSUBL: a is 10, b is 20, c is 30&lt;/STRONG&gt;&lt;/DIV&gt;
&lt;DIV id="sasLogNote1_1481770117269" class="sasNote"&gt;NOTE: DATA statement used (Total process time):&lt;/DIV&gt;
&lt;DIV class="sasNote"&gt;real time 0.00 seconds&lt;/DIV&gt;
&lt;DIV class="sasNote"&gt;cpu time 0.01 seconds&lt;/DIV&gt;
&lt;DIV class="sasNote"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class="sasNote"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;&lt;STRONG&gt; AFTER DOSUBL: a is 10, b is 20, c is 30&lt;/STRONG&gt;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;77&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;78 OPTIONS NONOTES NOSTIMER NOSOURCE NOSYNTAXCHECK;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;91&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;%macro testNoDosubl(x=);
  %put x=&amp;amp;x;
%mend testNoDosubl;

%macro testWithDosubl(x=);
  %let rc=%sysfunc(dosubl(%nrstr(%let x=3; )));
  %put x=&amp;amp;x;
%mend testWithDosubl;

%let x=1;
%testNoDosubl(x=2)
%testWithDosubl(x=2)&lt;/CODE&gt;&lt;/PRE&gt;
&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;Result :&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;
&lt;DIV class="sasSource"&gt;1 OPTIONS NONOTES NOSTIMER NOSOURCE NOSYNTAXCHECK;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;61&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;62 %macro testNoDosubl(x=);&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;63 %put x=&amp;amp;x;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;64 %mend testNoDosubl;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;65&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;66 %macro testWithDosubl(x=);&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;67 %let rc=%sysfunc(dosubl(%nrstr(%let x=3; )));&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;68 %put x=&amp;amp;x;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;69 %mend testWithDosubl;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;70&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;71 %let x=1;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;72 %testNoDosubl(x=2)&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;&lt;STRONG&gt; x=2&lt;/STRONG&gt;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;73 %testWithDosubl(x=2)&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;&lt;STRONG&gt; x=3&lt;/STRONG&gt;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;    %macro TestDoSubl(x=);
      %local rc;

      %let rc=%sysfunc(dosubl(%nrstr(
        %let x=dosubl;
        %put in DOSUBL environment;
        %put _user_;
        %put; %put; %put;
      )));

    %put after DOSUBL;
     %put _user_;
     %put; %put; %put;

   %mend TestDoSubl;

   %let x=global;
   
   %TestDoSubl(x=local)&lt;/CODE&gt;&lt;/PRE&gt;
&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;Result :&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;&amp;nbsp;&amp;nbsp;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OPTIONS NONOTES NOSTIMER NOSOURCE NOSYNTAXCHECK;&lt;BR /&gt;&amp;nbsp;61&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;&amp;nbsp;62&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %macro TestDoSubl(x=);&lt;BR /&gt;&amp;nbsp;63&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %local rc;&lt;BR /&gt;&amp;nbsp;64&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;&amp;nbsp;65&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let rc=%sysfunc(dosubl(%nrstr(&lt;BR /&gt;&amp;nbsp;66&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let x=dosubl;&lt;BR /&gt;&amp;nbsp;67&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %put in DOSUBL environment;&lt;BR /&gt;&amp;nbsp;68&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %put _user_;&lt;BR /&gt;&amp;nbsp;69&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %put; %put; %put;&lt;BR /&gt;&amp;nbsp;70&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; )));&lt;BR /&gt;&amp;nbsp;71&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;&amp;nbsp;72&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %put after DOSUBL;&lt;BR /&gt;&amp;nbsp;73&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %put _user_;&lt;BR /&gt;&amp;nbsp;74&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %put; %put; %put;&lt;BR /&gt;&amp;nbsp;75&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;&amp;nbsp;76&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %mend TestDoSubl;&lt;BR /&gt;&amp;nbsp;77&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;&amp;nbsp;78&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let x=global;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;&lt;BR /&gt;&amp;nbsp;in DOSUBL environment&lt;BR /&gt;&lt;STRONG&gt;&amp;nbsp;GLOBAL&amp;nbsp;&amp;nbsp;&amp;nbsp; X&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dosubl&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt;&amp;nbsp;TESTDOSUBL&amp;nbsp;&amp;nbsp; RC &lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt;&amp;nbsp;TESTDOSUBL&amp;nbsp;&amp;nbsp; X&amp;nbsp;&amp;nbsp; local&lt;/STRONG&gt;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;&amp;nbsp;&lt;STRONG&gt;GLOBAL&amp;nbsp; X&amp;nbsp;&amp;nbsp; global&lt;/STRONG&gt;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;&amp;nbsp;after DOSUBL&lt;BR /&gt;&lt;STRONG&gt;&amp;nbsp;TESTDOSUBL&amp;nbsp;&amp;nbsp; RC&amp;nbsp;&amp;nbsp; 0&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt;&amp;nbsp;TESTDOSUBL&amp;nbsp;&amp;nbsp; X&amp;nbsp;&amp;nbsp; dosubl&lt;/STRONG&gt;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;&amp;nbsp;&amp;nbsp;&lt;STRONG&gt;GLOBAL&amp;nbsp; X&amp;nbsp;&amp;nbsp; global&lt;/STRONG&gt;&lt;/DIV&gt;</description>
    <pubDate>Thu, 15 Dec 2016 03:59:04 GMT</pubDate>
    <dc:creator>pchegoor</dc:creator>
    <dc:date>2016-12-15T03:59:04Z</dc:date>
    <item>
      <title>DOSUBL scope of returned macro variables</title>
      <link>https://communities.sas.com/t5/SAS-Programming/DOSUBL-scope-of-returned-macro-variables/m-p/138691#M27993</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi All,&lt;/P&gt;&lt;P&gt;I'm playing around with DOSUBL.&amp;nbsp; Trying to understand how macro variables created (or modified) in the DOSUBL environment are returned to the calling environment. (tested in 9.3M2 and 9.4M0 on Win7 PC SAS).&lt;/P&gt;&lt;P&gt;Hit one oddity that looks like a bug to me.&lt;/P&gt;&lt;P&gt;Conditions:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;In&amp;nbsp; main SAS session, macro variable &amp;amp;x exists in global symbol table and local symbol table, with different values.&lt;/LI&gt;&lt;LI&gt;In dosubl code, value of &amp;amp;x is assigned a new value.&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;Result&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;After dosubl has executed, the value of &amp;amp;x in the local symbol table has been set to the value of &amp;amp;x from the global symbol table.&amp;nbsp; I would expect the value of &amp;amp;x in the local symbol table to be set to the value of &amp;amp;x returned from the DOSUBL environment.&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;Here is sample code and log:&lt;/P&gt;&lt;PRE&gt;1&amp;nbsp;&amp;nbsp;&amp;nbsp; %macro TestDoSubl(x=);
2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %local rc;
3
4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let rc=%sysfunc(dosubl(%nrstr(
5&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let x=dosubl;
6&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %put in DOSUBL environment;
7&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %put _user_;
8&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %put; %put; %put;
9&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; )));
10
11&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %put after DOSUBL;
12&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %put _user_;
13&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %put; %put; %put;
14
15&amp;nbsp;&amp;nbsp; %mend TestDoSubl;
16
17&amp;nbsp;&amp;nbsp; %let x=global;
in DOSUBL environment
GLOBAL X dosubl
GLOBAL RC
TESTDOSUBL X local&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;--- The X in the local symbol table has value local, as expected
TESTDOSUBL RC
GLOBAL X global

18&amp;nbsp;&amp;nbsp; %TestDoSubl(x=local)
after DOSUBL
TESTDOSUBL X global&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;--- After DOSUBL completed, X in the local table has value global.&amp;nbsp; I would expect it to have value dosubl. 
TESTDOSUBL RC 0
GLOBAL X global

19
20&amp;nbsp;&amp;nbsp; %put after macro;
after macro
21&amp;nbsp;&amp;nbsp; %put _user_;
GLOBAL X global
&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Observations:&lt;/P&gt;&lt;P&gt;In the DOSUBL, environment, the local macro variables that exist in main session are imported as global macro variables (fair).&amp;nbsp; Note that the %PUT statement in the DOSUBL environment shows two different global macro variables named X.&amp;nbsp; (This can also be seen when FCMP/run_macro is used to run code on the side).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;After the DOSUBL has completed, I would expect it to return the global macro variable &amp;amp;x=dosubl back to the local symbol table.&amp;nbsp; But it looks to me like DOSUBL gets confused, and instead is returning the other global macro variable &amp;amp;x=global back to the local symbol table.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thoughts whether this is a bug, or if I'm not understanding the expected results?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;So far the only other oddity I noticed is that if in the main environment, &amp;amp;x exists in the global symbol table but not the local symbol table, DOSUBL will update the global macro variable (fair) and also create a local macro variable with the same value (odd, but not much of a concern).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 26 Jan 2015 18:04:12 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/DOSUBL-scope-of-returned-macro-variables/m-p/138691#M27993</guid>
      <dc:creator>Quentin</dc:creator>
      <dc:date>2015-01-26T18:04:12Z</dc:date>
    </item>
    <item>
      <title>Re: DOSUBL scope of returned macro variables</title>
      <link>https://communities.sas.com/t5/SAS-Programming/DOSUBL-scope-of-returned-macro-variables/m-p/138692#M27994</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Ack, seems my idea of using %NRSTR() may be part of the problem?&amp;nbsp; I'm not sure how it effects the timing.&amp;nbsp; I did notice that order of the log looks odd (results of first %put statement before the macro invocation).&amp;nbsp; Will keep playing.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 26 Jan 2015 19:19:43 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/DOSUBL-scope-of-returned-macro-variables/m-p/138692#M27994</guid>
      <dc:creator>Quentin</dc:creator>
      <dc:date>2015-01-26T19:19:43Z</dc:date>
    </item>
    <item>
      <title>Re: DOSUBL scope of returned macro variables</title>
      <link>https://communities.sas.com/t5/SAS-Programming/DOSUBL-scope-of-returned-macro-variables/m-p/138693#M27995</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;The function dosubl is called from within a running macro. In my vision that is a perfect reason to see all new macro vars as defined local.&lt;/P&gt;&lt;P&gt;As you have used x as a amco-function parameter from that point it is local &lt;A href="http://support.sas.com/documentation/cdl/en/mcrolref/68140/HTML/default/viewer.htm#p0lo5it6f5i3adn1uldh8qgd2kjx.htm" title="http://support.sas.com/documentation/cdl/en/mcrolref/68140/HTML/default/viewer.htm#p0lo5it6f5i3adn1uldh8qgd2kjx.htm"&gt;SAS(R) 9.4 Macro Language: Reference, Third Edition&lt;/A&gt; not touching the global one anymore.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 26 Jan 2015 20:24:44 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/DOSUBL-scope-of-returned-macro-variables/m-p/138693#M27995</guid>
      <dc:creator>jakarman</dc:creator>
      <dc:date>2015-01-26T20:24:44Z</dc:date>
    </item>
    <item>
      <title>Re: DOSUBL scope of returned macro variables</title>
      <link>https://communities.sas.com/t5/SAS-Programming/DOSUBL-scope-of-returned-macro-variables/m-p/138694#M27996</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Jaap,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I agree, that new macro vars should be local.&amp;nbsp; And I am happy that the end result here is that the global macro variable X is not touched.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The surprise to me (and suspect bug), is after DOSUBL has completed, instead of it writing the value it computed for X to the local symbol table, somehow the value from the global symbol table is written to the local symbol table.&amp;nbsp; That's the surprise.&amp;nbsp; I will add a comment to the log to in my post to try to make this more clear.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 27 Jan 2015 13:27:35 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/DOSUBL-scope-of-returned-macro-variables/m-p/138694#M27996</guid>
      <dc:creator>Quentin</dc:creator>
      <dc:date>2015-01-27T13:27:35Z</dc:date>
    </item>
    <item>
      <title>Re: DOSUBL scope of returned macro variables</title>
      <link>https://communities.sas.com/t5/SAS-Programming/DOSUBL-scope-of-returned-macro-variables/m-p/138695#M27997</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Quentin you coded the macro var x also at: %macro TestDoSubl(x=);&lt;/P&gt;&lt;P&gt;At that moment it is becoming local defined by x=....&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 27 Jan 2015 17:54:11 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/DOSUBL-scope-of-returned-macro-variables/m-p/138695#M27997</guid>
      <dc:creator>jakarman</dc:creator>
      <dc:date>2015-01-27T17:54:11Z</dc:date>
    </item>
    <item>
      <title>Re: DOSUBL scope of returned macro variables</title>
      <link>https://communities.sas.com/t5/SAS-Programming/DOSUBL-scope-of-returned-macro-variables/m-p/138696#M27998</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Yes, there is a local macro variable x that I passed in as a parameter, and that is the correct behavior.&lt;/P&gt;&lt;P&gt;There is also a global macro variable x that I created with a %LET statement in open code, and that is the correct behavior.&lt;/P&gt;&lt;P&gt;The problem is that the value of the local macro variable x becomes over written by the value of the global macro variable x after the DOSUBL has completed.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 27 Jan 2015 20:49:54 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/DOSUBL-scope-of-returned-macro-variables/m-p/138696#M27998</guid>
      <dc:creator>Quentin</dc:creator>
      <dc:date>2015-01-27T20:49:54Z</dc:date>
    </item>
    <item>
      <title>Re: DOSUBL scope of returned macro variables</title>
      <link>https://communities.sas.com/t5/SAS-Programming/DOSUBL-scope-of-returned-macro-variables/m-p/138697#M27999</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I see the following:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; %let x=global;&amp;nbsp; (x as global defined)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Anything referring to x will use the global definition.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %TestDoSubl(x=);&amp;nbsp;&amp;nbsp;&amp;nbsp; (call/start&amp;nbsp;&amp;nbsp; Will active level1 of macro-processing start dedicated variables scope) &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Anything referring to x will use this local definition.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Macro TestDoSubl will proceed to execute.&lt;/P&gt;&lt;P&gt;&amp;gt;&amp;nbsp; %let x=dosubl;&amp;nbsp; (from macro) will process x as local as the macro TestDoSubl is active (level1)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %TestDoSubl(x=);&amp;nbsp;&amp;nbsp;&amp;nbsp; (call/end&amp;nbsp; Will end level1 of macro processing removing variables belonging to this scope ) &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Only the original global macro-vars still there.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;You can build up a nesting sequence of local-vars (explicitly local defines) or having automatic inheritance of the local to a caller.&lt;/P&gt;&lt;P&gt;It is a nesting scope of varaibles, &lt;A href="http://support.sas.com/documentation/cdl/en/mcrolref/68140/HTML/default/viewer.htm#n0i4icf2nv7wu7n1lm4wf1epykfh.htm" title="http://support.sas.com/documentation/cdl/en/mcrolref/68140/HTML/default/viewer.htm#n0i4icf2nv7wu7n1lm4wf1epykfh.htm"&gt;SAS(R) 9.4 Macro Language: Reference, Third Edition&lt;/A&gt;. &lt;/P&gt;&lt;P&gt;Not being explained well in older doc's or very difficult to get when you are trying to learn by example. Seen more programming languages you could deduce this.&lt;/P&gt;&lt;P&gt;The same variable-name is intended to have different contenst depending on its scope.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 28 Jan 2015 06:28:49 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/DOSUBL-scope-of-returned-macro-variables/m-p/138697#M27999</guid>
      <dc:creator>jakarman</dc:creator>
      <dc:date>2015-01-28T06:28:49Z</dc:date>
    </item>
    <item>
      <title>Re: DOSUBL scope of returned macro variables</title>
      <link>https://communities.sas.com/t5/SAS-Programming/DOSUBL-scope-of-returned-macro-variables/m-p/138698#M28000</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thanks for not giving up on the discussion, Jaap.&amp;nbsp; But I don't think your seeing my point.&lt;/P&gt;&lt;P&gt;Yes, I understand the scoping rules of the macro language, and they are as you described them.&amp;nbsp; Here is a shorter example of some test code to show the surprising result.:&lt;/P&gt;&lt;PRE&gt;%macro testNoDosubl(x=);
&amp;nbsp; %put x=&amp;amp;x;
%mend testNoDosubl;

%macro testWithDosubl(x=);
&amp;nbsp; %let rc=%sysfunc(dosubl(%nrstr(%let x=3;)));
&amp;nbsp; %put x=&amp;amp;x;
%mend testWithDosubl;

%let x=1;
%testNoDosubl(x=2)
%testWithDosubl(x=2)
&lt;/PRE&gt;&lt;P&gt;When %testNoDosubl runs, what is the expected result shown in the log?&amp;nbsp;&amp;nbsp; It is 2.&amp;nbsp; Because the %put statement returns the value of x from the local symbol table, not the global symbol table.&amp;nbsp; That is the usual macro scoping rule. No surprise. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;When %testWithDoSubl runs, what is the expected result?&amp;nbsp; I'm not sure.&amp;nbsp; But I would hope 3 (if the %let statement in the DoSubl block updated the local symbol table) or 2 (if it did not).&amp;nbsp; But in fact it returns 1.&amp;nbsp;&amp;nbsp; What can explain why %testWithDoSubl returns 1? &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;My explanation would be that DoSubl is returning the wrong value to the local symbol table.&amp;nbsp; If you add %put _global_; to the DoSubl block after the %let statement, it will show that in the 'side-session' where DoSubl runs, it can see two global macro variables named x.&amp;nbsp; It sees the global macro variable x in the main session (with value 1), and the global macro variable x in the side-session (with value 3).&amp;nbsp; I think DoSubl is intended to return the value from the side-session to the local symbol, but accidentally returns the value from the main session to the local symbol table.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Do you see another explanation for why %testWithDoSubl returns 1?&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 28 Jan 2015 11:00:55 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/DOSUBL-scope-of-returned-macro-variables/m-p/138698#M28000</guid>
      <dc:creator>Quentin</dc:creator>
      <dc:date>2015-01-28T11:00:55Z</dc:date>
    </item>
    <item>
      <title>Re: DOSUBL scope of returned macro variables</title>
      <link>https://communities.sas.com/t5/SAS-Programming/DOSUBL-scope-of-returned-macro-variables/m-p/138699#M28001</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I see your issue now, it is not very clear to see.&amp;nbsp; There are some new options that are very helpful with debugging.&lt;/P&gt;&lt;P&gt;During the scope of the macro the local var x get the value of the global version. That must be a bug. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; 42&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;&lt;/P&gt;&lt;P class="sasSource"&gt; 43&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; options mprint mprintnest mlogic mlogicnest symbolgen;&lt;/P&gt;&lt;P class="sasSource"&gt; 44&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P class="sasSource"&gt; 45&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %macro testNoDosubl(x=);&lt;/P&gt;&lt;P class="sasSource"&gt; 46&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %put x=&amp;amp;x %symlocal(x);&lt;/P&gt;&lt;P class="sasSource"&gt; 47&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %mend testNoDosubl;&lt;/P&gt;&lt;P class="sasSource"&gt; 48&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P class="sasSource"&gt; 49&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %macro testWithDosubl(x=);&lt;/P&gt;&lt;P class="sasSource"&gt; 50&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %local rc;&lt;/P&gt;&lt;P class="sasSource"&gt; 51&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %put x=&amp;amp;x %symlocal(x);&lt;/P&gt;&lt;P class="sasSource"&gt; 52&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let rc=%sysfunc(dosubl(%nrstr(%let x=3;)));&lt;/P&gt;&lt;P class="sasSource"&gt; 53&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %put x=&amp;amp;x %symlocal(x);&lt;/P&gt;&lt;P class="sasSource"&gt; 54&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %put _user_;&lt;/P&gt;&lt;P class="sasSource"&gt; 55&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %mend testWithDosubl;&lt;/P&gt;&lt;P class="sasSource"&gt; 56&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P class="sasSource"&gt; 57&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %macro testNESTsubl(x=);&lt;/P&gt;&lt;P class="sasSource"&gt; 58&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %local rc;&lt;/P&gt;&lt;P class="sasSource"&gt; 59&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %put x=&amp;amp;x %symlocal(x);&lt;/P&gt;&lt;P class="sasSource"&gt; 60&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let rc=%sysfunc(dosubl(%nrstr(%testWithDosubl(x=5)&lt;/P&gt;&lt;P class="sasSource"&gt; 61&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; )));&lt;/P&gt;&lt;P class="sasSource"&gt; 62&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %put x=&amp;amp;x %symlocal(x);&lt;/P&gt;&lt;P class="sasSource"&gt; 63&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %put _user_;&lt;/P&gt;&lt;P class="sasSource"&gt; 64&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %mend testNESTsubl;&lt;/P&gt;&lt;P class="sasSource"&gt; 65&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P class="sasSource"&gt; 66&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P class="sasSource"&gt; 67&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let x=1;&lt;/P&gt;&lt;P class="sasSource"&gt; 68&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %put x=&amp;amp;x %symlocal(x);&lt;/P&gt;&lt;P class="sasSource"&gt; SYMBOLGEN:&amp;nbsp; Macro variable X resolves to 1&lt;/P&gt;&lt;P class="sasSource"&gt; x=1 0&lt;/P&gt;&lt;P class="sasSource"&gt; 69&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %put _user_;&lt;/P&gt;&lt;P class="sasSource"&gt; GLOBAL GRAPHINIT&amp;nbsp; &lt;/P&gt;&lt;P class="sasSource"&gt; GLOBAL GRAPHTERM&amp;nbsp; &lt;/P&gt;&lt;P class="sasSource"&gt; GLOBAL X 1&lt;/P&gt;&lt;P class="sasSource"&gt; GLOBAL _CLIENTAPP SAS Studio&lt;/P&gt;&lt;P class="sasSource"&gt; GLOBAL _CLIENTAPPVERSION 3.1&lt;/P&gt;&lt;P class="sasSource"&gt; GLOBAL _SASPROGRAMFILE&amp;nbsp;&amp;nbsp; folders myshortcuts ikke macroscope_001.sas &lt;/P&gt;&lt;P class="sasSource"&gt; GLOBAL _SASWSTEMP_&amp;nbsp;&amp;nbsp; folders myfolders .images f9d75edd 6a9c 4b8e b177 abbba13bbe38 &lt;/P&gt;&lt;P class="sasSource"&gt; GLOBAL _SASWS_&amp;nbsp;&amp;nbsp; folders myfolders &lt;/P&gt;&lt;P class="sasSource"&gt; 70&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %testNESTsubl(x=4)&lt;/P&gt;&lt;P class="sasSource"&gt; MLOGIC(TESTNESTSUBL):&amp;nbsp; Beginning execution.&lt;/P&gt;&lt;P class="sasSource"&gt; MLOGIC(TESTNESTSUBL):&amp;nbsp; Parameter X has value 4&lt;/P&gt;&lt;P class="sasSource"&gt; MLOGIC(TESTNESTSUBL):&amp;nbsp; %LOCAL&amp;nbsp; RC&lt;/P&gt;&lt;P class="sasSource"&gt; MLOGIC(TESTNESTSUBL):&amp;nbsp; %PUT x=&amp;amp;x %symlocal(x)&lt;/P&gt;&lt;P class="sasSource"&gt; SYMBOLGEN:&amp;nbsp; Macro variable X resolves to 4&lt;/P&gt;&lt;P class="sasSource"&gt; x=4 1&lt;/P&gt;&lt;P class="sasSource"&gt; MLOGIC(TESTWITHDOSUBL):&amp;nbsp; Beginning execution.&lt;/P&gt;&lt;P class="sasSource"&gt; MLOGIC(TESTWITHDOSUBL):&amp;nbsp; Parameter X has value 5&lt;/P&gt;&lt;P class="sasSource"&gt; MLOGIC(TESTWITHDOSUBL):&amp;nbsp; %LOCAL&amp;nbsp; RC&lt;/P&gt;&lt;P class="sasSource"&gt; MLOGIC(TESTWITHDOSUBL):&amp;nbsp; %PUT x=&amp;amp;x %symlocal(x)&lt;/P&gt;&lt;P class="sasSource"&gt; SYMBOLGEN:&amp;nbsp; Macro variable X resolves to 5&lt;/P&gt;&lt;P class="sasSource"&gt; x=5 1&lt;/P&gt;&lt;P class="sasSource"&gt; MLOGIC(TESTWITHDOSUBL):&amp;nbsp; %LET (variable name is RC)&lt;/P&gt;&lt;P class="sasSource"&gt; MLOGIC(TESTWITHDOSUBL):&amp;nbsp; %PUT x=&amp;amp;x %symlocal(x)&lt;/P&gt;&lt;P class="sasSource"&gt; SYMBOLGEN:&amp;nbsp; Macro variable X resolves to 1&lt;/P&gt;&lt;P class="sasSource"&gt; x=1 1&lt;/P&gt;&lt;P class="sasSource"&gt; MLOGIC(TESTWITHDOSUBL):&amp;nbsp; %PUT _user_&lt;/P&gt;&lt;P class="sasSource"&gt; TESTWITHDOSUBL GRAPHINIT&amp;nbsp; &lt;/P&gt;&lt;P class="sasSource"&gt; TESTWITHDOSUBL GRAPHTERM&amp;nbsp; &lt;/P&gt;&lt;P class="sasSource"&gt; TESTWITHDOSUBL RC 0&lt;/P&gt;&lt;P class="sasSource"&gt; TESTWITHDOSUBL X 1&lt;/P&gt;&lt;P class="sasSource"&gt; TESTWITHDOSUBL _CLIENTAPP SAS Studio&lt;/P&gt;&lt;P class="sasSource"&gt; TESTWITHDOSUBL _CLIENTAPPVERSION 3.1&lt;/P&gt;&lt;P class="sasSource"&gt; TESTWITHDOSUBL _SASPROGRAMFILE&amp;nbsp;&amp;nbsp; folders myshortcuts ikke macroscope_001.sas &lt;/P&gt;&lt;P class="sasSource"&gt; TESTWITHDOSUBL _SASWSTEMP_&amp;nbsp;&amp;nbsp; folders myfolders .images f9d75edd 6a9c 4b8e b177 abbba13bbe38 &lt;/P&gt;&lt;P class="sasSource"&gt; TESTWITHDOSUBL _SASWS_&amp;nbsp;&amp;nbsp; folders myfolders &lt;/P&gt;&lt;P class="sasSource"&gt; GLOBAL RC &lt;/P&gt;&lt;P class="sasSource"&gt; GLOBAL X 4&lt;/P&gt;&lt;P class="sasSource"&gt; TESTNESTSUBL RC &lt;/P&gt;&lt;P class="sasSource"&gt; TESTNESTSUBL X 4&lt;/P&gt;&lt;P class="sasSource"&gt; GLOBAL GRAPHINIT&amp;nbsp; &lt;/P&gt;&lt;P class="sasSource"&gt; GLOBAL GRAPHTERM&amp;nbsp; &lt;/P&gt;&lt;P class="sasSource"&gt; GLOBAL X 1&lt;/P&gt;&lt;P class="sasSource"&gt; GLOBAL _CLIENTAPP SAS Studio&lt;/P&gt;&lt;P class="sasSource"&gt; GLOBAL _CLIENTAPPVERSION 3.1&lt;/P&gt;&lt;P class="sasSource"&gt; GLOBAL _SASPROGRAMFILE&amp;nbsp;&amp;nbsp; folders myshortcuts ikke macroscope_001.sas &lt;/P&gt;&lt;P class="sasSource"&gt; GLOBAL _SASWSTEMP_&amp;nbsp;&amp;nbsp; folders myfolders .images f9d75edd 6a9c 4b8e b177 abbba13bbe38 &lt;/P&gt;&lt;P class="sasSource"&gt; GLOBAL _SASWS_&amp;nbsp;&amp;nbsp; folders myfolders &lt;/P&gt;&lt;P class="sasSource"&gt; MLOGIC(TESTWITHDOSUBL):&amp;nbsp; Ending execution.&lt;/P&gt;&lt;P class="sasSource"&gt; MLOGIC(TESTNESTSUBL):&amp;nbsp; %LET (variable name is RC)&lt;/P&gt;&lt;P class="sasSource"&gt; MLOGIC(TESTNESTSUBL):&amp;nbsp; %PUT x=&amp;amp;x %symlocal(x)&lt;/P&gt;&lt;P class="sasSource"&gt; SYMBOLGEN:&amp;nbsp; Macro variable X resolves to 1&lt;/P&gt;&lt;P class="sasSource"&gt; x=1 1&lt;/P&gt;&lt;P class="sasSource"&gt; MLOGIC(TESTNESTSUBL):&amp;nbsp; %PUT _user_&lt;/P&gt;&lt;P class="sasSource"&gt; TESTNESTSUBL RC 0&lt;/P&gt;&lt;P class="sasSource"&gt; TESTNESTSUBL X 1&lt;/P&gt;&lt;P class="sasSource"&gt; GLOBAL GRAPHINIT&amp;nbsp; &lt;/P&gt;&lt;P class="sasSource"&gt; GLOBAL GRAPHTERM&amp;nbsp; &lt;/P&gt;&lt;P class="sasSource"&gt; GLOBAL X 1&lt;/P&gt;&lt;P class="sasSource"&gt; GLOBAL _CLIENTAPP SAS Studio&lt;/P&gt;&lt;P class="sasSource"&gt; GLOBAL _CLIENTAPPVERSION 3.1&lt;/P&gt;&lt;P class="sasSource"&gt; GLOBAL _SASPROGRAMFILE&amp;nbsp;&amp;nbsp; folders myshortcuts ikke macroscope_001.sas &lt;/P&gt;&lt;P class="sasSource"&gt; GLOBAL _SASWSTEMP_&amp;nbsp;&amp;nbsp; folders myfolders .images f9d75edd 6a9c 4b8e b177 abbba13bbe38 &lt;/P&gt;&lt;P class="sasSource"&gt; GLOBAL _SASWS_&amp;nbsp;&amp;nbsp; folders myfolders &lt;/P&gt;&lt;P class="sasSource"&gt; MLOGIC(TESTNESTSUBL):&amp;nbsp; Ending execution.&lt;/P&gt;&lt;P class="sasSource"&gt; 71&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P class="sasSource"&gt; 72&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %put x=&amp;amp;x %symlocal(x);&lt;/P&gt;&lt;P class="sasSource"&gt; SYMBOLGEN:&amp;nbsp; Macro variable X resolves to 1&lt;/P&gt;&lt;P class="sasSource"&gt; x=1 0&lt;/P&gt;&lt;P class="sasSource"&gt; 73&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %put _user_;&lt;/P&gt;&lt;P class="sasSource"&gt; GLOBAL GRAPHINIT&amp;nbsp; &lt;/P&gt;&lt;P class="sasSource"&gt; GLOBAL GRAPHTERM&amp;nbsp; &lt;/P&gt;&lt;P class="sasSource"&gt; GLOBAL X 1&lt;/P&gt;&lt;P class="sasSource"&gt; GLOBAL _CLIENTAPP SAS Studio&lt;/P&gt;&lt;P class="sasSource"&gt; GLOBAL _CLIENTAPPVERSION 3.1&lt;/P&gt;&lt;P class="sasSource"&gt; GLOBAL _SASPROGRAMFILE&amp;nbsp;&amp;nbsp; folders myshortcuts ikke macroscope_001.sas &lt;/P&gt;&lt;P class="sasSource"&gt; GLOBAL _SASWSTEMP_&amp;nbsp;&amp;nbsp; folders myfolders .images f9d75edd 6a9c 4b8e b177 abbba13bbe38 &lt;/P&gt;&lt;P class="sasSource"&gt; GLOBAL _SASWS_&amp;nbsp;&amp;nbsp; folders myfolders &lt;/P&gt;&lt;P class="sasSource"&gt; 74&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P class="sasSource"&gt; 75&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt; &lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 28 Jan 2015 22:05:46 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/DOSUBL-scope-of-returned-macro-variables/m-p/138699#M28001</guid>
      <dc:creator>jakarman</dc:creator>
      <dc:date>2015-01-28T22:05:46Z</dc:date>
    </item>
    <item>
      <title>Re: DOSUBL scope of returned macro variables</title>
      <link>https://communities.sas.com/t5/SAS-Programming/DOSUBL-scope-of-returned-macro-variables/m-p/138700#M28002</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thanks again Jaap.&amp;nbsp; Glad you agree.&amp;nbsp; I think I'll try posting this to SAS-L as well, to see if I can prompt more discussion there.&amp;nbsp; Then will send it in to tech support and/or Rick Langston directly (pretty sure DOSUBL is his creation).&amp;nbsp; I really like his last example of using DOSUBL for function-style macros (&lt;A href="https://support.sas.com/resources/papers/proceedings13/032-2013.pdf"&gt;https://support.sas.com/resources/papers/proceedings13/032-2013.pdf&lt;/A&gt;), so feel like it's worth time to test out some of the magic involved in moving things back and forth between the main session and the side-session.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 29 Jan 2015 15:09:51 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/DOSUBL-scope-of-returned-macro-variables/m-p/138700#M28002</guid>
      <dc:creator>Quentin</dc:creator>
      <dc:date>2015-01-29T15:09:51Z</dc:date>
    </item>
    <item>
      <title>Re: DOSUBL scope of returned macro variables</title>
      <link>https://communities.sas.com/t5/SAS-Programming/DOSUBL-scope-of-returned-macro-variables/m-p/227390#M40968</link>
      <description>Has this Issue been fixed ? Does anyone know?</description>
      <pubDate>Sat, 26 Sep 2015 13:16:20 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/DOSUBL-scope-of-returned-macro-variables/m-p/227390#M40968</guid>
      <dc:creator>pchegoor</dc:creator>
      <dc:date>2015-09-26T13:16:20Z</dc:date>
    </item>
    <item>
      <title>Re: DOSUBL scope of returned macro variables</title>
      <link>https://communities.sas.com/t5/SAS-Programming/DOSUBL-scope-of-returned-macro-variables/m-p/227405#M40973</link>
      <description>&lt;P&gt;I'm not sure. &amp;nbsp;After posting this I followed up with Rick Langston, and he agreed it was a bug and said he was working on a hot-fix. &amp;nbsp;I'm not sure if it was going to be an official hot-fix or if it would perhaps be slipped into a maintenance release.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Perhaps folks who have a fully hot-fixed version of &amp;nbsp;9.4M3 could try the example I posted and let us know?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I just ran it in AWS SAS Studio (9.04.01M3P06242015), and got the same scope collision I reported above. &amp;nbsp;I'm not sure how hot-fixed the AWS version is.&lt;/P&gt;</description>
      <pubDate>Sat, 26 Sep 2015 20:39:40 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/DOSUBL-scope-of-returned-macro-variables/m-p/227405#M40973</guid>
      <dc:creator>Quentin</dc:creator>
      <dc:date>2015-09-26T20:39:40Z</dc:date>
    </item>
    <item>
      <title>Re: DOSUBL scope of returned macro variables</title>
      <link>https://communities.sas.com/t5/SAS-Programming/DOSUBL-scope-of-returned-macro-variables/m-p/227546#M41011</link>
      <description>&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/19879"&gt;@Quentin﻿&lt;/a&gt;&amp;nbsp; &amp;nbsp;I contacted SAS Support on the Status of this Issue &amp;nbsp;and they responded saying this is a difficult issue to fix via a HOTFIX in SAS 9.4M3 &amp;nbsp;and therefore will be planned for a &amp;nbsp;future release of SAS. No timetable has been set for this however.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Also i have heard from one of my Colleauges at Work &amp;nbsp;that SAS may be coming out with Release 10 next year instead of 9.4M4 &amp;nbsp;or 9.5. Not sure how much of this is True.Need to wait and See.&lt;/P&gt;</description>
      <pubDate>Mon, 28 Sep 2015 18:17:37 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/DOSUBL-scope-of-returned-macro-variables/m-p/227546#M41011</guid>
      <dc:creator>pchegoor</dc:creator>
      <dc:date>2015-09-28T18:17:37Z</dc:date>
    </item>
    <item>
      <title>Re: DOSUBL scope of returned macro variables</title>
      <link>https://communities.sas.com/t5/SAS-Programming/DOSUBL-scope-of-returned-macro-variables/m-p/227689#M41041</link>
      <description>&lt;P&gt;Thanks &lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/14002"&gt;@pchegoor﻿&lt;/a&gt;&amp;nbsp;sorry to hear there is no timetable, but good to know it's still on their list of things to work on.&amp;nbsp; I think there be magic in this "side-session" processing, but until I have a better understanding of how the main environment and side environment communicate with each and inherit from each other, I don't acticipate using it for production code.&amp;nbsp; But certainly the promise/potential of DOSUBL is very exciting.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Good to hear the rumor about SAS 10.&amp;nbsp; Hope for 10 will be more motivation to hit Vegas for SGF2016.&lt;/P&gt;</description>
      <pubDate>Tue, 29 Sep 2015 15:29:10 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/DOSUBL-scope-of-returned-macro-variables/m-p/227689#M41041</guid>
      <dc:creator>Quentin</dc:creator>
      <dc:date>2015-09-29T15:29:10Z</dc:date>
    </item>
    <item>
      <title>Re: DOSUBL scope of returned macro variables</title>
      <link>https://communities.sas.com/t5/SAS-Programming/DOSUBL-scope-of-returned-macro-variables/m-p/319148#M70011</link>
      <description>&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/19879"&gt;@Quentin&lt;/a&gt;&amp;nbsp;&amp;nbsp; I&amp;nbsp; am happy to&amp;nbsp; Report&amp;nbsp; that&amp;nbsp; the DOSUBL&amp;nbsp; Macro&amp;nbsp; variable Scope Issue has been fixed in&amp;nbsp; SAS 9.4M4.&amp;nbsp;&amp;nbsp; I&amp;nbsp; have&amp;nbsp; run the&amp;nbsp; below&amp;nbsp; Codes&amp;nbsp; on&amp;nbsp; SAS&amp;nbsp;&amp;nbsp; University&amp;nbsp; Edition&amp;nbsp; with 9.4M4.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;%let a = 1;
%let b = 2;
%let c = 3;

%macro test2;
	%local a b c;
	%let a = 10;
	%let b = 20;
	%let c = 30;
	%put BEFORE DOSUBL: a is &amp;amp;a, b is &amp;amp;b, c is &amp;amp;c;
	%let rc = %sysfunc(dosubl(%str(data _null_;run; )));
	%put AFTER DOSUBL: a is &amp;amp;a, b is &amp;amp;b, c is &amp;amp;c;
%mend test2;

%test2&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Result :&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;DIV class="sasSource"&gt;1 OPTIONS NONOTES NOSTIMER NOSOURCE NOSYNTAXCHECK;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;61&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;62 %let a = 1;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;63 %let b = 2;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;64 %let c = 3;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;65&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;66 %macro test2;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;67 %local a b c;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;68 %let a = 10;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;69 %let b = 20;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;70 %let c = 30;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;71 %put BEFORE DOSUBL: a is &amp;amp;a, b is &amp;amp;b, c is &amp;amp;c;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;72 %let rc = %sysfunc(dosubl(%str(data _null_;run; )));&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;73 %put AFTER DOSUBL: a is &amp;amp;a, b is &amp;amp;b, c is &amp;amp;c;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;74 %mend test2;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;75&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;76 %test2&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;&lt;STRONG&gt; BEFORE DOSUBL: a is 10, b is 20, c is 30&lt;/STRONG&gt;&lt;/DIV&gt;
&lt;DIV id="sasLogNote1_1481770117269" class="sasNote"&gt;NOTE: DATA statement used (Total process time):&lt;/DIV&gt;
&lt;DIV class="sasNote"&gt;real time 0.00 seconds&lt;/DIV&gt;
&lt;DIV class="sasNote"&gt;cpu time 0.01 seconds&lt;/DIV&gt;
&lt;DIV class="sasNote"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class="sasNote"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;&lt;STRONG&gt; AFTER DOSUBL: a is 10, b is 20, c is 30&lt;/STRONG&gt;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;77&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;78 OPTIONS NONOTES NOSTIMER NOSOURCE NOSYNTAXCHECK;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;91&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;%macro testNoDosubl(x=);
  %put x=&amp;amp;x;
%mend testNoDosubl;

%macro testWithDosubl(x=);
  %let rc=%sysfunc(dosubl(%nrstr(%let x=3; )));
  %put x=&amp;amp;x;
%mend testWithDosubl;

%let x=1;
%testNoDosubl(x=2)
%testWithDosubl(x=2)&lt;/CODE&gt;&lt;/PRE&gt;
&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;Result :&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;
&lt;DIV class="sasSource"&gt;1 OPTIONS NONOTES NOSTIMER NOSOURCE NOSYNTAXCHECK;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;61&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;62 %macro testNoDosubl(x=);&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;63 %put x=&amp;amp;x;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;64 %mend testNoDosubl;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;65&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;66 %macro testWithDosubl(x=);&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;67 %let rc=%sysfunc(dosubl(%nrstr(%let x=3; )));&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;68 %put x=&amp;amp;x;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;69 %mend testWithDosubl;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;70&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;71 %let x=1;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;72 %testNoDosubl(x=2)&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;&lt;STRONG&gt; x=2&lt;/STRONG&gt;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;73 %testWithDosubl(x=2)&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;&lt;STRONG&gt; x=3&lt;/STRONG&gt;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;    %macro TestDoSubl(x=);
      %local rc;

      %let rc=%sysfunc(dosubl(%nrstr(
        %let x=dosubl;
        %put in DOSUBL environment;
        %put _user_;
        %put; %put; %put;
      )));

    %put after DOSUBL;
     %put _user_;
     %put; %put; %put;

   %mend TestDoSubl;

   %let x=global;
   
   %TestDoSubl(x=local)&lt;/CODE&gt;&lt;/PRE&gt;
&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;Result :&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;&amp;nbsp;&amp;nbsp;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OPTIONS NONOTES NOSTIMER NOSOURCE NOSYNTAXCHECK;&lt;BR /&gt;&amp;nbsp;61&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;&amp;nbsp;62&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %macro TestDoSubl(x=);&lt;BR /&gt;&amp;nbsp;63&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %local rc;&lt;BR /&gt;&amp;nbsp;64&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;&amp;nbsp;65&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let rc=%sysfunc(dosubl(%nrstr(&lt;BR /&gt;&amp;nbsp;66&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let x=dosubl;&lt;BR /&gt;&amp;nbsp;67&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %put in DOSUBL environment;&lt;BR /&gt;&amp;nbsp;68&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %put _user_;&lt;BR /&gt;&amp;nbsp;69&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %put; %put; %put;&lt;BR /&gt;&amp;nbsp;70&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; )));&lt;BR /&gt;&amp;nbsp;71&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;&amp;nbsp;72&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %put after DOSUBL;&lt;BR /&gt;&amp;nbsp;73&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %put _user_;&lt;BR /&gt;&amp;nbsp;74&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %put; %put; %put;&lt;BR /&gt;&amp;nbsp;75&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;&amp;nbsp;76&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %mend TestDoSubl;&lt;BR /&gt;&amp;nbsp;77&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;&amp;nbsp;78&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let x=global;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;&lt;BR /&gt;&amp;nbsp;in DOSUBL environment&lt;BR /&gt;&lt;STRONG&gt;&amp;nbsp;GLOBAL&amp;nbsp;&amp;nbsp;&amp;nbsp; X&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dosubl&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt;&amp;nbsp;TESTDOSUBL&amp;nbsp;&amp;nbsp; RC &lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt;&amp;nbsp;TESTDOSUBL&amp;nbsp;&amp;nbsp; X&amp;nbsp;&amp;nbsp; local&lt;/STRONG&gt;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;&amp;nbsp;&lt;STRONG&gt;GLOBAL&amp;nbsp; X&amp;nbsp;&amp;nbsp; global&lt;/STRONG&gt;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;&amp;nbsp;after DOSUBL&lt;BR /&gt;&lt;STRONG&gt;&amp;nbsp;TESTDOSUBL&amp;nbsp;&amp;nbsp; RC&amp;nbsp;&amp;nbsp; 0&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt;&amp;nbsp;TESTDOSUBL&amp;nbsp;&amp;nbsp; X&amp;nbsp;&amp;nbsp; dosubl&lt;/STRONG&gt;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;&amp;nbsp;&amp;nbsp;&lt;STRONG&gt;GLOBAL&amp;nbsp; X&amp;nbsp;&amp;nbsp; global&lt;/STRONG&gt;&lt;/DIV&gt;</description>
      <pubDate>Thu, 15 Dec 2016 03:59:04 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/DOSUBL-scope-of-returned-macro-variables/m-p/319148#M70011</guid>
      <dc:creator>pchegoor</dc:creator>
      <dc:date>2016-12-15T03:59:04Z</dc:date>
    </item>
    <item>
      <title>Re: DOSUBL scope of returned macro variables</title>
      <link>https://communities.sas.com/t5/SAS-Programming/DOSUBL-scope-of-returned-macro-variables/m-p/319268#M70064</link>
      <description>&lt;P&gt;Thanks &lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/14002"&gt;@pchegoor&lt;/a&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;That is very exciting news.&amp;nbsp; Maybe enough for me to renew my personal AWS subscription so I can play with this a bit in university edition (probably still a couple months away from having 9.4M4 at work).&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The management of the DOSUBL side-sesssion environment / inheritance&amp;nbsp;(not only macro variable scope, but system option scope, etc... ) must be very complex.&amp;nbsp; I'm glad they have fixed this macro variable collision.&amp;nbsp; Hope to be playing with it soon.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;There's such amazing potential in DOSUBL, I'm glad they're putting in the development effort for fixes.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 15 Dec 2016 14:49:12 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/DOSUBL-scope-of-returned-macro-variables/m-p/319268#M70064</guid>
      <dc:creator>Quentin</dc:creator>
      <dc:date>2016-12-15T14:49:12Z</dc:date>
    </item>
    <item>
      <title>Re: DOSUBL scope of returned macro variables</title>
      <link>https://communities.sas.com/t5/SAS-Programming/DOSUBL-scope-of-returned-macro-variables/m-p/319295#M70082</link>
      <description>&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/19879"&gt;@Quentin&lt;/a&gt;&amp;nbsp; &amp;nbsp;On a slightly &amp;nbsp;different &amp;nbsp;Topic. &amp;nbsp;I wonder why you need AWS &amp;nbsp;for SAS University Edition. &amp;nbsp;You can &amp;nbsp;directly &amp;nbsp;download &amp;nbsp;it &amp;nbsp;on your Machine instead of &amp;nbsp; using it via &amp;nbsp;the cloud on &amp;nbsp;AWS &amp;nbsp;and save money &amp;nbsp;on the subscription. &amp;nbsp; Also &amp;nbsp;if &amp;nbsp;you &amp;nbsp;prefer &amp;nbsp;a Cloud based &amp;nbsp;version of &amp;nbsp;Free SAS &amp;nbsp;Software &amp;nbsp; then &amp;nbsp;you do have the &lt;A href="http://www.sas.com/en_us/industry/higher-education/on-demand-for-academics.html" target="_self"&gt;SAS On Demand for Academics&lt;/A&gt;&amp;nbsp; . This one &amp;nbsp;has SAS/GRAPH included too plus &amp;nbsp;additional &amp;nbsp;SAS products. &amp;nbsp;The &amp;nbsp;Comparision &amp;nbsp;of &amp;nbsp;SAS On Demand for Academics and &lt;A href="http://www.sas.com/en_us/software/university-edition.html" target="_self"&gt;SAS &amp;nbsp;University Edition&lt;/A&gt; &amp;nbsp;is &amp;nbsp;given &lt;A href="http://www.sas.com/content/dam/SAS/en_us/doc/other1/sas-software-for-learning-107362.pdf" target="_self"&gt;here&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;Right now &amp;nbsp;SAS On Demand for Academics this is still at 9.4M3 &amp;nbsp;but &amp;nbsp;i &amp;nbsp;am hoping &amp;nbsp;by the &amp;nbsp;end &amp;nbsp;of Jan 2017 &amp;nbsp;or so &amp;nbsp;it &amp;nbsp;may be also be updated to 9.4M4 . &amp;nbsp;May &amp;nbsp;be&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/35"&gt;@AmyP_sas&lt;/a&gt;&amp;nbsp; &amp;nbsp;can &amp;nbsp;comment &amp;nbsp;on when &amp;nbsp;this &amp;nbsp;may &amp;nbsp;occur.&lt;/P&gt;</description>
      <pubDate>Thu, 15 Dec 2016 15:46:19 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/DOSUBL-scope-of-returned-macro-variables/m-p/319295#M70082</guid>
      <dc:creator>pchegoor</dc:creator>
      <dc:date>2016-12-15T15:46:19Z</dc:date>
    </item>
    <item>
      <title>Re: DOSUBL scope of returned macro variables</title>
      <link>https://communities.sas.com/t5/SAS-Programming/DOSUBL-scope-of-returned-macro-variables/m-p/319628#M70257</link>
      <description>&lt;P&gt;I'm having a problem which I think MAY be related to this bug but I'm not sure because I'm venturing into new SAS coding territory!&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I'm using a combination of PROC STREAM, a macro template to spit out XML, and &amp;nbsp;inside the template calling a macro that has a logic to set a global variable which will get used after the dosubl call.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;/** Something similar to this **/

proc stream outfile=REQUEST
begin%due_date_template(...)
;;;;
run;

.
.
.

/** sub section of the due_date_template macro **/
%do i=1 %to &amp;amp;numAlerts;
.
.
%let rc= %sysfunc(dosubl('due_date_macro(var1,var2,var3...)'));
.
.
.
/** inside the due_date_macro, there is logic to set a global variable called 
    due_date
**/
%put due_date = &amp;amp;due_date;
%end;

/**
  1st time through the due_date gets set properly
  the remaining times in the iteration the due_date remains the initial value set
  by the dosubl call even though a new due_date is being calculated.
**/&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;Is this part of the bug in M3? I've tried everything to get that &amp;amp;due_date macro to update after the dosubl call but it always remains the first value set!&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;-Matt&lt;/P&gt;</description>
      <pubDate>Fri, 16 Dec 2016 19:44:37 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/DOSUBL-scope-of-returned-macro-variables/m-p/319628#M70257</guid>
      <dc:creator>fury88</dc:creator>
      <dc:date>2016-12-16T19:44:37Z</dc:date>
    </item>
    <item>
      <title>Re: DOSUBL scope of returned macro variables</title>
      <link>https://communities.sas.com/t5/SAS-Programming/DOSUBL-scope-of-returned-macro-variables/m-p/319691#M70280</link>
      <description>&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/119973"&gt;@fury88&lt;/a&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Yes &amp;nbsp;it looks like &amp;nbsp;it is due to the DOSUBL &amp;nbsp;bug &amp;nbsp;in 9.4M3 .&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I ran &amp;nbsp;the below &amp;nbsp;code &amp;nbsp;both &amp;nbsp; on 9.4M3 &amp;nbsp;and 9.4M4 :&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;%macro due_date_macro(flag);
 
%Put  &amp;amp;=flag;
 
%Let due_date=&amp;amp;flag;
 
%Put  INNER : &amp;amp;=due_date;
 
%mend  due_date_macro;
 
 
%Let  Due_Date=;
%Let Var1=20120304;
%Let Var2=20120805;
%Let Var3=20150709;
 
 
%Macro  Test;
 
%do i=1 %to &amp;amp;numAlerts;
 
%let rc= %sysfunc(dosubl('%due_date_macro(&amp;amp;&amp;amp;Var&amp;amp;i)'));
 
%put OUTER : &amp;amp;=due_date;
%put **************************;
%end;
 
%Mend  Test;
 
 
%Let NumAlerts=3;
%Test;
 &lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;U&gt;&lt;STRONG&gt;Result from SAS 9.4M3:&lt;/STRONG&gt;&lt;/U&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;DIV class="sasSource"&gt;1 OPTIONS NONOTES NOSTIMER NOSOURCE NOSYNTAXCHECK;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;55&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;56 %macro due_date_macro(flag);&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;57&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;58 %Put &amp;amp;=flag;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;59&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;60 %Let due_date=&amp;amp;flag;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;61&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;62 %Put INNER : &amp;amp;=due_date;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;63&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;64 %mend due_date_macro;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;65&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;66&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;67 %Let Due_Date=;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;68 %Let Var1=20120304;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;69 %Let Var2=20120805;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;70 %Let Var3=20150709;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;71&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;72&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;73 %Macro Test;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;74&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;75 %do i=1 %to &amp;amp;numAlerts;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;76&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;77 %let rc= %sysfunc(dosubl('%due_date_macro(&amp;amp;&amp;amp;Var&amp;amp;i)'));&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;78&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;79 %put OUTER : &amp;amp;=due_date;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;80 %put **************************;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;81 %end;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;82&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;83 %Mend Test;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;84&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;85&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;86 %Let NumAlerts=3;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;FLAG=20120304&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;INNER : DUE_DATE=20120304&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;87 %Test;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;OUTER : DUE_DATE=&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;**************************&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;FLAG=20120805&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;INNER : DUE_DATE=20120805&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;OUTER : DUE_DATE=&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;**************************&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;FLAG=20150709&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;INNER : DUE_DATE=20150709&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;OUTER : DUE_DATE=&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;**************************&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;
&lt;P&gt;&lt;U&gt;&lt;STRONG&gt;Result &amp;nbsp;from &amp;nbsp; SAS 9.4M4 :&lt;/STRONG&gt;&lt;/U&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;62 %macro due_date_macro(flag);&lt;BR /&gt; 63 &lt;BR /&gt; 64 %Put &amp;amp;=flag;&lt;BR /&gt; 65 &lt;BR /&gt; 66 %Let due_date=&amp;amp;flag;&lt;BR /&gt; 67 &lt;BR /&gt; 68 %Put INNER : &amp;amp;=due_date;&lt;BR /&gt; 69 &lt;BR /&gt; 70 %mend due_date_macro;&lt;BR /&gt; 71 &lt;BR /&gt; 72 &lt;BR /&gt; 73 %Let Due_Date=;&lt;BR /&gt; 74 %Let Var1=20120304;&lt;BR /&gt; 75 %Let Var2=20120805;&lt;BR /&gt; 76 %Let Var3=20150709;&lt;BR /&gt; 77 &lt;BR /&gt; 78 &lt;BR /&gt; 79 %Macro Test;&lt;BR /&gt; 80 &lt;BR /&gt; 81 %do i=1 %to &amp;amp;numAlerts;&lt;BR /&gt; 82 &lt;BR /&gt; 83 %let rc= %sysfunc(dosubl('%due_date_macro(&amp;amp;&amp;amp;Var&amp;amp;i)'));&lt;BR /&gt; 84 &lt;BR /&gt; 85 %put OUTER : &amp;amp;=due_date;&lt;BR /&gt; 86 %put **************************;&lt;BR /&gt; 87 %end;&lt;BR /&gt; 88 &lt;BR /&gt; 89 %Mend Test;&lt;BR /&gt; 90 &lt;BR /&gt; 91 &lt;BR /&gt; 92 %Let NumAlerts=3;&lt;BR /&gt; FLAG=20120304&lt;BR /&gt; INNER : DUE_DATE=20120304&lt;BR /&gt; 93 %Test;&lt;BR /&gt; OUTER : DUE_DATE=20120304&lt;BR /&gt; **************************&lt;BR /&gt; FLAG=20120805&lt;BR /&gt; INNER : DUE_DATE=20120805&lt;BR /&gt; OUTER : DUE_DATE=20120805&lt;BR /&gt; **************************&lt;BR /&gt; FLAG=20150709&lt;BR /&gt; INNER : DUE_DATE=20150709&lt;BR /&gt; OUTER : DUE_DATE=20150709&lt;BR /&gt; **************************&lt;/P&gt;
&lt;/DIV&gt;</description>
      <pubDate>Sat, 17 Dec 2016 01:08:04 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/DOSUBL-scope-of-returned-macro-variables/m-p/319691#M70280</guid>
      <dc:creator>pchegoor</dc:creator>
      <dc:date>2016-12-17T01:08:04Z</dc:date>
    </item>
  </channel>
</rss>

