<?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 Macro iteration on two variables in SAS Enterprise Guide</title>
    <link>https://communities.sas.com/t5/SAS-Enterprise-Guide/Macro-iteration-on-two-variables/m-p/393804#M25375</link>
    <description>&lt;P&gt;I have defined two macro variables, both of them have 5 values, e.g. %month = 5 4 3 2 1 and %year = 20 19 18 17 16.&lt;/P&gt;&lt;P&gt;In a proc sql I have selected variables which must have values as stated above, e.g.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;%macro my_table (month, year);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;proc sql;&lt;/P&gt;&lt;P&gt;create table XXX as&lt;/P&gt;&lt;P&gt;select ...&lt;/P&gt;&lt;P&gt;where t1.mnt = &amp;amp;month and t1.yr = &amp;amp;year;&lt;/P&gt;&lt;P&gt;quit;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;%mend my_table;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Now I need to define macro which will iterate this process and create 5 tables. In every table I need to have pairs: Mnt=5 &amp;amp; Yr=20,&amp;nbsp; Mnt=4 &amp;amp; Yr=19, etc. This is how I have written macro:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;%macro preparation_table;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;%let k=1;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let t=1;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;%let ti=%scan(&amp;amp;month,&amp;amp;k);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let pi=%scan(&amp;amp;year,&amp;amp;t);&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;%do %while (&amp;amp;ti = 5);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;%my_table(&amp;amp;ti, &amp;amp;pi, &amp;amp;k);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;%let k=%eval(&amp;amp;k+1);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let t=%eval(&amp;amp;t+1);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;%let ti=%scan(&amp;amp;month,&amp;amp;k);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let pi=%scan(&amp;amp;year,&amp;amp;t);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;%end;&lt;BR /&gt;%mend preparation_table;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;%preparation_table;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;In log I get message&lt;/P&gt;&lt;P&gt;&amp;nbsp;%LET _CLIENTTASKLABEL=;&lt;BR /&gt;96&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %LET _CLIENTPROJECTPATH=;&lt;BR /&gt;97&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %LET _CLIENTPROJECTNAME=;&lt;BR /&gt;98&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %LET _SASPROGRAMFILE=;&lt;BR /&gt;99&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;100&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;*';*";*/;quit;run;&lt;BR /&gt;101&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ODS _ALL_ CLOSE;&lt;BR /&gt;102&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;103&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;104&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; QUIT; RUN;&lt;BR /&gt;105&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;with no result, i.e. no tables created. Please help.&lt;/P&gt;</description>
    <pubDate>Thu, 07 Sep 2017 09:54:20 GMT</pubDate>
    <dc:creator>D-e-e</dc:creator>
    <dc:date>2017-09-07T09:54:20Z</dc:date>
    <item>
      <title>Macro iteration on two variables</title>
      <link>https://communities.sas.com/t5/SAS-Enterprise-Guide/Macro-iteration-on-two-variables/m-p/393804#M25375</link>
      <description>&lt;P&gt;I have defined two macro variables, both of them have 5 values, e.g. %month = 5 4 3 2 1 and %year = 20 19 18 17 16.&lt;/P&gt;&lt;P&gt;In a proc sql I have selected variables which must have values as stated above, e.g.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;%macro my_table (month, year);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;proc sql;&lt;/P&gt;&lt;P&gt;create table XXX as&lt;/P&gt;&lt;P&gt;select ...&lt;/P&gt;&lt;P&gt;where t1.mnt = &amp;amp;month and t1.yr = &amp;amp;year;&lt;/P&gt;&lt;P&gt;quit;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;%mend my_table;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Now I need to define macro which will iterate this process and create 5 tables. In every table I need to have pairs: Mnt=5 &amp;amp; Yr=20,&amp;nbsp; Mnt=4 &amp;amp; Yr=19, etc. This is how I have written macro:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;%macro preparation_table;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;%let k=1;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let t=1;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;%let ti=%scan(&amp;amp;month,&amp;amp;k);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let pi=%scan(&amp;amp;year,&amp;amp;t);&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;%do %while (&amp;amp;ti = 5);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;%my_table(&amp;amp;ti, &amp;amp;pi, &amp;amp;k);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;%let k=%eval(&amp;amp;k+1);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let t=%eval(&amp;amp;t+1);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;%let ti=%scan(&amp;amp;month,&amp;amp;k);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let pi=%scan(&amp;amp;year,&amp;amp;t);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;%end;&lt;BR /&gt;%mend preparation_table;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;%preparation_table;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;In log I get message&lt;/P&gt;&lt;P&gt;&amp;nbsp;%LET _CLIENTTASKLABEL=;&lt;BR /&gt;96&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %LET _CLIENTPROJECTPATH=;&lt;BR /&gt;97&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %LET _CLIENTPROJECTNAME=;&lt;BR /&gt;98&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %LET _SASPROGRAMFILE=;&lt;BR /&gt;99&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;100&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;*';*";*/;quit;run;&lt;BR /&gt;101&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ODS _ALL_ CLOSE;&lt;BR /&gt;102&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;103&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;104&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; QUIT; RUN;&lt;BR /&gt;105&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;with no result, i.e. no tables created. Please help.&lt;/P&gt;</description>
      <pubDate>Thu, 07 Sep 2017 09:54:20 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Enterprise-Guide/Macro-iteration-on-two-variables/m-p/393804#M25375</guid>
      <dc:creator>D-e-e</dc:creator>
      <dc:date>2017-09-07T09:54:20Z</dc:date>
    </item>
    <item>
      <title>Re: Macro iteration on two variables</title>
      <link>https://communities.sas.com/t5/SAS-Enterprise-Guide/Macro-iteration-on-two-variables/m-p/393816#M25376</link>
      <description>&lt;P&gt;We need more information. &amp;nbsp;Put in your code before you run anything, the debug options so you can see what is going on:&lt;/P&gt;
