<?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: Using a Do-Loop with a Macro in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Using-a-Do-Loop-with-a-Macro/m-p/240502#M44380</link>
    <description>&lt;P&gt;Don't necessarily personally promote nested macros, but I'll still answer your question.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;One way is to iterate through your macro calls with macro style do-loops.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;%macro iterate;
%do year = 2010 %to 2015;
  %do month = 1 %to 12;
    /* assuming you want to zero fill the month */
    %let month = %sysfunc(putn(&amp;amp;month,z2.));
    %filecr(DE&amp;amp;YEAR.&amp;amp;MONTH.,&amp;amp;YEAR.,&amp;amp;MONTH.);	
  %end;
%end;
%mend;

%iterate&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Another alternative would be to look at call execute function in sas which you could make use of data step logic and functions.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Tue, 22 Dec 2015 17:54:32 GMT</pubDate>
    <dc:creator>JoshB</dc:creator>
    <dc:date>2015-12-22T17:54:32Z</dc:date>
    <item>
      <title>Using a Do-Loop with a Macro</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Using-a-Do-Loop-with-a-Macro/m-p/240406#M44347</link>
      <description>&lt;P&gt;Hi&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Using SAS 7.1.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I am still a beginner.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I alreasy have a macro that will create the files for the different years and months.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;%FILECR(DE&amp;amp;YEAR.&amp;amp;MONTH,&amp;amp;YEAR,&amp;amp;MONTH);&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;However it becomes tedious if I have to create many files for the different years and months. Hence I would a simpler way to do it. Eg by a Do-loop,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;However, the below don't work.&amp;nbsp; Any advice? Thank you&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Do I=2010 to 2015;&lt;BR /&gt;%LET MONTH = 06;&lt;BR /&gt;%LET YEAR = I;&lt;BR /&gt;%FILECR(DE&amp;amp;YEAR.&amp;amp;MONTH,&amp;amp;YEAR,&amp;amp;MONTH);&lt;/P&gt;
&lt;P&gt;End;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 22 Dec 2015 07:35:38 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Using-a-Do-Loop-with-a-Macro/m-p/240406#M44347</guid>
      <dc:creator>apple</dc:creator>
      <dc:date>2015-12-22T07:35:38Z</dc:date>
    </item>
    <item>
      <title>Re: Using a Do-Loop with a Macro</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Using-a-Do-Loop-with-a-Macro/m-p/240415#M44349</link>
      <description>&lt;P&gt;You can't mix macro and non-macro element like that.&lt;/P&gt;
&lt;P&gt;Th do loop needs also be in macro language.&lt;/P&gt;
&lt;P&gt;By using values from the do loop, you probably don't need to assign the year variable.&lt;/P&gt;
&lt;P&gt;Sounds like you need a macro training.&lt;/P&gt;
&lt;P&gt;Until then, check out macro documentation and samples throughout&amp;nbsp;support.sas.com.&lt;/P&gt;</description>
      <pubDate>Tue, 22 Dec 2015 08:46:39 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Using-a-Do-Loop-with-a-Macro/m-p/240415#M44349</guid>
      <dc:creator>LinusH</dc:creator>
      <dc:date>2015-12-22T08:46:39Z</dc:date>
    </item>
    <item>
      <title>Re: Using a Do-Loop with a Macro</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Using-a-Do-Loop-with-a-Macro/m-p/240502#M44380</link>
      <description>&lt;P&gt;Don't necessarily personally promote nested macros, but I'll still answer your question.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;One way is to iterate through your macro calls with macro style do-loops.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;%macro iterate;
%do year = 2010 %to 2015;
  %do month = 1 %to 12;
    /* assuming you want to zero fill the month */
    %let month = %sysfunc(putn(&amp;amp;month,z2.));
    %filecr(DE&amp;amp;YEAR.&amp;amp;MONTH.,&amp;amp;YEAR.,&amp;amp;MONTH.);	
  %end;
%end;
%mend;

%iterate&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Another alternative would be to look at call execute function in sas which you could make use of data step logic and functions.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 22 Dec 2015 17:54:32 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Using-a-Do-Loop-with-a-Macro/m-p/240502#M44380</guid>
      <dc:creator>JoshB</dc:creator>
      <dc:date>2015-12-22T17:54:32Z</dc:date>
    </item>
    <item>
      <title>Re: Using a Do-Loop with a Macro</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Using-a-Do-Loop-with-a-Macro/m-p/240581#M44405</link>
      <description>&lt;P&gt;Hi JoshB,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Thank you for the reply.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;However the Do-Loop for the MONTH (I slightly modified the month) doesn't work.&lt;/P&gt;
