<?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: run a program multiple times for a list of inputs in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/run-a-program-multiple-times-for-a-list-of-inputs/m-p/162661#M31534</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi DN,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;As per call execute documentation&lt;/P&gt;&lt;TABLE cellpadding="0" cellspacing="0" width="100%"&gt;&lt;TBODY&gt;&lt;TR valign="bottom"&gt;&lt;TD&gt;&lt;BR /&gt;&lt;HR /&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR valign="top"&gt;&lt;TD class="title2"&gt;&lt;A name="a000127811"&gt;Details&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;A name="a000849885"&gt;&lt;/A&gt;If &lt;SPAN class="emph"&gt;argument&lt;/SPAN&gt; resolves to a &lt;BR /&gt;macro invocation, the macro executes immediately and DATA step execution pauses &lt;BR /&gt;while the macro executes. If &lt;SPAN class="emph"&gt;argument&lt;/SPAN&gt; resolves to a SAS &lt;BR /&gt;statement or if execution of the macro generates SAS statements, the &lt;BR /&gt;statement(s) execute after the end of the DATA step that contains the CALL &lt;BR /&gt;EXECUTE routine. CALL EXECUTE is fully documented in &lt;SPAN class="strong"&gt;SAS &lt;BR /&gt;Macro Language: Reference&lt;/SPAN&gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;My understanding (I had to do some research when you corrected me a few days back) was that the macro with sas code will be compiled (even without %NRSTR) but will actually have a delayed execution as if you had done successive macro calls immediately after the run statement because sas code was found in the macro. As with the following example:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;394&amp;nbsp; data h1;&lt;BR /&gt;395&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; x=23;&lt;BR /&gt;396&amp;nbsp; run;&lt;/P&gt;&lt;P&gt;NOTE: The data set WORK.H1 has 1 observations and 1 variables.&lt;BR /&gt;NOTE: DATA statement used (Total process time):&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; real time&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.31 seconds&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cpu time&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.00 seconds&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;397&lt;BR /&gt;398&amp;nbsp; data h2;&lt;BR /&gt;399&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; x=11;&lt;BR /&gt;400&amp;nbsp; run;&lt;/P&gt;&lt;P&gt;NOTE: The data set WORK.H2 has 1 observations and 1 variables.&lt;BR /&gt;NOTE: DATA statement used (Total process time):&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; real time&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.00 seconds&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cpu time&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.03 seconds&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;401&lt;BR /&gt;402&amp;nbsp; data have;&lt;BR /&gt;403&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; id=1; output;&lt;BR /&gt;404&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; id=2; output;&lt;BR /&gt;405&amp;nbsp; run;&lt;/P&gt;&lt;P&gt;NOTE: The data set WORK.HAVE has 2 observations and 1 variables.&lt;BR /&gt;NOTE: DATA statement used (Total process time):&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; real time&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.02 seconds&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cpu time&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.01 seconds&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;406&lt;BR /&gt;407&amp;nbsp; %macro ex(id=);&lt;BR /&gt;408&lt;BR /&gt;409&amp;nbsp; data _null_;&lt;BR /&gt;410&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set h&amp;amp;id.;&lt;BR /&gt;411&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; put x=;&lt;BR /&gt;412&amp;nbsp; run;&lt;BR /&gt;413&amp;nbsp; %mend;&lt;BR /&gt;414&lt;BR /&gt;415&amp;nbsp; data _null_;&lt;BR /&gt;416&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set have;&lt;BR /&gt;417&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; call execute('%ex(id='||id||')');&lt;BR /&gt;418&amp;nbsp; run;&lt;/P&gt;&lt;P&gt;NOTE: Numeric values have been converted to character values at the places given by: (Line):(Column).&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 417:29&lt;BR /&gt;SYMBOLGEN:&amp;nbsp; Macro variable ID resolves to 1&lt;BR /&gt;SYMBOLGEN:&amp;nbsp; Macro variable ID resolves to 2&lt;BR /&gt;NOTE: There were 2 observations read from the data set WORK.HAVE.&lt;BR /&gt;NOTE: DATA statement used (Total process time):&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; real time&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.32 seconds&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cpu time&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.00 seconds&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;NOTE: CALL EXECUTE generated line.&lt;BR /&gt;1&amp;nbsp;&amp;nbsp; + data _null_;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set h1;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; put x=; run;&lt;/P&gt;&lt;P&gt;x=23&lt;BR /&gt;NOTE: There were 1 observations read from the data set WORK.H1.&lt;BR /&gt;NOTE: DATA statement used (Total process time):&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; real time&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.01 seconds&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cpu time&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.01 seconds&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;2&amp;nbsp;&amp;nbsp; + data _null_;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set h2;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; put x=; run;&lt;/P&gt;&lt;P&gt;x=11&lt;BR /&gt;NOTE: There were 1 observations read from the data set WORK.H2.&lt;BR /&gt;NOTE: DATA statement used (Total process time):&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; real time&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.00 seconds&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cpu time&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.00 seconds&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;So I believe it is only necessary to wrap with %nrstr if the variables coming from the data step contain either &amp;amp; or % etc which would resolve inappropriately for whatever reason.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Hopefully I didn't miss your point&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Tue, 03 Dec 2013 18:02:36 GMT</pubDate>
    <dc:creator>Vince28_Statcan</dc:creator>
    <dc:date>2013-12-03T18:02:36Z</dc:date>
    <item>
      <title>run a program multiple times for a list of inputs</title>
      <link>https://communities.sas.com/t5/SAS-Programming/run-a-program-multiple-times-for-a-list-of-inputs/m-p/162656#M31529</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;&lt;BR /&gt;I have a sas program that runs based on a macro variable - a customer number that is manually input.&amp;nbsp; I would like to have it so that the program will read from a file with a list of customer numbers, and run the whole program for each customer number one at a time until it reaches the end of the list.&amp;nbsp; Can someone point me in the direction of how I would set this up?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks!&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 03 Dec 2013 15:58:14 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/run-a-program-multiple-times-for-a-list-of-inputs/m-p/162656#M31529</guid>
      <dc:creator>Kelli</dc:creator>
      <dc:date>2013-12-03T15:58:14Z</dc:date>
    </item>
    <item>
      <title>Re: run a program multiple times for a list of inputs</title>
      <link>https://communities.sas.com/t5/SAS-Programming/run-a-program-multiple-times-for-a-list-of-inputs/m-p/162657#M31530</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;So you want your existing macro executed on every single customer found in a dataset?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;%macro yourmacro(client=)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*already coded macro*/&lt;/P&gt;&lt;P&gt;%yourmacro;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data _null_;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set have;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; call execute('%yourmacro(client='||clientvarname||')');&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The same can be done with an infile statement. This will effectively execute the macro that you've defined before as %yourmacro(client=ABC); If you needed the client named within quotes for your macro, you can wrap clientvarname in quotes.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;There are probably a handful of other ways and some might be preferable to your desired logic. If your macro creates macro variables through a data step or proc, those macro variables won't be available until after the data _null_; is executed as call execute only executes macro functions immediately and rather create a stack of macros to execute when %yourmacro is not a macro function.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 03 Dec 2013 16:10:07 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/run-a-program-multiple-times-for-a-list-of-inputs/m-p/162657#M31530</guid>
      <dc:creator>Vince28_Statcan</dc:creator>
      <dc:date>2013-12-03T16:10:07Z</dc:date>
    </item>
    <item>
      <title>Re: run a program multiple times for a list of inputs</title>
      <link>https://communities.sas.com/t5/SAS-Programming/run-a-program-multiple-times-for-a-list-of-inputs/m-p/162658#M31531</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Whatever answers you get, you should reconsider whether what you are asking is the right thing to do.&amp;nbsp; For example, a typical macro call would take steps like:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;1. Extract data for that customer&lt;/P&gt;&lt;P&gt;2. Process data for that customer&lt;/P&gt;&lt;P&gt;3. Print a report for that customer&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The most time is probably spent on step 1, extracting data for a single customer from a data set that contains all customers.&amp;nbsp; If you succeed at what you are asking, you will be repeating step 1 for every customer on your list.&amp;nbsp; A much faster approach might be:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;A. Extract data for all customers on the list&lt;/P&gt;&lt;P&gt;B. From that extract, process steps 1-3 above for each customer&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Only you know the actual process that goes on, and whether speed is important.&amp;nbsp; From this type of scenario, we get the description of macro language:&amp;nbsp; "easy to use, easy to abuse".&amp;nbsp; Just something to think about now, during the planning phase.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 03 Dec 2013 16:33:20 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/run-a-program-multiple-times-for-a-list-of-inputs/m-p/162658#M31531</guid>
      <dc:creator>Astounding</dc:creator>
      <dc:date>2013-12-03T16:33:20Z</dc:date>
    </item>
    <item>
      <title>Re: run a program multiple times for a list of inputs</title>
      <link>https://communities.sas.com/t5/SAS-Programming/run-a-program-multiple-times-for-a-list-of-inputs/m-p/162659#M31532</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Kelly&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Have a look at this blog entry &lt;A href="http://blogs.sas.com/content/sasdummy/2012/03/20/sas-program-by-processing/" title="http://blogs.sas.com/content/sasdummy/2012/03/20/sas-program-by-processing/"&gt; Implement BY processing for your entire SAS program - The SAS Dummy&lt;/A&gt; by &lt;A _jive_internal="true" href="https://communities.sas.com/people/Chris@SAS" title="https://communities.sas.com/people/Chris%40SAS"&gt;https://communities.sas.com/people/Chris%40SAS&lt;/A&gt; it provides excellent explanation on how to approach this.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Bruno&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 03 Dec 2013 16:44:25 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/run-a-program-multiple-times-for-a-list-of-inputs/m-p/162659#M31532</guid>
      <dc:creator>BrunoMueller</dc:creator>
      <dc:date>2013-12-03T16:44:25Z</dc:date>
    </item>
    <item>
      <title>Re: run a program multiple times for a list of inputs</title>
      <link>https://communities.sas.com/t5/SAS-Programming/run-a-program-multiple-times-for-a-list-of-inputs/m-p/162660#M31533</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;PRE __jive_macro_name="quote" class="jive_text_macro jive_macro_quote"&gt;