&lt;P&gt;options mlogic mprint symbolgen source source2;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;As always, it is&amp;nbsp;&lt;U&gt;really&lt;/U&gt; not a good idea to spit data up into separate datasets. &amp;nbsp;All you are doing is creating work for yourself, as after that point you then have to create loop code each time you want to do anything. &amp;nbsp;Far better to use by group processing.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;If you still go down the route, then:&lt;/P&gt;
&lt;PRE&gt;data _null_;
  do year=16 to 20;
    do month=1 to 5;
      yr=put(year,2.);
      mt=put(month,2.);
      call execute(cats('data want',yr,mt,'; set have (where=(mnt=',mt,' and yr=',yr,')); run;');
    end;
  end;
run;&lt;/PRE&gt;
&lt;P&gt;Is far simpler.&lt;/P&gt;</description>
      <pubDate>Thu, 07 Sep 2017 10:33:50 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Enterprise-Guide/Macro-iteration-on-two-variables/m-p/393816#M25376</guid>
      <dc:creator>RW9</dc:creator>
      <dc:date>2017-09-07T10:33:50Z</dc:date>
    </item>
    <item>
      <title>Re: Macro iteration on two variables</title>
      <link>https://communities.sas.com/t5/SAS-Enterprise-Guide/Macro-iteration-on-two-variables/m-p/393836#M25377</link>
      <description>&lt;P&gt;Possibly you are getting the error for specifying 3 parameters when calling %MY_TABLE since the macro definition only allows for 2 parameters. &amp;nbsp;(I guess it's possible that this isn't really the issue and that you simplified the post, and that &amp;amp;K is needed to name the output table from SQL.)&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;While it's true that we need more info to see why you got no tables, your original logic would only create one table at most. &amp;nbsp;Consider your loops:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;%do %while (&amp;amp;ti = 5);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;%my_table(&amp;amp;ti, &amp;amp;pi, &amp;amp;k);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;%let k=%eval(&amp;amp;k+1);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let t=%eval(&amp;amp;t+1);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;%let ti=%scan(&amp;amp;month,&amp;amp;k);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let pi=%scan(&amp;amp;year,&amp;amp;t);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;%end;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;After one iteration, &amp;amp;TI is no longer equal to 5, so the loop is over. &amp;nbsp;A much simpler logic is possible, which also replaces the assignments that appear before the loop:&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;%do k=1 %to 5;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp;%let ti = %scan(&amp;amp;month, &amp;amp;k);&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp;%let pi = %scan(&amp;amp;year, &amp;amp;k);&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp;%my_table (&amp;amp;ti, &amp;amp;pi)&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;%end;&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Thu, 07 Sep 2017 11:17:42 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Enterprise-Guide/Macro-iteration-on-two-variables/m-p/393836#M25377</guid>
      <dc:creator>Astounding</dc:creator>
      <dc:date>2017-09-07T11:17:42Z</dc:date>
    </item>
    <item>
      <title>Re: Macro iteration on two variables</title>
      <link>https://communities.sas.com/t5/SAS-Enterprise-Guide/Macro-iteration-on-two-variables/m-p/395499#M25458</link>
      <description>&lt;P&gt;This is what I have right now:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;%let month=199 187 175 163 151;&lt;BR /&gt;%let year=16 15 14 13 12;&lt;BR /&gt;&lt;BR /&gt;%macro my_table(month, year);&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;proc sql;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;create table WANT as&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;select t2.var1,&lt;BR /&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;t2.var2,&lt;BR /&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;t2.var3&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;from TABLE2 t2 inner join TABLE1 t1 on ((input(t2.var3,z10.0)) = t1.var3)&lt;BR /&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;where t2.mnth = &amp;amp;month and t2.var3 ne 0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;quit;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;proc sql;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;create table WANT_&amp;amp;year as&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;select t1.var1,&lt;BR /&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;t1.var2,&lt;BR /&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;t1.var3,&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;(intck('year',(datepart(t2.var4)), (datepart(t2.var5)), 'c')) as yrs_&amp;amp;year,&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;calculated yrs_&amp;amp;year + (intck('month',intnx('year', datepart(t2.var6), calculated yrs_&amp;amp;year, 's'), (datepart(t2.var7)), 'c')/12) as ttm_&amp;amp;year&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;from work.TABLE4 t1 inner join work.TABLE3 t2 on (t1.var8=t2.var8 and t1.var9=t2.var9);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;quit;&lt;BR /&gt;&lt;BR /&gt;%mend my_table;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;%macro preparation_table;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;%let k=1;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let t=1;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;%let ti=%scan(&amp;amp;month,&amp;amp;k);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let pi=%scan(&amp;amp;year,&amp;amp;t);&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;%do %while (&amp;amp;ti &amp;lt; 5);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;%my_table(&amp;amp;ti, &amp;amp;pi);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;%let k=%eval(&amp;amp;k+1);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let t=%eval(&amp;amp;t+1);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;%let ti=%scan(&amp;amp;month,&amp;amp;k);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let pi=%scan(&amp;amp;year,&amp;amp;t);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;%end;&lt;BR /&gt;%mend preparation_table;&lt;BR /&gt;&lt;BR /&gt;%preparation_table;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;With added&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;options mlogic mprint symbolgen source source2;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I get following:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;MLOGIC(_EG_RESTORENOTESANDSOURCE):&amp;nbsp; Beginning execution.&lt;BR /&gt;MLOGIC(_EG_RESTORENOTESANDSOURCE):&amp;nbsp; %GLOBAL&amp;nbsp; _EGNOTES&lt;BR /&gt;MLOGIC(_EG_RESTORENOTESANDSOURCE):&amp;nbsp; %GLOBAL&amp;nbsp; _EGSOURCE&lt;BR /&gt;SYMBOLGEN:&amp;nbsp; Macro variable _EGNOTES resolves to NOTES&lt;BR /&gt;MPRINT(_EG_RESTORENOTESANDSOURCE):&amp;nbsp;&amp;nbsp; options NOTES;&lt;BR /&gt;SYMBOLGEN:&amp;nbsp; Macro variable _EGSOURCE resolves to SOURCE&lt;BR /&gt;MPRINT(_EG_RESTORENOTESANDSOURCE):&amp;nbsp;&amp;nbsp; options SOURCE;&lt;BR /&gt;MLOGIC(_EG_RESTORENOTESANDSOURCE):&amp;nbsp; Ending execution.&lt;BR /&gt;118&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;119&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;120&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %_eg_hidenotesandsource;&lt;BR /&gt;MLOGIC(_EG_HIDENOTESANDSOURCE):&amp;nbsp; Beginning execution.&lt;BR /&gt;MLOGIC(_EG_HIDENOTESANDSOURCE):&amp;nbsp; %GLOBAL&amp;nbsp; _EGNOTES&lt;BR /&gt;MLOGIC(_EG_HIDENOTESANDSOURCE):&amp;nbsp; %GLOBAL&amp;nbsp; _EGSOURCE&lt;BR /&gt;MLOGIC(_EG_HIDENOTESANDSOURCE):&amp;nbsp; %LET (variable name is _EGNOTES)&lt;BR /&gt;MPRINT(_EG_HIDENOTESANDSOURCE):&amp;nbsp;&amp;nbsp; options nonotes;&lt;BR /&gt;MLOGIC(_EG_HIDENOTESANDSOURCE):&amp;nbsp; %LET (variable name is _EGSOURCE)&lt;BR /&gt;MPRINT(_EG_HIDENOTESANDSOURCE):&amp;nbsp;&amp;nbsp; options nosource;&lt;BR /&gt;MLOGIC(_EG_HIDENOTESANDSOURCE):&amp;nbsp; Ending execution.&lt;BR /&gt;MLOGIC(_EG_RESTORENOTESANDSOURCE):&amp;nbsp; Beginning execution.&lt;BR /&gt;MLOGIC(_EG_RESTORENOTESANDSOURCE):&amp;nbsp; %GLOBAL&amp;nbsp; _EGNOTES&lt;BR /&gt;MLOGIC(_EG_RESTORENOTESANDSOURCE):&amp;nbsp; %GLOBAL&amp;nbsp; _EGSOURCE&lt;BR /&gt;SYMBOLGEN:&amp;nbsp; Macro variable _EGNOTES resolves to NOTES&lt;BR /&gt;MPRINT(_EG_RESTORENOTESANDSOURCE):&amp;nbsp;&amp;nbsp; options NOTES;&lt;BR /&gt;SYMBOLGEN:&amp;nbsp; Macro variable _EGSOURCE resolves to SOURCE&lt;BR /&gt;MPRINT(_EG_RESTORENOTESANDSOURCE):&amp;nbsp;&amp;nbsp; options SOURCE;&lt;BR /&gt;MLOGIC(_EG_RESTORENOTESANDSOURCE):&amp;nbsp; Ending execution.&lt;/P&gt;</description>
      <pubDate>Wed, 13 Sep 2017 12:40:54 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Enterprise-Guide/Macro-iteration-on-two-variables/m-p/395499#M25458</guid>
      <dc:creator>D-e-e</dc:creator>
      <dc:date>2017-09-13T12:40:54Z</dc:date>
    </item>
    <item>
      <title>Re: Macro iteration on two variables</title>
      <link>https://communities.sas.com/t5/SAS-Enterprise-Guide/Macro-iteration-on-two-variables/m-p/395503#M25459</link>
      <description>&lt;P&gt;And my post remains the same.&lt;/P&gt;</description>
      <pubDate>Wed, 13 Sep 2017 12:43:52 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Enterprise-Guide/Macro-iteration-on-two-variables/m-p/395503#M25459</guid>
      <dc:creator>RW9</dc:creator>
      <dc:date>2017-09-13T12:43:52Z</dc:date>
    </item>
    <item>
      <title>Re: Macro iteration on two variables</title>
      <link>https://communities.sas.com/t5/SAS-Enterprise-Guide/Macro-iteration-on-two-variables/m-p/395504#M25460</link>
      <description>&lt;P&gt;As you can see I cannot use&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;do month=1 to 5&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;because I don't have months listed like 1, 2, 3, 4, 5.&lt;/P&gt;</description>
      <pubDate>Wed, 13 Sep 2017 12:45:59 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Enterprise-Guide/Macro-iteration-on-two-variables/m-p/395504#M25460</guid>
      <dc:creator>D-e-e</dc:creator>
      <dc:date>2017-09-13T12:45:59Z</dc:date>
    </item>
    <item>
      <title>Re: Macro iteration on two variables</title>
      <link>https://communities.sas.com/t5/SAS-Enterprise-Guide/Macro-iteration-on-two-variables/m-p/395518#M25462</link>
      <description>&lt;P&gt;Well, a brief check of the documentation and:&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;do month=199,187,175,16,151;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;do year=16,15,14,13,12;&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Wed, 13 Sep 2017 12:59:55 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Enterprise-Guide/Macro-iteration-on-two-variables/m-p/395518#M25462</guid>
      <dc:creator>RW9</dc:creator>
      <dc:date>2017-09-13T12:59:55Z</dc:date>
    </item>
    <item>
      <title>Re: Macro iteration on two variables</title>
      <link>https://communities.sas.com/t5/SAS-Enterprise-Guide/Macro-iteration-on-two-variables/m-p/395525#M25464</link>
      <description>&lt;P&gt;Don't make life harder by coding your own increments for an iterative loop counter.&lt;/P&gt;
&lt;P&gt;Just use an iterative %DO loop do and SAS will automatically increment the index variable for you.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;%let monthlist=199 187 175 163 151;
%let yearlist=16 15 14 13 12;
%do item=1 to %sysfunc(countw(&amp;amp;monthlist));
   %let month=%scan(&amp;amp;monthlist,&amp;amp;item);
   %let year=%scan(&amp;amp;yearlist,&amp;amp;item);
   ... code that references &amp;amp;YEAR and &amp;amp;MONTH
%end;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;So let's recode your inner macro a little. Mainly let's change the output table names so that they are unique. &amp;nbsp;But we can also eliminate a lot of the extra complexity by using the DTYEAR and DTMONTH intervals instead of having to convert your datetime values to dates.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;%macro my_table(month, year);

proc sql noprint;
create table WANT_MONTH_&amp;amp;month as
select t2.var1
     , t2.var2
     , t2.var3
from TABLE2 t2 
inner join TABLE1 t1 
on input(t2.var3,10.) = t1.var3
where t2.mnth = &amp;amp;month and t2.var3 ne 0
;

create table WANT_YEAR_&amp;amp;year as
select t1.var1
     , t1.var2
     , t1.var3
     , intck('dtyear',t2.var4,t2.var5,'c') as yrs_&amp;amp;year
     , calculated yrs_&amp;amp;year 
       + intck('dtmonth',intnx('dtyear',t2.var6,calculated yrs_&amp;amp;year,'s'),t2.var7,'c')/12 
      as ttm_&amp;amp;year
from work.TABLE4 t1 
inner join work.TABLE3 t2 
on t1.var8=t2.var8 and t1.var9=t2.var9
;

quit;

%mend my_table;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;So now your outer macro can look like this&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;%macro preparation_table(monthlist,yearlist);
%local i ;
%do i=1 %to %sysfunc(countw(&amp;amp;monthlist));
  %my_table(month=%scan(&amp;amp;monthlist,&amp;amp;i),year=%scan(&amp;amp;yearlist,&amp;amp;i))
%end;
%mend preparation_table;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;So you can now call it like this:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;%preparation_table(monthlist=199 187 175 163 151,yearlist=16 15 14 13 12)
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Or if you prefer you can reference your macro varaibles.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;%let month=199 187 175 163 151;
%let year=16 15 14 13 12;
%preparation_table(monthlist=&amp;amp;month,yearlist=&amp;amp;year)
&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Wed, 13 Sep 2017 13:14:09 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Enterprise-Guide/Macro-iteration-on-two-variables/m-p/395525#M25464</guid>
      <dc:creator>Tom</dc:creator>
      <dc:date>2017-09-13T13:14:09Z</dc:date>
    </item>
    <item>
      <title>Re: Macro iteration on two variables</title>
      <link>https://communities.sas.com/t5/SAS-Enterprise-Guide/Macro-iteration-on-two-variables/m-p/395539#M25466</link>
      <description>&lt;BLOCKQUOTE&gt;&lt;HR /&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/151498"&gt;@D-e-e&lt;/a&gt; wrote:&lt;BR /&gt;
&lt;P&gt;I have defined two macro variables, both of them have 5 values, e.g. %month = 5 4 3 2 1 and %year = 20 19 18 17 16.&lt;/P&gt;
&lt;P&gt;...&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Now I need to define macro which will iterate this process and create 5 tables. In every table I need to have pairs: Mnt=5 &amp;amp; Yr=20,&amp;nbsp; Mnt=4 &amp;amp; Yr=19, etc. This is how I have written macro:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;%macro preparation_table;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;%let k=1;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let t=1;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;%let ti=%scan(&amp;amp;month,&amp;amp;k);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let pi=%scan(&amp;amp;year,&amp;amp;t);&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;%do %while (&amp;amp;ti = 5);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;%my_table(&amp;amp;ti, &amp;amp;pi, &amp;amp;k);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;%let k=%eval(&amp;amp;k+1);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let t=%eval(&amp;amp;t+1);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;%let ti=%scan(&amp;amp;month,&amp;amp;k);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let pi=%scan(&amp;amp;year,&amp;amp;t);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;%end;&lt;BR /&gt;%mend preparation_table;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
...
&lt;P&gt;with no result, i.e. no tables created. Please help.&lt;/P&gt;
&lt;HR /&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Your inner %DO %WHILE() condition looks wrong. You are testing the value of the variable that has the month number, not the variable that has the index into the list of months. &amp;nbsp;So if the first month in the list of months is not exactly 5 then that loop never runs. &amp;nbsp;And if it is 5 but the next one isn't then it runs only once.&lt;/P&gt;</description>
      <pubDate>Wed, 13 Sep 2017 13:31:47 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Enterprise-Guide/Macro-iteration-on-two-variables/m-p/395539#M25466</guid>
      <dc:creator>Tom</dc:creator>
      <dc:date>2017-09-13T13:31:47Z</dc:date>
    </item>
    <item>
      <title>Re: Macro iteration on two variables</title>
      <link>https://communities.sas.com/t5/SAS-Enterprise-Guide/Macro-iteration-on-two-variables/m-p/395554#M25468</link>
      <description>&lt;P&gt;And magic happened :))&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thank you very much!&lt;/P&gt;</description>
      <pubDate>Wed, 13 Sep 2017 14:33:55 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Enterprise-Guide/Macro-iteration-on-two-variables/m-p/395554#M25468</guid>
      <dc:creator>D-e-e</dc:creator>
      <dc:date>2017-09-13T14:33:55Z</dc:date>
    </item>
  </channel>
</rss>

