<?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: Macro for one table join with multiple tables in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Macro-for-one-table-join-with-multiple-tables/m-p/750912#M236281</link>
    <description>&lt;P&gt;Hi Chris,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thank you Chris, how can I get 10 separate tables after inner join with the PRODUCT table?&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Tue, 29 Jun 2021 07:21:08 GMT</pubDate>
    <dc:creator>amandahe</dc:creator>
    <dc:date>2021-06-29T07:21:08Z</dc:date>
    <item>
      <title>Macro for one table join with multiple tables</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Macro-for-one-table-join-with-multiple-tables/m-p/750903#M236275</link>
      <description>&lt;P&gt;Hello,&lt;/P&gt;&lt;P&gt;I have one table which is a fixed table has 4 columns, ID, date, hour, product, the table name as Product&lt;/P&gt;&lt;P&gt;and I have another 10 tables, which has more columns, ID, date, hour, product, category, subcategory, region. And the 10 tables name as YEAR2021_WW01, YEAR2021_WW02, YEAR2021_WW03...YEAR2020_WW02.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I would like these 10 tables (YEAR2021_WW01...) inner join with Product on a.id=b.id and a.date=b.date and a.hour=b.hour.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;and i want to keep all the columns from table a, and one column "product" from table PODUCT, then output the 10 tables with the same table name(YEAR2021_WW01, YEAR2021_WW02, YEAR2021_WW03...YEAR2020_WW02).&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I write a proc sql just for joining one table,&lt;/P&gt;&lt;P&gt;proc sql;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#0000FF"&gt;create table&lt;/FONT&gt; YEAR2021_WW01 &lt;FONT color="#0000FF"&gt;as&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#0000FF"&gt;select&lt;/FONT&gt; a*, b.Product&lt;/P&gt;&lt;P&gt;&lt;FONT color="#0000FF"&gt;from&lt;/FONT&gt;&amp;nbsp;YEAR2021_WW01 a &lt;FONT color="#0000FF"&gt;inner join&lt;/FONT&gt; PRODUCT b &lt;FONT color="#0000FF"&gt;on&lt;/FONT&gt; (a.id=b.id &lt;FONT color="#0000FF"&gt;and&lt;/FONT&gt; a.date=b.date &lt;FONT color="#0000FF"&gt;and&lt;/FONT&gt; a.hour=b.hour)&lt;/P&gt;&lt;P&gt;quit;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;U&gt;How to write a macro to join the 10 tables at once?&lt;/U&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;PRODUCT&lt;/P&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;ID&lt;/TD&gt;&lt;TD&gt;DATE&lt;/TD&gt;&lt;TD&gt;HOUR&lt;/TD&gt;&lt;TD&gt;PRODUCT&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1001&lt;/TD&gt;&lt;TD&gt;01JAN2021&lt;/TD&gt;&lt;TD&gt;8&lt;/TD&gt;&lt;TD&gt;CAMBRIDGE&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1002&lt;/TD&gt;&lt;TD&gt;15JAN2021&lt;/TD&gt;&lt;TD&gt;16&lt;/TD&gt;&lt;TD&gt;SUMMERSET&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;YEAR2021_WW01&lt;/P&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;ID&lt;/TD&gt;&lt;TD&gt;DATE&lt;/TD&gt;&lt;TD&gt;HOUR&lt;/TD&gt;&lt;TD&gt;STATUS&lt;/TD&gt;&lt;TD&gt;MOOD&lt;/TD&gt;&lt;TD&gt;REGION&lt;/TD&gt;&lt;TD&gt;CATEGORY&lt;/TD&gt;&lt;TD&gt;SUBCATEGORY&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1001&lt;/TD&gt;&lt;TD&gt;01JAN2021&lt;/TD&gt;&lt;TD&gt;8&lt;/TD&gt;&lt;TD&gt;NORMAL&lt;/TD&gt;&lt;TD&gt;TRUE&lt;/TD&gt;&lt;TD&gt;PARIS&lt;/TD&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;TD&gt;AA&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1002&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;15JAN2021&lt;/TD&gt;&lt;TD&gt;16&lt;/TD&gt;&lt;TD&gt;NORMAL&lt;/TD&gt;&lt;TD&gt;TRUE&lt;/TD&gt;&lt;TD&gt;PARIS&lt;/TD&gt;&lt;TD&gt;B&lt;/TD&gt;&lt;TD&gt;BB&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 29 Jun 2021 03:33:42 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Macro-for-one-table-join-with-multiple-tables/m-p/750903#M236275</guid>
      <dc:creator>amandahe</dc:creator>
      <dc:date>2021-06-29T03:33:42Z</dc:date>
    </item>
    <item>
      <title>Re: Macro for one table join with multiple tables</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Macro-for-one-table-join-with-multiple-tables/m-p/750905#M236277</link>
      <description>&lt;P&gt;Assuming that the year-tables have the same variables. this looks like suboptimal data-design, so i would append them into one table (or view). Afterwards you need only one merge. If you really want to write a macro, start with working code to do one merge and you should not use proc sql, but a data step to avoid the warning:&lt;/P&gt;