&lt;P&gt;Vince28@Statcan wrote:&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;So you want your existing macro executed on every single customer found in a dataset?&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;%macro yourmacro(client=)&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*already coded macro*/&lt;/P&gt;
&lt;P&gt;%yourmacro;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;data _null_;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set have;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; call execute('%yourmacro(client='||clientvarname||')');&lt;/P&gt;
&lt;P&gt;run;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;The same can be done with an infile statement. This will effectively execute the macro that you've defined before as %yourmacro(client=ABC); If you needed the client named within quotes for your macro, you can wrap clientvarname in quotes.&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;There are probably a handful of other ways and some might be preferable to your desired logic. If your macro creates macro variables through a data step or proc, those macro variables won't be available until after the data _null_; is executed as call execute only executes macro functions immediately and rather create a stack of macros to execute when %yourmacro is not a macro function.&lt;/P&gt;
&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;If &lt;A __default_attr="825051" __jive_macro_name="user" class="jive_macro jive_macro_user" data-objecttype="3" href="https://communities.sas.com/"&gt;&lt;/A&gt; decides to use CALL EXECUTE I believe that %NRSTR will be needed to achieve the desired result.&lt;/P&gt;&lt;P&gt; call execute('&lt;STRONG&gt;%nrstr(&lt;/STRONG&gt;%yourmacro(client='||clientvarname||')&lt;STRONG&gt;)&lt;/STRONG&gt;');&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Anytime a macro is call executed that includes data and proc steps the desired result cannot&lt;EM&gt; usually&lt;/EM&gt; be obtain without delaying execution of the macro until &lt;EM&gt;after&lt;/EM&gt; the data step doing the call executing completes.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 03 Dec 2013 17:02:37 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/run-a-program-multiple-times-for-a-list-of-inputs/m-p/162660#M31533</guid>
      <dc:creator>data_null__</dc:creator>
      <dc:date>2013-12-03T17:02:37Z</dc:date>
    </item>
    <item>
      <title>Re: run a program multiple times for a list of inputs</title>
      <link>https://communities.sas.com/t5/SAS-Programming/run-a-program-multiple-times-for-a-list-of-inputs/m-p/162661#M31534</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi DN,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;As per call execute documentation&lt;/P&gt;&lt;TABLE cellpadding="0" cellspacing="0" width="100%"&gt;&lt;TBODY&gt;&lt;TR valign="bottom"&gt;&lt;TD&gt;&lt;BR /&gt;&lt;HR /&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR valign="top"&gt;&lt;TD class="title2"&gt;&lt;A name="a000127811"&gt;Details&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;A name="a000849885"&gt;&lt;/A&gt;If &lt;SPAN class="emph"&gt;argument&lt;/SPAN&gt; resolves to a &lt;BR /&gt;macro invocation, the macro executes immediately and DATA step execution pauses &lt;BR /&gt;while the macro executes. If &lt;SPAN class="emph"&gt;argument&lt;/SPAN&gt; resolves to a SAS &lt;BR /&gt;statement or if execution of the macro generates SAS statements, the &lt;BR /&gt;statement(s) execute after the end of the DATA step that contains the CALL &lt;BR /&gt;EXECUTE routine. CALL EXECUTE is fully documented in &lt;SPAN class="strong"&gt;SAS &lt;BR /&gt;Macro Language: Reference&lt;/SPAN&gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;My understanding (I had to do some research when you corrected me a few days back) was that the macro with sas code will be compiled (even without %NRSTR) but will actually have a delayed execution as if you had done successive macro calls immediately after the run statement because sas code was found in the macro. As with the following example:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;394&amp;nbsp; data h1;&lt;BR /&gt;395&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; x=23;&lt;BR /&gt;396&amp;nbsp; run;&lt;/P&gt;&lt;P&gt;NOTE: The data set WORK.H1 has 1 observations and 1 variables.&lt;BR /&gt;NOTE: DATA statement used (Total process time):&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; real time&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.31 seconds&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cpu time&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.00 seconds&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;397&lt;BR /&gt;398&amp;nbsp; data h2;&lt;BR /&gt;399&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; x=11;&lt;BR /&gt;400&amp;nbsp; run;&lt;/P&gt;&lt;P&gt;NOTE: The data set WORK.H2 has 1 observations and 1 variables.&lt;BR /&gt;NOTE: DATA statement used (Total process time):&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; real time&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.00 seconds&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cpu time&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.03 seconds&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;401&lt;BR /&gt;402&amp;nbsp; data have;&lt;BR /&gt;403&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; id=1; output;&lt;BR /&gt;404&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; id=2; output;&lt;BR /&gt;405&amp;nbsp; run;&lt;/P&gt;&lt;P&gt;NOTE: The data set WORK.HAVE has 2 observations and 1 variables.&lt;BR /&gt;NOTE: DATA statement used (Total process time):&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; real time&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.02 seconds&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cpu time&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.01 seconds&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;406&lt;BR /&gt;407&amp;nbsp; %macro ex(id=);&lt;BR /&gt;408&lt;BR /&gt;409&amp;nbsp; data _null_;&lt;BR /&gt;410&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set h&amp;amp;id.;&lt;BR /&gt;411&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; put x=;&lt;BR /&gt;412&amp;nbsp; run;&lt;BR /&gt;413&amp;nbsp; %mend;&lt;BR /&gt;414&lt;BR /&gt;415&amp;nbsp; data _null_;&lt;BR /&gt;416&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set have;&lt;BR /&gt;417&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; call execute('%ex(id='||id||')');&lt;BR /&gt;418&amp;nbsp; run;&lt;/P&gt;&lt;P&gt;NOTE: Numeric values have been converted to character values at the places given by: (Line):(Column).&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 417:29&lt;BR /&gt;SYMBOLGEN:&amp;nbsp; Macro variable ID resolves to 1&lt;BR /&gt;SYMBOLGEN:&amp;nbsp; Macro variable ID resolves to 2&lt;BR /&gt;NOTE: There were 2 observations read from the data set WORK.HAVE.&lt;BR /&gt;NOTE: DATA statement used (Total process time):&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; real time&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.32 seconds&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cpu time&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.00 seconds&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;NOTE: CALL EXECUTE generated line.&lt;BR /&gt;1&amp;nbsp;&amp;nbsp; + data _null_;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set h1;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; put x=; run;&lt;/P&gt;&lt;P&gt;x=23&lt;BR /&gt;NOTE: There were 1 observations read from the data set WORK.H1.&lt;BR /&gt;NOTE: DATA statement used (Total process time):&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; real time&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.01 seconds&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cpu time&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.01 seconds&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;2&amp;nbsp;&amp;nbsp; + data _null_;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set h2;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; put x=; run;&lt;/P&gt;&lt;P&gt;x=11&lt;BR /&gt;NOTE: There were 1 observations read from the data set WORK.H2.&lt;BR /&gt;NOTE: DATA statement used (Total process time):&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; real time&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.00 seconds&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cpu time&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.00 seconds&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;So I believe it is only necessary to wrap with %nrstr if the variables coming from the data step contain either &amp;amp; or % etc which would resolve inappropriately for whatever reason.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Hopefully I didn't miss your point&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 03 Dec 2013 18:02:36 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/run-a-program-multiple-times-for-a-list-of-inputs/m-p/162661#M31534</guid>
      <dc:creator>Vince28_Statcan</dc:creator>
      <dc:date>2013-12-03T18:02:36Z</dc:date>
    </item>
    <item>
      <title>Re: run a program multiple times for a list of inputs</title>
      <link>https://communities.sas.com/t5/SAS-Programming/run-a-program-multiple-times-for-a-list-of-inputs/m-p/162662#M31535</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;My point is that 99.9% of the time for a macro that "emits" regular SAS code data steps and procs you&lt;STRONG&gt; don't&lt;/STRONG&gt; want it to execute immediately as is usual when called with CALL EXECUTE. It might work OK as in your example or not. If we make a slightly more complex, yet completely contrived, example based loosely on your example you will see why we almost always want %NRSTR.&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;If you run the following with %NRSTR it works otherwise no.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;DIV style="font-family: Courier New; font-size: 11pt;"&gt;&lt;STRONG style="color: #000080; background-color: #ffffff;"&gt;data&lt;/STRONG&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; h1; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;x&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;=&lt;/SPAN&gt;&lt;STRONG style="color: #008080; background-color: #ffffff;"&gt;23&lt;/STRONG&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;; &lt;/SPAN&gt;&lt;STRONG style="color: #000080; background-color: #ffffff;"&gt;run&lt;/STRONG&gt;; &lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;STRONG style="color: #000080; background-color: #ffffff;"&gt;data&lt;/STRONG&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; h2; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;x&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;=&lt;/SPAN&gt;&lt;STRONG style="color: #008080; background-color: #ffffff;"&gt;11&lt;/STRONG&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;; &lt;/SPAN&gt;&lt;STRONG style="color: #000080; background-color: #ffffff;"&gt;run&lt;/STRONG&gt;; &lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;STRONG style="color: #000080; background-color: #ffffff;"&gt;data&lt;/STRONG&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; have;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;do&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; id=&lt;/SPAN&gt;&lt;STRONG style="color: #008080; background-color: #ffffff;"&gt;1&lt;/STRONG&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;,&lt;/SPAN&gt;&lt;STRONG style="color: #008080; background-color: #ffffff;"&gt;2&lt;/STRONG&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;output&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;end&lt;/SPAN&gt;; &lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;STRONG style="color: #000080; background-color: #ffffff;"&gt;run&lt;/STRONG&gt;; &lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;STRONG style="color: #000080; background-color: #ffffff;"&gt;%macro&lt;/STRONG&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; ex(id=)&lt;/SPAN&gt;; &lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; data _null_;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set h&amp;amp;&lt;/SPAN&gt;&lt;SPAN style="color: #008080; background-color: #ffffff;"&gt;id.&lt;/SPAN&gt;; &lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; call symputx(&lt;/SPAN&gt;&lt;SPAN style="color: #800080; background-color: #ffffff;"&gt;'x'&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;,x,&lt;/SPAN&gt;&lt;SPAN style="color: #800080; background-color: #ffffff;"&gt;'local'&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;);&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; put x=;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; run;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;%if&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; &amp;amp;x eq &lt;/SPAN&gt;&lt;STRONG style="color: #008080; background-color: #ffffff;"&gt;23&lt;/STRONG&gt; &lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;%then&lt;/SPAN&gt; &lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;%do&lt;/SPAN&gt;; &lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; proc print data=h&amp;amp;id;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; run;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;%end&lt;/SPAN&gt;; &lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;STRONG style="color: #000080; background-color: #ffffff;"&gt;%mend&lt;/STRONG&gt;; &lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;options&lt;/SPAN&gt; &lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;mprint&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;=&lt;/SPAN&gt;&lt;STRONG style="color: #008080; background-color: #ffffff;"&gt;1&lt;/STRONG&gt; &lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;mlogic&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;=&lt;/SPAN&gt;&lt;STRONG style="color: #008080; background-color: #ffffff;"&gt;1&lt;/STRONG&gt;; &lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;STRONG style="color: #000080; background-color: #ffffff;"&gt;data&lt;/STRONG&gt; &lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;_null_&lt;/SPAN&gt;; &lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;set&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; have;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;call&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; execute(&lt;/SPAN&gt;&lt;SPAN style="color: #800080; background-color: #ffffff;"&gt;'%ex(id='&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;||vvalue(id)||&lt;/SPAN&gt;&lt;SPAN style="color: #800080; background-color: #ffffff;"&gt;')'&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;);&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #008000; background-color: #ffffff;"&gt;/*&amp;nbsp;&amp;nbsp; call execute('%nrstr(%ex(id='||vvalue(id)||'))');*/&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;STRONG style="color: #000080; background-color: #ffffff;"&gt;run&lt;/STRONG&gt;; &lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;options&lt;/SPAN&gt; &lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;mprint&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;=&lt;/SPAN&gt;&lt;STRONG style="color: #008080; background-color: #ffffff;"&gt;0&lt;/STRONG&gt; &lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;mlogic&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;=&lt;/SPAN&gt;&lt;STRONG style="color: #008080; background-color: #ffffff;"&gt;0&lt;/STRONG&gt;; &lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;P&gt;-------------------------------------------------------------------------------------------------------------------------------------&lt;/P&gt;&lt;DIV style="font-family: Courier New; font-size: 11pt;"&gt;&lt;STRONG style="color: #008080; background-color: #ffffff;"&gt;18&lt;/STRONG&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; data h1; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;x&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;=&lt;/SPAN&gt;&lt;STRONG style="color: #008080; background-color: #ffffff;"&gt;23&lt;/STRONG&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;; &lt;/SPAN&gt;&lt;STRONG style="color: #000080; background-color: #ffffff;"&gt;run&lt;/STRONG&gt;; &lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;&lt;BR /&gt;NOTE: &lt;/SPAN&gt;&lt;SPAN style="color: #ff0000; background-color: #ffffff;"&gt;The&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; data set WORK.H1 has &lt;/SPAN&gt;&lt;STRONG style="color: #008080; background-color: #ffffff;"&gt;1&lt;/STRONG&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; observations and &lt;/SPAN&gt;&lt;STRONG style="color: #008080; background-color: #ffffff;"&gt;1&lt;/STRONG&gt; &lt;SPAN style="color: #008080; background-color: #ffffff;"&gt;variables.&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;STRONG style="color: #008080; background-color: #ffffff;"&gt;19&lt;/STRONG&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; data h2; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;x&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;=&lt;/SPAN&gt;&lt;STRONG style="color: #008080; background-color: #ffffff;"&gt;11&lt;/STRONG&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;; &lt;/SPAN&gt;&lt;STRONG style="color: #000080; background-color: #ffffff;"&gt;run&lt;/STRONG&gt;; &lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;&lt;BR /&gt;NOTE: &lt;/SPAN&gt;&lt;SPAN style="color: #ff0000; background-color: #ffffff;"&gt;The&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; data set WORK.H2 has &lt;/SPAN&gt;&lt;STRONG style="color: #008080; background-color: #ffffff;"&gt;1&lt;/STRONG&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; observations and &lt;/SPAN&gt;&lt;STRONG style="color: #008080; background-color: #ffffff;"&gt;1&lt;/STRONG&gt; &lt;SPAN style="color: #008080; background-color: #ffffff;"&gt;variables.&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;STRONG style="color: #008080; background-color: #ffffff;"&gt;20&lt;/STRONG&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;&lt;/SPAN&gt;&lt;STRONG style="color: #008080; background-color: #ffffff;"&gt;21&lt;/STRONG&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; data have;&lt;BR /&gt;&lt;/SPAN&gt;&lt;STRONG style="color: #008080; background-color: #ffffff;"&gt;22&lt;/STRONG&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do id=&lt;/SPAN&gt;&lt;STRONG style="color: #008080; background-color: #ffffff;"&gt;1&lt;/STRONG&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;,&lt;/SPAN&gt;&lt;STRONG style="color: #008080; background-color: #ffffff;"&gt;2&lt;/STRONG&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;; &lt;/SPAN&gt;&lt;SPAN style="color: #ff0000; background-color: #ffffff;"&gt;output&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;; &lt;/SPAN&gt;&lt;SPAN style="color: #ff0000; background-color: #ffffff;"&gt;end&lt;/SPAN&gt;; &lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;STRONG style="color: #008080; background-color: #ffffff;"&gt;23&lt;/STRONG&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; run;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;NOTE: &lt;/SPAN&gt;&lt;SPAN style="color: #ff0000; background-color: #ffffff;"&gt;The&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; data set WORK.HAVE has &lt;/SPAN&gt;&lt;STRONG style="color: #008080; background-color: #ffffff;"&gt;2&lt;/STRONG&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; observations and &lt;/SPAN&gt;&lt;STRONG style="color: #008080; background-color: #ffffff;"&gt;1&lt;/STRONG&gt; &lt;SPAN style="color: #008080; background-color: #ffffff;"&gt;variables.&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;STRONG style="color: #008080; background-color: #ffffff;"&gt;24&lt;/STRONG&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;STRONG style="color: #000080; background-color: #ffffff;"&gt;%macro&lt;/STRONG&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; ex(id=);&lt;BR /&gt;&lt;/SPAN&gt;&lt;STRONG style="color: #008080; background-color: #ffffff;"&gt;25&lt;/STRONG&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; data _null_;&lt;BR /&gt;&lt;/SPAN&gt;&lt;STRONG style="color: #008080; background-color: #ffffff;"&gt;26&lt;/STRONG&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&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; set h&amp;amp;&lt;/SPAN&gt;&lt;SPAN style="color: #008080; background-color: #ffffff;"&gt;id.&lt;/SPAN&gt;; &lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;STRONG style="color: #008080; background-color: #ffffff;"&gt;27&lt;/STRONG&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&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; call symputx(&lt;/SPAN&gt;&lt;SPAN style="color: #800080; background-color: #ffffff;"&gt;'x'&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;,x,&lt;/SPAN&gt;&lt;SPAN style="color: #800080; background-color: #ffffff;"&gt;'local'&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;);&lt;BR /&gt;&lt;/SPAN&gt;&lt;STRONG style="color: #008080; background-color: #ffffff;"&gt;28&lt;/STRONG&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&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 x=;&lt;BR /&gt;&lt;/SPAN&gt;&lt;STRONG style="color: #008080; background-color: #ffffff;"&gt;29&lt;/STRONG&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&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; run;&lt;BR /&gt;&lt;/SPAN&gt;&lt;STRONG style="color: #008080; background-color: #ffffff;"&gt;30&lt;/STRONG&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;%if&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; &amp;amp;x eq &lt;/SPAN&gt;&lt;STRONG style="color: #008080; background-color: #ffffff;"&gt;23&lt;/STRONG&gt; &lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;%then&lt;/SPAN&gt; &lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;%do&lt;/SPAN&gt;; &lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;STRONG style="color: #008080; background-color: #ffffff;"&gt;31&lt;/STRONG&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&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; proc print data=h&amp;amp;id;&lt;BR /&gt;&lt;/SPAN&gt;&lt;STRONG style="color: #008080; background-color: #ffffff;"&gt;32&lt;/STRONG&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&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;&amp;nbsp; run;&lt;BR /&gt;&lt;/SPAN&gt;&lt;STRONG style="color: #008080; background-color: #ffffff;"&gt;33&lt;/STRONG&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&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;/SPAN&gt;&lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;%end&lt;/SPAN&gt;; &lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;STRONG style="color: #008080; background-color: #ffffff;"&gt;34&lt;/STRONG&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;STRONG style="color: #000080; background-color: #ffffff;"&gt;%mend&lt;/STRONG&gt;; &lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;STRONG style="color: #008080; background-color: #ffffff;"&gt;35&lt;/STRONG&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; options mprint=&lt;/SPAN&gt;&lt;STRONG style="color: #008080; background-color: #ffffff;"&gt;1&lt;/STRONG&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; mlogic=&lt;/SPAN&gt;&lt;STRONG style="color: #008080; background-color: #ffffff;"&gt;1&lt;/STRONG&gt;; &lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;STRONG style="color: #008080; background-color: #ffffff;"&gt;36&lt;/STRONG&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; data _null_;&lt;BR /&gt;&lt;/SPAN&gt;&lt;STRONG style="color: #008080; background-color: #ffffff;"&gt;37&lt;/STRONG&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set have;&lt;BR /&gt;&lt;/SPAN&gt;&lt;STRONG style="color: #008080; background-color: #ffffff;"&gt;38&lt;/STRONG&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; call execute(&lt;/SPAN&gt;&lt;SPAN style="color: #800080; background-color: #ffffff;"&gt;'%ex(id='&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;||vvalue(id)||&lt;/SPAN&gt;&lt;SPAN style="color: #800080; background-color: #ffffff;"&gt;')'&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;);&lt;BR /&gt;&lt;/SPAN&gt;&lt;STRONG style="color: #008080; background-color: #ffffff;"&gt;39&lt;/STRONG&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #008000; background-color: #ffffff;"&gt;/*&amp;nbsp;&amp;nbsp; call execute('%nrstr(%ex(id='||vvalue(id)||'))');*/&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;STRONG style="color: #008080; background-color: #ffffff;"&gt;40&lt;/STRONG&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; run;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;MLOGIC(EX):&amp;nbsp; Beginning &lt;/SPAN&gt;&lt;SPAN style="color: #008080; background-color: #ffffff;"&gt;execution.&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;MLOGIC(EX):&amp;nbsp; Parameter ID has value &lt;/SPAN&gt;&lt;STRONG style="color: #008080; background-color: #ffffff;"&gt;1&lt;/STRONG&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;MPRINT(EX):&amp;nbsp;&amp;nbsp; data _null_;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;MPRINT(EX):&amp;nbsp;&amp;nbsp; set h1;&lt;BR /&gt;MPRINT(EX):&amp;nbsp;&amp;nbsp; call symputx(&lt;/SPAN&gt;&lt;SPAN style="color: #800080; background-color: #ffffff;"&gt;'x'&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;,x,&lt;/SPAN&gt;&lt;SPAN style="color: #800080; background-color: #ffffff;"&gt;'local'&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;);&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;MPRINT(EX):&amp;nbsp;&amp;nbsp; put x=;&lt;BR /&gt;MPRINT(EX):&amp;nbsp;&amp;nbsp; run;&lt;BR /&gt;WARNING: &lt;/SPAN&gt;&lt;SPAN style="color: #ff0000; background-color: #ffffff;"&gt;Apparent&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; symbolic reference X not &lt;/SPAN&gt;&lt;SPAN style="color: #008080; background-color: #ffffff;"&gt;resolved.&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;ERROR: A character operand was found in the &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;%EVAL&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; function or &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;%IF&lt;/SPAN&gt; &lt;SPAN style="color: #ff0000; background-color: #ffffff;"&gt;condition&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; where a numeric operand is &lt;/SPAN&gt;&lt;SPAN style="color: #008080; background-color: #ffffff;"&gt;required.&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; The condition was: &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;x eq &lt;/SPAN&gt;&lt;STRONG style="color: #008080; background-color: #ffffff;"&gt;23&lt;/STRONG&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; &lt;BR /&gt;ERROR: The macro EX will stop &lt;/SPAN&gt;&lt;SPAN style="color: #008080; background-color: #ffffff;"&gt;executing.&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;MLOGIC(EX):&amp;nbsp; Ending &lt;/SPAN&gt;&lt;SPAN style="color: #008080; background-color: #ffffff;"&gt;execution.&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;NOTE: DATA statement used (Total process time):&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; real time&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;STRONG style="color: #008080; background-color: #ffffff;"&gt;0.00&lt;/STRONG&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; seconds&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cpu time&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;STRONG style="color: #008080; background-color: #ffffff;"&gt;0.01&lt;/STRONG&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; seconds&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;MLOGIC(EX):&amp;nbsp; Beginning &lt;/SPAN&gt;&lt;SPAN style="color: #008080; background-color: #ffffff;"&gt;execution.&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;MLOGIC(EX):&amp;nbsp; Parameter ID has value &lt;/SPAN&gt;&lt;STRONG style="color: #008080; background-color: #ffffff;"&gt;2&lt;/STRONG&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;MPRINT(EX):&amp;nbsp;&amp;nbsp; data _null_;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;MPRINT(EX):&amp;nbsp;&amp;nbsp; set h2;&lt;BR /&gt;MPRINT(EX):&amp;nbsp;&amp;nbsp; call symputx(&lt;/SPAN&gt;&lt;SPAN style="color: #800080; background-color: #ffffff;"&gt;'x'&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;,x,&lt;/SPAN&gt;&lt;SPAN style="color: #800080; background-color: #ffffff;"&gt;'local'&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;);&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;MPRINT(EX):&amp;nbsp;&amp;nbsp; put x=;&lt;BR /&gt;MPRINT(EX):&amp;nbsp;&amp;nbsp; run;&lt;BR /&gt;WARNING: &lt;/SPAN&gt;&lt;SPAN style="color: #ff0000; background-color: #ffffff;"&gt;Apparent&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; symbolic reference X not &lt;/SPAN&gt;&lt;SPAN style="color: #008080; background-color: #ffffff;"&gt;resolved.&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;ERROR: A character operand was found in the &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;%EVAL&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; function or &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;%IF&lt;/SPAN&gt; &lt;SPAN style="color: #ff0000; background-color: #ffffff;"&gt;condition&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; where a numeric operand is &lt;/SPAN&gt;&lt;SPAN style="color: #008080; background-color: #ffffff;"&gt;required.&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; The condition was: &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;x eq &lt;/SPAN&gt;&lt;STRONG style="color: #008080; background-color: #ffffff;"&gt;23&lt;/STRONG&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; &lt;BR /&gt;ERROR: The macro EX will stop &lt;/SPAN&gt;&lt;SPAN style="color: #008080; background-color: #ffffff;"&gt;executing.&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;MLOGIC(EX):&amp;nbsp; Ending &lt;/SPAN&gt;&lt;SPAN style="color: #008080; background-color: #ffffff;"&gt;execution.&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;NOTE: The SAS System stopped processing this step because of &lt;/SPAN&gt;&lt;SPAN style="color: #008080; background-color: #ffffff;"&gt;errors.&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;NOTE: There were &lt;/SPAN&gt;&lt;STRONG style="color: #008080; background-color: #ffffff;"&gt;2&lt;/STRONG&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; observations read from the data set WORK&lt;/SPAN&gt;&lt;STRONG style="color: #008080; background-color: #ffffff;"&gt;.H&lt;/STRONG&gt;&lt;SPAN style="color: #008080; background-color: #ffffff;"&gt;AVE.&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;&lt;BR /&gt;NOTE: CALL EXECUTE generated &lt;/SPAN&gt;&lt;SPAN style="color: #008080; background-color: #ffffff;"&gt;line.&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;STRONG style="color: #008080; background-color: #ffffff;"&gt;1&lt;/STRONG&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; + data _null_;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #ff0000; background-color: #ffffff;"&gt;set&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; h1;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #ff0000; background-color: #ffffff;"&gt;call&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; symputx(&lt;/SPAN&gt;&lt;SPAN style="color: #800080; background-color: #ffffff;"&gt;'x'&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;,x,&lt;/SPAN&gt;&lt;SPAN style="color: #800080; background-color: #ffffff;"&gt;'local'&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #ff0000; background-color: #ffffff;"&gt;put&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; x=;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;STRONG style="color: #000080; background-color: #ffffff;"&gt;run&lt;/STRONG&gt;; &lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;x&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;=&lt;/SPAN&gt;&lt;STRONG style="color: #008080; background-color: #ffffff;"&gt;23&lt;/STRONG&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;NOTE: There were &lt;/SPAN&gt;&lt;STRONG style="color: #008080; background-color: #ffffff;"&gt;1&lt;/STRONG&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; observations read from the data set WORK&lt;/SPAN&gt;&lt;STRONG style="color: #008080; background-color: #ffffff;"&gt;.H1.&lt;/STRONG&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;NOTE: DATA statement used (Total process time):&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; real time&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;STRONG style="color: #008080; background-color: #ffffff;"&gt;0.00&lt;/STRONG&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; seconds&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cpu time&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;STRONG style="color: #008080; background-color: #ffffff;"&gt;0.00&lt;/STRONG&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; seconds&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;STRONG style="color: #008080; background-color: #ffffff;"&gt;2&lt;/STRONG&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; + data _null_;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #ff0000; background-color: #ffffff;"&gt;set&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; h2;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #ff0000; background-color: #ffffff;"&gt;call&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; symputx(&lt;/SPAN&gt;&lt;SPAN style="color: #800080; background-color: #ffffff;"&gt;'x'&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;,x,&lt;/SPAN&gt;&lt;SPAN style="color: #800080; background-color: #ffffff;"&gt;'local'&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #ff0000; background-color: #ffffff;"&gt;put&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; x=;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;STRONG style="color: #000080; background-color: #ffffff;"&gt;run&lt;/STRONG&gt;; &lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;x&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;=&lt;/SPAN&gt;&lt;STRONG style="color: #008080; background-color: #ffffff;"&gt;11&lt;/STRONG&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;NOTE: There were &lt;/SPAN&gt;&lt;STRONG style="color: #008080; background-color: #ffffff;"&gt;1&lt;/STRONG&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; observations read from the data set WORK&lt;/SPAN&gt;&lt;STRONG style="color: #008080; background-color: #ffffff;"&gt;.H2.&lt;/STRONG&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;NOTE: DATA statement used (Total process time):&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; real time&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;STRONG style="color: #008080; background-color: #ffffff;"&gt;0.00&lt;/STRONG&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; seconds&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cpu time&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;STRONG style="color: #008080; background-color: #ffffff;"&gt;0.00&lt;/STRONG&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; seconds&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;STRONG style="color: #008080; background-color: #ffffff;"&gt;41&lt;/STRONG&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; options mprint=&lt;/SPAN&gt;&lt;STRONG style="color: #008080; background-color: #ffffff;"&gt;0&lt;/STRONG&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; mlogic=&lt;/SPAN&gt;&lt;STRONG style="color: #008080; background-color: #ffffff;"&gt;0&lt;/STRONG&gt;; &lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;STRONG style="color: #008080; background-color: #ffffff;"&gt;42&lt;/STRONG&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 03 Dec 2013 19:29:13 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/run-a-program-multiple-times-for-a-list-of-inputs/m-p/162662#M31535</guid>
      <dc:creator>data_null__</dc:creator>
      <dc:date>2013-12-03T19:29:13Z</dc:date>
    </item>
    <item>
      <title>Re: run a program multiple times for a list of inputs</title>
      <link>https://communities.sas.com/t5/SAS-Programming/run-a-program-multiple-times-for-a-list-of-inputs/m-p/162663#M31536</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;There was an extensive discussion regarding this issue on SAS-L 9 years ago (is that long already?)&lt;/P&gt;&lt;P&gt;&lt;A href="http://www.listserv.uga.edu/cgi-bin/wa?A2=ind0512c&amp;amp;L=sas-l&amp;amp;D=0&amp;amp;P=24994" title="http://www.listserv.uga.edu/cgi-bin/wa?A2=ind0512c&amp;amp;L=sas-l&amp;amp;D=0&amp;amp;P=24994"&gt;http://www.listserv.uga.edu/cgi-bin/wa?A2=ind0512c&amp;amp;L=sas-l&amp;amp;D=0&amp;amp;P=24994&lt;/A&gt;&lt;A href="http://www.listserv.uga.edu/cgi-bin/wa?A2=ind0403a&amp;amp;L=sas-l&amp;amp;P=15219" title="http://www.listserv.uga.edu/cgi-bin/wa?A2=ind0403a&amp;amp;L=sas-l&amp;amp;P=15219"&gt;SAS-L archives -- March 2004, week 1 (#139)&amp;lt;/title&amp;gt;&amp;lt;style type="text/css"&amp;gt;&amp;lt;!--BODY { font-family: "Comic Sans MS",arial, helvetica, sans-serif; font-size: 14px; color: black; background-color: white; }TD, TH, FONT, .BOD { font-family: "Comic Sans MS", arial, helvetica, sans-serif; font-size: 14px; margin-left: 0px; margin-right: 0px; color: black; }SUP { font-family: courier,monospace; font-size: 12px; text-decoration: none; }KBD {font-family: courier,monospace;}PRE {font-family: courier,monospace;} .SMALL {font-size: 12px} .SMALLER {font-size: 10px} .LARGE {font-size: 16px} .LARGER {font-size: 18px} .FOOT {font-size: 12px; color: gray } .BLOCK { font-size: 12px; color: #555555; text-align: justify; } .FIXED { font-family: courier,monospaced; font-size:12pt }STRONG {font-weight: bold }EM { font-style: italic; }A:LINK { text-decoration: none; color: #0000FF; }A:VISITED { text-decoration: none; color: #0000FF; }A:ACTIVE { text-decoration: none; color: #0000FF; }A:HOVER { text-decoration: none; color: #ad080a; }H1 { font-size: 22px; }H2 { font-size: 20px; }H3 { font-size: 18px; }--&amp;gt;&amp;lt;/style&amp;gt;&amp;lt;!-- This is the top part for sub pages (topsub.html) 12/10/99 16:05 --&amp;gt;&amp;lt;head&amp;gt;&amp;lt;title&amp;gt;LISTSERV at the University of Georgia&lt;/A&gt;&lt;A class="active_link" href="http://www.listserv.uga.edu/cgi-bin/wa?A2=ind0512c&amp;amp;L=sas-l&amp;amp;D=0&amp;amp;P=24994" title="http://www.listserv.uga.edu/cgi-bin/wa?A2=ind0512c&amp;amp;L=sas-l&amp;amp;D=0&amp;amp;P=24994"&gt;http://www.listserv.uga.edu/cgi-bin/wa?A2=ind0512c&amp;amp;L=sas-l&amp;amp;D=0&amp;amp;P=24994&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Also, SAS Doc vaguely recommends using %nrstr() as well :&lt;/P&gt;&lt;P&gt;&lt;A href="http://support.sas.com/documentation/cdl/en/mcrolref/62978/HTML/default/viewer.htm#n1q1527d51eivsn1ob5hnz0yd1hx.htm" title="http://support.sas.com/documentation/cdl/en/mcrolref/62978/HTML/default/viewer.htm#n1q1527d51eivsn1ob5hnz0yd1hx.htm"&gt;SAS(R) 9.3 Macro Language: Reference&lt;/A&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 03 Dec 2013 22:09:35 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/run-a-program-multiple-times-for-a-list-of-inputs/m-p/162663#M31536</guid>
      <dc:creator>Haikuo</dc:creator>
      <dc:date>2013-12-03T22:09:35Z</dc:date>
    </item>
    <item>
      <title>Re: run a program multiple times for a list of inputs</title>
      <link>https://communities.sas.com/t5/SAS-Programming/run-a-program-multiple-times-for-a-list-of-inputs/m-p/162664#M31537</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;This post from &lt;A __default_attr="807539" __jive_macro_name="user" class="jive_macro jive_macro_user" data-objecttype="3" href="https://communities.sas.com/"&gt;&lt;/A&gt; succinctly states the issue and the need for %NRSTR.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN id="MSGHDR-PRE"&gt;&lt;STRONG&gt;&lt;SPAN id="MSGHDR-DATE-H-PRE"&gt;Date:&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN id="MSGHDR-DATE-PRE"&gt;Mon, 19 Dec 2005 14:51:05 -0500&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;SPAN id="MSGHDR-REPLY-TO-H-PRE"&gt;Reply-To:&lt;/SPAN&gt;&lt;/STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN id="MSGHDR-REPLY-TO-PRE"&gt;&lt;SPAN&gt;"Fehd, Ronald J" &amp;lt;&lt;/SPAN&gt;&lt;A class="jive-link-email-small" href="mailto:rjf2@CDC.GOV"&gt;rjf2@CDC.GOV&lt;/A&gt;&lt;SPAN&gt;&amp;gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;SPAN id="MSGHDR-SENDER-H-PRE"&gt;Sender:&lt;/SPAN&gt;&lt;/STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN id="MSGHDR-SENDER-PRE"&gt;&lt;SPAN&gt;"SAS(r) Discussion" &amp;lt;&lt;/SPAN&gt;&lt;A class="jive-link-email-small" href="mailto:SAS-L@LISTSERV.UGA.EDU"&gt;SAS-L@LISTSERV.UGA.EDU&lt;/A&gt;&lt;SPAN&gt;&amp;gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;SPAN id="MSGHDR-FROM-H-PRE"&gt;From:&lt;/SPAN&gt;&lt;/STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN id="MSGHDR-FROM-PRE"&gt;&lt;A _jive_internal="true" href="https://communities.sas.com/cgi-bin/wa?A2=ind0512c&amp;amp;L=sas-l&amp;amp;D=0&amp;amp;P=55537"&gt;"Fehd, Ronald J" &amp;lt;rjf2@CDC.GOV&amp;gt;&lt;/A&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;SPAN id="MSGHDR-SUBJECT-H-PRE"&gt;Subject:&lt;/SPAN&gt;&lt;/STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN id="MSGHDR-SUBJECT-PRE"&gt;Re: Call Execute&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;SPAN id="MSGHDR-CONTENT-TYPE-H-PRE"&gt;Content-Type:&lt;/SPAN&gt;&lt;/STRONG&gt; &lt;SPAN id="MSGHDR-CONTENT-TYPE-PRE"&gt;text/plain; charset="us-ascii"&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;add complexity: %If or %do or call symput within HelloWorld&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;it will not work correctly without being called w/%nrstr&lt;BR /&gt;because the -macro- code is expanded&lt;BR /&gt;before push onto the SAS tokenizer stack&lt;BR /&gt;and you want it expanded -after- pop from the stack&lt;BR /&gt;Ron&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 03 Dec 2013 23:06:36 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/run-a-program-multiple-times-for-a-list-of-inputs/m-p/162664#M31537</guid>
      <dc:creator>data_null__</dc:creator>
      <dc:date>2013-12-03T23:06:36Z</dc:date>
    </item>
    <item>
      <title>Re: run a program multiple times for a list of inputs</title>
      <link>https://communities.sas.com/t5/SAS-Programming/run-a-program-multiple-times-for-a-list-of-inputs/m-p/162665#M31538</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Well again, thanks DN for the valuable lesson.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thank you Hai Kuo for the links&lt;/P&gt;&lt;P&gt;*edit SAS9.2 documentation did not have any TIP with regards to %nrstr :smileyshocked:&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 04 Dec 2013 12:26:52 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/run-a-program-multiple-times-for-a-list-of-inputs/m-p/162665#M31538</guid>
      <dc:creator>Vince28_Statcan</dc:creator>
      <dc:date>2013-12-04T12:26:52Z</dc:date>
    </item>
    <item>
      <title>Re: run a program multiple times for a list of inputs</title>
      <link>https://communities.sas.com/t5/SAS-Programming/run-a-program-multiple-times-for-a-list-of-inputs/m-p/162666#M31539</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;thanks for the name-cheque, Data _null_&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I have politely suggested to SASwareBallot the need for an update to call execute, &lt;/P&gt;&lt;P&gt;which might appropriately be called&lt;/P&gt;&lt;P&gt;call executeX&lt;/P&gt;&lt;P&gt;which would *-always-* delay execution.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The politics I hear from different buildings on SAS campus are not encouraging:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;SAS developers of the macro language: "We don't need ..."&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;SAS Tech Support: "We keep having to explain this issue. Why is it so hard to grasp?"&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Uhh, when is the last time we talked about 'stacks' in the SAS (macro) language?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;This is neither a SAS nor a macro issue.&lt;/P&gt;&lt;P&gt;It is an interface issue. &lt;/P&gt;&lt;P&gt;And one which is esoteric to programmers.&lt;/P&gt;&lt;P&gt;What you told the computer to do, it will never do, unless you know the language of the interface.&lt;/P&gt;&lt;P&gt;"Wait! Wait! Don't do what I said (wrote) right away! Hesitate!"&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Who gets this difference?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;"Ok, here is the code I want to run &lt;/P&gt;&lt;P&gt;&amp;gt;&amp;gt;&amp;gt;---&amp;gt; in the next step. &amp;lt;---&amp;lt;&amp;lt;&amp;lt;"&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;There is *-nothing-* in the log that will help you debug this error!&lt;/P&gt;&lt;P&gt;"What error? I did exactly what you wrote!"&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Yeah, but knot what I meant!&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;This feature of call execute belong in the Proc ShootFoot category.&lt;/P&gt;&lt;P&gt;&lt;span class="lia-unicode-emoji" title=":winking_face:"&gt;😉&lt;/span&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 05 Dec 2013 22:14:38 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/run-a-program-multiple-times-for-a-list-of-inputs/m-p/162666#M31539</guid>
      <dc:creator>Ron_MacroMaven</dc:creator>
      <dc:date>2013-12-05T22:14:38Z</dc:date>
    </item>
    <item>
      <title>Re: run a program multiple times for a list of inputs</title>
      <link>https://communities.sas.com/t5/SAS-Programming/run-a-program-multiple-times-for-a-list-of-inputs/m-p/162667#M31540</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;This program demonstrates the concept of&lt;/P&gt;&lt;P&gt;Futility of Debugging of call execute&lt;/P&gt;&lt;P&gt;DATA _null_;&lt;/P&gt;&lt;P&gt;do i = 1 to 3;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; call execute(catt('%let i =',i,';%put note: i:&amp;amp;i;'));&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;stop;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;%macro put_i(data=);&lt;/P&gt;&lt;P&gt;data _null_;&lt;/P&gt;&lt;P&gt;putlog "mvar i: &amp;amp;i from data";&lt;/P&gt;&lt;P&gt;stop;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;%put note: &amp;amp;sysmacroname: i:&amp;amp;i;&lt;/P&gt;&lt;P&gt;%mend;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;DATA _null_;&lt;/P&gt;&lt;P&gt;do i = 1 to 3;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; call execute(catt('%let i =',i,';%put_i'));&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;stop;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;DATA _null_;&lt;/P&gt;&lt;P&gt;file 'subroutine.sas';&lt;/P&gt;&lt;P&gt;put '%put note: i:&amp;amp;i. from subroutine;';&lt;/P&gt;&lt;P&gt;stop;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;DATA _null_;&lt;/P&gt;&lt;P&gt;do i = 1 to 3;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; call execute(catt('%let i =',i&lt;/P&gt;&lt;P&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ,';%include "subroutine.sas";'&lt;/P&gt;&lt;P&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ,'%put note: i:&amp;amp;i in loop;'));&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;stop;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*NOTE: test of global mvar J&lt;/P&gt;&lt;P&gt;This is what I mean by complexity: a macro with either of percent+do&lt;/P&gt;&lt;P&gt;or percent+if;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;%let _global_j = 0;&lt;/P&gt;&lt;P&gt;%macro put_mvar(mvar=,note=none);&lt;/P&gt;&lt;P&gt;%if not &amp;amp;_global_j %then&lt;/P&gt;&lt;P&gt;%put note: &amp;amp;sysmacroname: mvar:&amp;amp;mvar,&amp;nbsp; note=&amp;amp;note;&lt;/P&gt;&lt;P&gt;%else&lt;/P&gt;&lt;P&gt;%put note: &amp;amp;sysmacroname: nothing to report, note=&amp;amp;note;&lt;/P&gt;&lt;P&gt;%mend;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;%let _global_j = 0;&lt;/P&gt;&lt;P&gt;DATA _null_;&lt;/P&gt;&lt;P&gt;do i = 1 to 3;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; call execute(catt('%put_mvar(mvar=',i,')'));&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; call execute(catt('%nrstr(%put_mvar(mvar=',i,',note=nrstr))'));&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;stop;&lt;/P&gt;&lt;P&gt;%let _global_j = 1;&lt;/P&gt;&lt;P&gt;%put note: _global_j = &amp;amp;_global_j;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;%put note: _global_j = &amp;amp;_global_j;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Ron Fehd&amp;nbsp; macro maven&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 06 Dec 2013 12:28:23 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/run-a-program-multiple-times-for-a-list-of-inputs/m-p/162667#M31540</guid>
      <dc:creator>Ron_MacroMaven</dc:creator>
      <dc:date>2013-12-06T12:28:23Z</dc:date>
    </item>
  </channel>
</rss>

