<?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: Concatenate multiple tables - macro loop in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Concatenate-multiple-tables-macro-loop/m-p/624858#M184115</link>
    <description>&lt;P&gt;There may not be any need for a macro loop if your sets follow a standard naming convention as this appears to use.&lt;/P&gt;
&lt;P&gt;The SET statement will accept LISTS.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Example&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;data want;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; set lib.dataxn: ;&lt;/P&gt;
&lt;P&gt;would concatenate all the data sets in the given library whose names start with DATAXN that is what the colon indicates.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Or you can specify a range:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;data want;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; set lib.data20190101 - lib.data20190515;&lt;/P&gt;
&lt;P&gt;Assuming that the two named sets exist then you would get those two plus any of the names that occur between. Caution: short names might get included.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;So to combine sets of a given year:&lt;/P&gt;
&lt;P&gt;data want;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; set tab2019: ;&lt;/P&gt;
&lt;P&gt;would get all of your current 2019 sets.&lt;/P&gt;
&lt;P&gt;And multiple years could be&lt;/P&gt;
&lt;P&gt;data want;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; set tab2018: tab2019: tab2020: ;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Fri, 14 Feb 2020 15:14:08 GMT</pubDate>
    <dc:creator>ballardw</dc:creator>
    <dc:date>2020-02-14T15:14:08Z</dc:date>
    <item>
      <title>Concatenate multiple tables - macro loop</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Concatenate-multiple-tables-macro-loop/m-p/624856#M184114</link>
      <description>&lt;P&gt;I want to concatenate tables, which names look like: tab_yyyymm&lt;/P&gt;&lt;P&gt;I write macro:&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;%macro pol_kol(data_p,period);
data tab_all;
set
	%do i=1 %to %sysevalf(&amp;amp;period);
			%let data_n = %sysfunc(inputn(&amp;amp;data_p,yymmn6.));
			%let data= %sysfunc(intnx(month,&amp;amp;data_n,&amp;amp;i),yymmn6.);
			tab_&amp;amp;data.
	%end;
;
by a b;
run;
%mend;

%pol_kol(201812,14);&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;And it works.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I want add a condition, which depends on actual date.&lt;/P&gt;&lt;P&gt;If I make:%pol_kol(201812,25), there will be a mistake.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The last table which is now available is tab_202001 (it appeared about 5thFeb-10thFeb)&amp;nbsp;and of course there are previous ones (tab_201912, tab_201911 etc.). Every month the new table appears.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I try add condition and loop:&lt;/P&gt;&lt;P&gt;&lt;FONT color="#0000ff" face="Courier New" size="2"&gt;%let&lt;/FONT&gt;&lt;FONT face="Courier New" size="2"&gt; month = &lt;/FONT&gt;&lt;FONT color="#0000ff" face="Courier New" size="2"&gt;%sysfunc&lt;/FONT&gt;&lt;FONT face="Courier New" size="2"&gt;(month(&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Courier New" size="2"&gt;%sysfunc&lt;/FONT&gt;&lt;FONT face="Courier New" size="2"&gt;(inputn(&amp;amp;sysdate,yymmn6.))));&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT face="Courier New" size="2"&gt;and similar one for a year.&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#0000ff" face="Courier New" size="2"&gt;%do&lt;/FONT&gt; &lt;FONT color="#0000ff" face="Courier New" size="2"&gt;%until&lt;/FONT&gt;&lt;FONT face="Courier New" size="2"&gt;(&amp;amp;data&amp;lt;= &lt;/FONT&gt;&lt;FONT color="#0000ff" face="Courier New" size="2"&gt;%eval&lt;/FONT&gt;&lt;FONT face="Courier New" size="2"&gt;((&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Courier New" size="2"&gt;%eval&lt;/FONT&gt;&lt;FONT face="Courier New" size="2"&gt;(&amp;amp;year*&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="2"&gt;100&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="2"&gt;))+(&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Courier New" size="2"&gt;%eval&lt;/FONT&gt;&lt;FONT face="Courier New" size="2"&gt;(&amp;amp;month-&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="2"&gt;1&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="2"&gt;))));&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT face="Courier New" size="2"&gt;tab_&amp;amp;&lt;/FONT&gt;&lt;FONT color="#008080" face="Courier New" size="2"&gt;data.&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#0000ff" face="Courier New" size="2"&gt;%end&lt;/FONT&gt;&lt;FONT face="Courier New" size="2"&gt;;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT face="Courier New" size="2"&gt;But it doesn't work. &lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT face="Courier New" size="2"&gt;Could you tell me&amp;nbsp;where is a mistake and what I should correct?&amp;nbsp;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Fri, 14 Feb 2020 15:06:35 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Concatenate-multiple-tables-macro-loop/m-p/624856#M184114</guid>
      <dc:creator>MargoBlue</dc:creator>
      <dc:date>2020-02-14T15:06:35Z</dc:date>
    </item>
    <item>
      <title>Re: Concatenate multiple tables - macro loop</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Concatenate-multiple-tables-macro-loop/m-p/624858#M184115</link>
      <description>&lt;P&gt;There may not be any need for a macro loop if your sets follow a standard naming convention as this appears to use.&lt;/P&gt;
&lt;P&gt;The SET statement will accept LISTS.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Example&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;data want;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; set lib.dataxn: ;&lt;/P&gt;
&lt;P&gt;would concatenate all the data sets in the given library whose names start with DATAXN that is what the colon indicates.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Or you can specify a range:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;data want;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; set lib.data20190101 - lib.data20190515;&lt;/P&gt;
&lt;P&gt;Assuming that the two named sets exist then you would get those two plus any of the names that occur between. Caution: short names might get included.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;So to combine sets of a given year:&lt;/P&gt;
&lt;P&gt;data want;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; set tab2019: ;&lt;/P&gt;
&lt;P&gt;would get all of your current 2019 sets.&lt;/P&gt;
&lt;P&gt;And multiple years could be&lt;/P&gt;
&lt;P&gt;data want;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; set tab2018: tab2019: tab2020: ;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Fri, 14 Feb 2020 15:14:08 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Concatenate-multiple-tables-macro-loop/m-p/624858#M184115</guid>
      <dc:creator>ballardw</dc:creator>
      <dc:date>2020-02-14T15:14:08Z</dc:date>
    </item>
    <item>
      <title>Re: Concatenate multiple tables - macro loop</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Concatenate-multiple-tables-macro-loop/m-p/624859#M184116</link>
      <description>&lt;P&gt;Sounds like you just want to check if the table exists before including it. Also move the constant code out of the loop.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;%macro pol_kol(data_p,period);
%local i date_n dataset ;
%let data_n = %sysfunc(inputn(&amp;amp;data_p,yymmn6.));

data tab_all;
  set
%do i=1 %to %sysevalf(&amp;amp;period);
  %let dataset = tab_%sysfunc(intnx(month,&amp;amp;data_n,&amp;amp;i),yymmn6.);
  %if %sysfunc(exist(&amp;amp;dataset)) %then &amp;amp;dataset ;
%end;
  ;
  by a b;
run;
%mend pol_kol;

%pol_kol(data_p=201812,period=25)&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Fri, 14 Feb 2020 15:19:38 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Concatenate-multiple-tables-macro-loop/m-p/624859#M184116</guid>
      <dc:creator>Tom</dc:creator>
      <dc:date>2020-02-14T15:19:38Z</dc:date>
    </item>
  </channel>
</rss>