&lt;PRE&gt;WARNING: This CREATE TABLE statement recursively references the target table. A consequence of this is a possible data integrity 
         problem.&lt;/PRE&gt;
&lt;P&gt;Note: Overwriting an existing dataset during merge etc. is a bad idea, because you can't repeat the step if something goes wrong, you have to repeat all steps necessary to re-create the overwritten dataset.&lt;/P&gt;</description>
      <pubDate>Tue, 29 Jun 2021 04:49:54 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Macro-for-one-table-join-with-multiple-tables/m-p/750905#M236277</guid>
      <dc:creator>andreas_lds</dc:creator>
      <dc:date>2021-06-29T04:49:54Z</dc:date>
    </item>
    <item>
      <title>Re: Macro for one table join with multiple tables</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Macro-for-one-table-join-with-multiple-tables/m-p/750907#M236278</link>
      <description>&lt;P&gt;No macro needed. Something like&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;proc sql;
  create table WANT as
  select a.*, b.PRODUCT
  from (select * from YEAR2021_WW01
            union
             ....
       select * from YEAR2021_WW10)  a
    inner join PRODUCT b 
  on (a.ID=b.ID and a.DATE=b.DATE and a.HOUR=b.HOUR);
quit;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 29 Jun 2021 05:14:22 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Macro-for-one-table-join-with-multiple-tables/m-p/750907#M236278</guid>
      <dc:creator>ChrisNZ</dc:creator>
      <dc:date>2021-06-29T05:14:22Z</dc:date>
    </item>
    <item>
      <title>Re: Macro for one table join with multiple tables</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Macro-for-one-table-join-with-multiple-tables/m-p/750912#M236281</link>
      <description>&lt;P&gt;Hi Chris,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thank you Chris, how can I get 10 separate tables after inner join with the PRODUCT table?&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 29 Jun 2021 07:21:08 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Macro-for-one-table-join-with-multiple-tables/m-p/750912#M236281</guid>
      <dc:creator>amandahe</dc:creator>
      <dc:date>2021-06-29T07:21:08Z</dc:date>
    </item>
    <item>
      <title>Re: Macro for one table join with multiple tables</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Macro-for-one-table-join-with-multiple-tables/m-p/750915#M236284</link>
      <description>&lt;P&gt;So you do a basic lookup on three keys to get the name of product; Do this with a hash object:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data product;
input ID $ DATE :date9. HOUR  PRODUCT :$10.;
format date yymmdd10.;
datalines;
1001  01JAN2021 8 CAMBRIDGE
1002  15JAN2021 16  SUMMERSET
;

data YEAR2021_WW01;
input ID $ DATE :date9. HOUR STATUS $ MOOD $ REGION $ CATEGORY $ SUBCATEGORY $;
format date yymmdd10.;
datalines;
1001  01JAN2021 8 NORMAL  TRUE  PARIS A AA
1002   15JAN2021  16  NORMAL  TRUE  PARIS B BB
;

data want;
set YEAR2021_WW01;
if _n_ = 1
then do;
  length product $10;
  declare hash p (dataset:"product");
  p.definekey("ID","DATE","HOUR");
  p.definedata("product");
  p.definedone();
  call missing(product);
end;
if p.find() = 0;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;You simply add all table names to the SET statement.&lt;/P&gt;</description>
      <pubDate>Tue, 29 Jun 2021 07:40:12 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Macro-for-one-table-join-with-multiple-tables/m-p/750915#M236284</guid>
      <dc:creator>Kurt_Bremser</dc:creator>
      <dc:date>2021-06-29T07:40:12Z</dc:date>
    </item>
    <item>
      <title>Re: Macro for one table join with multiple tables</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Macro-for-one-table-join-with-multiple-tables/m-p/750936#M236291</link>
      <description>&lt;P&gt;Why use 10 tables rather than a where clause?&lt;/P&gt;</description>
      <pubDate>Tue, 29 Jun 2021 10:31:14 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Macro-for-one-table-join-with-multiple-tables/m-p/750936#M236291</guid>
      <dc:creator>ChrisNZ</dc:creator>
      <dc:date>2021-06-29T10:31:14Z</dc:date>
    </item>
  </channel>
</rss>