&lt;P&gt;Some advice will be appreciated . THank you&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I get the following errors:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;ERROR: A character operand was found in the %EVAL function or %IF condition where a numeric operand is required. The condition was:&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 12 by 06&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;ERROR: The %TO value of the %DO MONTH loop is invalid.&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;ERROR: The macro LOOP will stop executing.&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN class="token macrobound"&gt;%macro&lt;/SPAN&gt; iterate&lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN class="token macrostatement"&gt;%do&lt;/SPAN&gt; &lt;SPAN class="token function"&gt;year&lt;/SPAN&gt; &lt;SPAN class="token operator"&gt;=&lt;/SPAN&gt; &lt;SPAN class="token number"&gt;2010&lt;/SPAN&gt; &lt;SPAN class="token macrostatement"&gt;%to&lt;/SPAN&gt; &lt;SPAN class="token number"&gt;2015&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;&lt;BR /&gt;&amp;nbsp; &lt;SPAN class="token macrostatement"&gt;%do&lt;/SPAN&gt; &lt;SPAN class="token function"&gt;month&lt;/SPAN&gt; &lt;SPAN class="token operator"&gt;=&lt;/SPAN&gt;&amp;nbsp;6 &lt;SPAN class="token macrostatement"&gt;%to&lt;/SPAN&gt; &lt;SPAN class="token number"&gt;12 by 6&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* I only want the months for June &amp;amp; Dec*/&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="token macroname"&gt;%let&lt;/SPAN&gt; &lt;SPAN class="token function"&gt;month&lt;/SPAN&gt; &lt;SPAN class="token operator"&gt;=&lt;/SPAN&gt; &lt;SPAN class="token macrostatement"&gt;%sysfunc&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;(&lt;/SPAN&gt;&lt;SPAN class="token function"&gt;putn&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;(&lt;/SPAN&gt;&lt;SPAN class="token operator"&gt;&amp;amp;&lt;/SPAN&gt;&lt;SPAN class="token function"&gt;month&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;,&lt;/SPAN&gt;z2&lt;SPAN class="token punctuation"&gt;.&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;)&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;)&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="token macroname"&gt;%filecr&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;(&lt;/SPAN&gt;DE&lt;SPAN class="token operator"&gt;&amp;amp;&lt;/SPAN&gt;&lt;SPAN class="token function"&gt;YEAR&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;.&lt;/SPAN&gt;&lt;SPAN class="token operator"&gt;&amp;amp;&lt;/SPAN&gt;&lt;SPAN class="token function"&gt;MONTH&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;.&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;,&lt;/SPAN&gt;&lt;SPAN class="token operator"&gt;&amp;amp;&lt;/SPAN&gt;&lt;SPAN class="token function"&gt;YEAR&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;.&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;,&lt;/SPAN&gt;&lt;SPAN class="token operator"&gt;&amp;amp;&lt;/SPAN&gt;&lt;SPAN class="token function"&gt;MONTH&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;.&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;)&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt; &lt;BR /&gt;&amp;nbsp; &lt;SPAN class="token macrostatement"&gt;%end&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN class="token macrostatement"&gt;%end&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN class="token macrobound"&gt;%mend&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN class="token macroname"&gt;%iterate&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN class="token punctuation"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Wed, 23 Dec 2015 00:54:10 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Using-a-Do-Loop-with-a-Macro/m-p/240581#M44405</guid>
      <dc:creator>apple</dc:creator>
      <dc:date>2015-12-23T00:54:10Z</dc:date>
    </item>
    <item>
      <title>Re: Using a Do-Loop with a Macro</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Using-a-Do-Loop-with-a-Macro/m-p/240584#M44406</link>
      <description>&lt;P&gt;You need &amp;nbsp;to use %by instead of by in a macro loop.&lt;/P&gt;</description>
      <pubDate>Wed, 23 Dec 2015 01:20:13 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Using-a-Do-Loop-with-a-Macro/m-p/240584#M44406</guid>
      <dc:creator>JoshB</dc:creator>
      <dc:date>2015-12-23T01:20:13Z</dc:date>
    </item>
    <item>
      <title>Re: Using a Do-Loop with a Macro</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Using-a-Do-Loop-with-a-Macro/m-p/240604#M44413</link>
      <description>&lt;P&gt;Hi JoshB,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Thank you once again.&lt;/P&gt;
&lt;P&gt;But if instead I want to list out the specific MONTHs that I want . I modified as below. But it doesn't work.&lt;/P&gt;
&lt;P&gt;Can you assist again? Thank you&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN class="token macrobound"&gt;%macro&lt;/SPAN&gt; iterate&lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN class="token macrostatement"&gt;%do&lt;/SPAN&gt; &lt;SPAN class="token function"&gt;year&lt;/SPAN&gt; &lt;SPAN class="token operator"&gt;=&lt;/SPAN&gt; &lt;SPAN class="token number"&gt;2010&lt;/SPAN&gt; &lt;SPAN class="token macrostatement"&gt;%to&lt;/SPAN&gt; &lt;SPAN class="token number"&gt;2015&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;&lt;BR /&gt;&amp;nbsp; &lt;SPAN class="token macrostatement"&gt;%do&lt;/SPAN&gt; &lt;SPAN class="token function"&gt;month&lt;/SPAN&gt; &lt;SPAN class="token operator"&gt;=&lt;/SPAN&gt;&amp;nbsp;03, 06, &lt;SPAN class="token number"&gt;12&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* I only want for specific months*/&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="token macroname"&gt;%let&lt;/SPAN&gt; &lt;SPAN class="token function"&gt;month&lt;/SPAN&gt; &lt;SPAN class="token operator"&gt;=&lt;/SPAN&gt; &lt;SPAN class="token macrostatement"&gt;%sysfunc&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;(&lt;/SPAN&gt;&lt;SPAN class="token function"&gt;putn&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;(&lt;/SPAN&gt;&lt;SPAN class="token operator"&gt;&amp;amp;&lt;/SPAN&gt;&lt;SPAN class="token function"&gt;month&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;,&lt;/SPAN&gt;z2&lt;SPAN class="token punctuation"&gt;.&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;)&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;)&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="token macroname"&gt;%filecr&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;(&lt;/SPAN&gt;DE&lt;SPAN class="token operator"&gt;&amp;amp;&lt;/SPAN&gt;&lt;SPAN class="token function"&gt;YEAR&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;.&lt;/SPAN&gt;&lt;SPAN class="token operator"&gt;&amp;amp;&lt;/SPAN&gt;&lt;SPAN class="token function"&gt;MONTH&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;.&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;,&lt;/SPAN&gt;&lt;SPAN class="token operator"&gt;&amp;amp;&lt;/SPAN&gt;&lt;SPAN class="token function"&gt;YEAR&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;.&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;,&lt;/SPAN&gt;&lt;SPAN class="token operator"&gt;&amp;amp;&lt;/SPAN&gt;&lt;SPAN class="token function"&gt;MONTH&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;.&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;)&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt; &lt;BR /&gt;&amp;nbsp; &lt;SPAN class="token macrostatement"&gt;%end&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN class="token macrostatement"&gt;%end&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN class="token macrobound"&gt;%mend&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN class="token macroname"&gt;%iterate&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Wed, 23 Dec 2015 03:45:06 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Using-a-Do-Loop-with-a-Macro/m-p/240604#M44413</guid>
      <dc:creator>apple</dc:creator>
      <dc:date>2015-12-23T03:45:06Z</dc:date>
    </item>
    <item>
      <title>Re: Using a Do-Loop with a Macro</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Using-a-Do-Loop-with-a-Macro/m-p/240609#M44415</link>
      <description>&lt;P&gt;I think this thread is at it's limit for new questions. If satisfied with results, please mark a solution as accepted and post new questions to a new thread.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;That being said, you can accomplish this with a list and scan through it.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;%macro iterate;
%do year = 2010 %to 2015;
/* set the months you want here, separated by spaces */
%let monlist = 3 6 12;
  %do i = 1 %to %sysfunc(countw(&amp;amp;monlist.));
    /* assuming you want to zero fill the month */
    %let month = %sysfunc(putn(%scan(&amp;amp;monlist.,&amp;amp;i.),z2.));
    %put filecr(DE&amp;amp;YEAR.&amp;amp;MONTH.,&amp;amp;YEAR.,&amp;amp;MONTH.);	
  %end;
%end;
%mend;

%iterate&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Wed, 23 Dec 2015 04:45:32 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Using-a-Do-Loop-with-a-Macro/m-p/240609#M44415</guid>
      <dc:creator>JoshB</dc:creator>
      <dc:date>2015-12-23T04:45:32Z</dc:date>
    </item>
  </channel>
</rss>

