<?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: Conditional Merge (or conditional join [SQL]) on two tables in SAS Procedures</title>
    <link>https://communities.sas.com/t5/SAS-Procedures/Conditional-Merge-or-conditional-join-SQL-on-two-tables/m-p/109781#M30513</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Exactly what I was looking for.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thank you very much!!!!&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Tue, 17 Jul 2012 18:28:25 GMT</pubDate>
    <dc:creator>nicnad</dc:creator>
    <dc:date>2012-07-17T18:28:25Z</dc:date>
    <item>
      <title>Conditional Merge (or conditional join [SQL]) on two tables</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Conditional-Merge-or-conditional-join-SQL-on-two-tables/m-p/109776#M30508</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I am new to SAS and SQL query so I am asking for your help to solve my problem.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I have two tables. Each tables have only alphanumerical data. The first table is missing data in some column. The other table is not missing any data. Lets says the tables are named Table1 and Table2.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;They look like the following :&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Table1&lt;/P&gt;&lt;TABLE border="1" class="jiveBorder" style="BORDER-BOTTOM: #000000 1px solid; BORDER-LEFT: #000000 1px solid; WIDTH: 100%; BORDER-TOP: #000000 1px solid; BORDER-RIGHT: #000000 1px solid;"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TH style="text-align: center; background-color: #6690bc; color: #ffffff; padding: 2px;"&gt;&lt;STRONG&gt;Name&lt;/STRONG&gt;&lt;/TH&gt;&lt;TH style="text-align: center; background-color: #6690bc; color: #ffffff; padding: 2px;"&gt;&lt;STRONG&gt;Info1&lt;/STRONG&gt;&lt;/TH&gt;&lt;TH style="text-align: center; background-color: #6690bc; color: #ffffff; padding: 2px;"&gt;&lt;STRONG&gt;Info2&lt;/STRONG&gt;&lt;/TH&gt;&lt;TH style="text-align: center; background-color: #6690bc; color: #ffffff; padding: 2px;"&gt;&lt;STRONG&gt;Info3&lt;/STRONG&gt;&lt;/TH&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px;"&gt;John&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;a&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px;"&gt;Paul&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;bb&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;cc&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px;"&gt;George&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;aaa&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;ccc&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px;"&gt;Adam&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;aaaa&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;bbbb&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px;"&gt;Brian&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;cccc&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Table2&lt;/P&gt;&lt;TABLE border="1" class="jiveBorder" style="BORDER-BOTTOM: #000000 1px solid; BORDER-LEFT: #000000 1px solid; WIDTH: 100%; BORDER-TOP: #000000 1px solid; BORDER-RIGHT: #000000 1px solid;"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TH style="text-align: center; background-color: #6690bc; color: #ffffff; padding: 2px;"&gt;&lt;STRONG&gt;Info1&lt;/STRONG&gt;&lt;/TH&gt;&lt;TH style="text-align: center; background-color: #6690bc; color: #ffffff; padding: 2px;"&gt;&lt;STRONG&gt;Info2&lt;/STRONG&gt;&lt;/TH&gt;&lt;TH style="text-align: center; background-color: #6690bc; color: #ffffff; padding: 2px;"&gt;&lt;STRONG&gt;Info3&lt;/STRONG&gt;&lt;/TH&gt;&lt;TH style="text-align: center; background-color: #6690bc; color: #ffffff; padding: 2px;"&gt;&lt;STRONG&gt;Value1&lt;/STRONG&gt;&lt;/TH&gt;&lt;TH style="text-align: center; background-color: #6690bc; color: #ffffff; padding: 2px;"&gt;&lt;STRONG&gt;Value2&lt;/STRONG&gt;&lt;/TH&gt;&lt;TH style="text-align: center; background-color: #6690bc; color: #ffffff; padding: 2px;"&gt;&lt;STRONG&gt;Value3&lt;/STRONG&gt;&lt;/TH&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px;"&gt;a&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;b&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;c&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;ddd&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;e&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;f&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px;"&gt;aa&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;bb&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;cc&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;jj&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;kk&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;ll&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px;"&gt;aaa&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;bbb&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;ccc&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;u&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;i&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;z&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px;"&gt;aaaa&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;bbbb&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;cccc&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;nn&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;bbaq&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;vvvv&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;What I would like to do is do is to merge both table based on the info1 or info2 or info3 and return the name with value1, value2, value 3&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I really don't know how to write this in SAS or SQL, but I am sure this could be done.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I see the solution as being nested IFs (or CASE) statement where the value1, value2 and value3 are returned if there is a matched based on the info from Table1.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;IF info1 is not null; do the merge with info1 ELSE do the merge with info2&lt;/P&gt;&lt;P&gt;IF info2 is null ; do the merge info 3&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The end result would be :&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;TABLE border="1" class="jiveBorder" style="width: 100%; border: #000000 1px solid;"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TH style="text-align: center; background-color: #6690bc; color: #ffffff; padding: 2px;"&gt;&lt;STRONG&gt;Name&lt;/STRONG&gt;&lt;/TH&gt;&lt;TH style="text-align: center; background-color: #6690bc; color: #ffffff; padding: 2px;"&gt;&lt;STRONG&gt;Value1&lt;/STRONG&gt;&lt;/TH&gt;&lt;TH style="text-align: center; background-color: #6690bc; color: #ffffff; padding: 2px;"&gt;&lt;STRONG&gt;Value2&lt;/STRONG&gt;&lt;/TH&gt;&lt;TH style="text-align: center; background-color: #6690bc; color: #ffffff; padding: 2px;"&gt;&lt;STRONG&gt;Value3&lt;/STRONG&gt;&lt;/TH&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px;"&gt;John&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;ddd&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;e&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;f&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px;"&gt;Paul&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;jj&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;kk&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;ll&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px;"&gt;George&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;u&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;i&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;z&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px;"&gt;Adam&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;nn&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;bbaq&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;ww&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px;"&gt;Brian&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;nn&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;bbaq&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;ww&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; P.S. The data used is only there for example purpose, it the real data it is not sorted or have specific length in any way.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Could you please help me write the proper SAS procedure to create this table? &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thank you very much for your help.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 17 Jul 2012 16:17:53 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Conditional-Merge-or-conditional-join-SQL-on-two-tables/m-p/109776#M30508</guid>
      <dc:creator>nicnad</dc:creator>
      <dc:date>2012-07-17T16:17:53Z</dc:date>
    </item>
    <item>
      <title>Re: Conditional Merge (or conditional join [SQL]) on two tables</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Conditional-Merge-or-conditional-join-SQL-on-two-tables/m-p/109777#M30509</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I know there are definitely slicker solutions out there. But if you need it quick, here is one approach hopefully to get you started. The main idea is to set up index for both data set, so they can merge accordingly.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data h1;&lt;/P&gt;&lt;P&gt;input (Name&amp;nbsp;&amp;nbsp;&amp;nbsp; Info1&amp;nbsp;&amp;nbsp;&amp;nbsp; Info2&amp;nbsp;&amp;nbsp;&amp;nbsp; Info3) (:$10.);&lt;/P&gt;&lt;P&gt;length index $10.;&lt;/P&gt;&lt;P&gt;array ind info1-info3;&lt;/P&gt;&lt;P&gt;do over ind;&lt;/P&gt;&lt;P&gt;&amp;nbsp; if not missing(ind) then do;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; index=cats(vname(ind),'_',ind);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; leave;&lt;/P&gt;&lt;P&gt;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;end;&lt;/P&gt;&lt;P&gt;cards;&lt;/P&gt;&lt;P&gt;John&amp;nbsp;&amp;nbsp;&amp;nbsp; a&amp;nbsp;&amp;nbsp;&amp;nbsp; . .&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;Paul&amp;nbsp;&amp;nbsp;&amp;nbsp; .&amp;nbsp;&amp;nbsp;&amp;nbsp; bb&amp;nbsp;&amp;nbsp;&amp;nbsp; cc&lt;/P&gt;&lt;P&gt;George&amp;nbsp;&amp;nbsp;&amp;nbsp; aaa&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .&amp;nbsp;&amp;nbsp;&amp;nbsp; ccc&lt;/P&gt;&lt;P&gt;Adam&amp;nbsp;&amp;nbsp;&amp;nbsp; aaaa&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bbbb&amp;nbsp;&amp;nbsp;&amp;nbsp; .&lt;/P&gt;&lt;P&gt;Brian&amp;nbsp;&amp;nbsp;&amp;nbsp; . .&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cccc&lt;/P&gt;&lt;P&gt;;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data h2;&lt;/P&gt;&lt;P&gt;input (Info1&amp;nbsp;&amp;nbsp;&amp;nbsp; Info2&amp;nbsp;&amp;nbsp;&amp;nbsp; Info3&amp;nbsp;&amp;nbsp;&amp;nbsp; Value1&amp;nbsp;&amp;nbsp;&amp;nbsp; Value2&amp;nbsp;&amp;nbsp;&amp;nbsp; Value3) (:$8.);&lt;/P&gt;&lt;P&gt;length index $50.;&lt;/P&gt;&lt;P&gt;array ind&amp;nbsp; info1-info3;&lt;/P&gt;&lt;P&gt;&amp;nbsp; do over ind;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; index=cats(vname(ind),'_',ind);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; output;&lt;/P&gt;&lt;P&gt;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;cards;&lt;/P&gt;&lt;P&gt;a&amp;nbsp;&amp;nbsp;&amp;nbsp; b&amp;nbsp;&amp;nbsp;&amp;nbsp; c&amp;nbsp;&amp;nbsp;&amp;nbsp; ddd&amp;nbsp;&amp;nbsp;&amp;nbsp; e&amp;nbsp;&amp;nbsp;&amp;nbsp; f&lt;/P&gt;&lt;P&gt;aa&amp;nbsp;&amp;nbsp;&amp;nbsp; bb&amp;nbsp;&amp;nbsp;&amp;nbsp; cc&amp;nbsp;&amp;nbsp;&amp;nbsp; jj&amp;nbsp;&amp;nbsp;&amp;nbsp; kk&amp;nbsp;&amp;nbsp;&amp;nbsp; ll&lt;/P&gt;&lt;P&gt;aaa&amp;nbsp;&amp;nbsp;&amp;nbsp; bbb&amp;nbsp;&amp;nbsp;&amp;nbsp; ccc&amp;nbsp;&amp;nbsp;&amp;nbsp; u&amp;nbsp;&amp;nbsp;&amp;nbsp; i&amp;nbsp;&amp;nbsp;&amp;nbsp; z&lt;/P&gt;&lt;P&gt;aaaa&amp;nbsp;&amp;nbsp;&amp;nbsp; bbbb&amp;nbsp;&amp;nbsp;&amp;nbsp; cccc&amp;nbsp;&amp;nbsp;&amp;nbsp; nn&amp;nbsp;&amp;nbsp;&amp;nbsp; bbaq&amp;nbsp;&amp;nbsp;&amp;nbsp; vvvv&lt;/P&gt;&lt;P&gt;;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc sql;&lt;/P&gt;&lt;P&gt;select name, value1, value2,value3 from h1 a, h2 b&lt;/P&gt;&lt;P&gt;where a.index=b.index;&lt;/P&gt;&lt;P&gt;quit;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Haikuo&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 17 Jul 2012 17:12:59 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Conditional-Merge-or-conditional-join-SQL-on-two-tables/m-p/109777#M30509</guid>
      <dc:creator>Haikuo</dc:creator>
      <dc:date>2012-07-17T17:12:59Z</dc:date>
    </item>
    <item>
      <title>Re: Conditional Merge (or conditional join [SQL]) on two tables</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Conditional-Merge-or-conditional-join-SQL-on-two-tables/m-p/109778#M30510</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thank you very much for the quick reply.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Like I said before, I am a complete beginner with SAS.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The thing is my two tables are already created and they both contain 2 Millons + rows and 20+ columns each . They are both SAS tables (.sas7bdat)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Is there a way to read the existing tables instead of using cards to declare the variables value (if I understand the code correctly)?&lt;/P&gt;&lt;P&gt;What I would like to do is the code to read the existing variables names (column headers) instead of having to input it myself, then having the program determine the length of the variable and then read each observations (rows) and assign it to an index.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Is this something that can be done in SAS language?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Would the solution be easier in another language? I am&amp;nbsp; using SAS Enterprise Guide 4.1 so any language supported by it would be fine.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Again, thank you for your help and time.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 17 Jul 2012 17:42:34 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Conditional-Merge-or-conditional-join-SQL-on-two-tables/m-p/109778#M30510</guid>
      <dc:creator>nicnad</dc:creator>
      <dc:date>2012-07-17T17:42:34Z</dc:date>
    </item>
    <item>
      <title>Re: Conditional Merge (or conditional join [SQL]) on two tables</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Conditional-Merge-or-conditional-join-SQL-on-two-tables/m-p/109779#M30511</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Are any values of Info1, 2 or 3 duplicated in either table?&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 17 Jul 2012 17:42:49 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Conditional-Merge-or-conditional-join-SQL-on-two-tables/m-p/109779#M30511</guid>
      <dc:creator>ballardw</dc:creator>
      <dc:date>2012-07-17T17:42:49Z</dc:date>
    </item>
    <item>
      <title>Re: Conditional Merge (or conditional join [SQL]) on two tables</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Conditional-Merge-or-conditional-join-SQL-on-two-tables/m-p/109780#M30512</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Replace the input...cards part with a simple 'set' statement:&lt;/P&gt;&lt;P&gt;data h1; &lt;/P&gt;&lt;P&gt;set yourtable1;&lt;/P&gt;&lt;P&gt;length index $10.;&lt;/P&gt;&lt;P&gt;array ind info1-info3;&lt;/P&gt;&lt;P&gt;do over ind;&lt;/P&gt;&lt;P&gt;&amp;nbsp; if not missing(ind) then do;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; index=cats(vname(ind),'_',ind);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; leave;&lt;/P&gt;&lt;P&gt;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;end;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data h2;&lt;/P&gt;&lt;P&gt;set yourtable2;&lt;/P&gt;&lt;P&gt;length index $50.;&lt;/P&gt;&lt;P&gt;array ind&amp;nbsp; info1-info3;&lt;/P&gt;&lt;P&gt;&amp;nbsp; do over ind;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; index=cats(vname(ind),'_',ind);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; output;&lt;/P&gt;&lt;P&gt;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Haikuo&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 17 Jul 2012 17:50:23 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Conditional-Merge-or-conditional-join-SQL-on-two-tables/m-p/109780#M30512</guid>
      <dc:creator>Haikuo</dc:creator>
      <dc:date>2012-07-17T17:50:23Z</dc:date>
    </item>
    <item>
      <title>Re: Conditional Merge (or conditional join [SQL]) on two tables</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Conditional-Merge-or-conditional-join-SQL-on-two-tables/m-p/109781#M30513</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Exactly what I was looking for.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thank you very much!!!!&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 17 Jul 2012 18:28:25 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Conditional-Merge-or-conditional-join-SQL-on-two-tables/m-p/109781#M30513</guid>
      <dc:creator>nicnad</dc:creator>
      <dc:date>2012-07-17T18:28:25Z</dc:date>
    </item>
    <item>
      <title>Re: Conditional Merge (or conditional join [SQL]) on two tables</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Conditional-Merge-or-conditional-join-SQL-on-two-tables/m-p/109782#M30514</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;If you care about speed, Hash table is a good choice.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE&gt;data h1;
input (Name&amp;nbsp;&amp;nbsp;&amp;nbsp; Info1&amp;nbsp;&amp;nbsp;&amp;nbsp; Info2&amp;nbsp;&amp;nbsp;&amp;nbsp; Info3) (:$10.);
cards;
John&amp;nbsp;&amp;nbsp;&amp;nbsp; a&amp;nbsp;&amp;nbsp;&amp;nbsp; . .&amp;nbsp;&amp;nbsp; 
Paul&amp;nbsp;&amp;nbsp;&amp;nbsp; .&amp;nbsp;&amp;nbsp;&amp;nbsp; bb&amp;nbsp;&amp;nbsp;&amp;nbsp; cc
George&amp;nbsp;&amp;nbsp;&amp;nbsp; aaa&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .&amp;nbsp;&amp;nbsp;&amp;nbsp; ccc
Adam&amp;nbsp;&amp;nbsp;&amp;nbsp; aaaa&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bbbb&amp;nbsp;&amp;nbsp;&amp;nbsp; .
Brian&amp;nbsp;&amp;nbsp;&amp;nbsp; . .&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cccc
;
run;

 

data h2;
input (Info1&amp;nbsp;&amp;nbsp;&amp;nbsp; Info2&amp;nbsp;&amp;nbsp;&amp;nbsp; Info3&amp;nbsp;&amp;nbsp;&amp;nbsp; Value1&amp;nbsp;&amp;nbsp;&amp;nbsp; Value2&amp;nbsp;&amp;nbsp;&amp;nbsp; Value3) (:$8.);
cards;
a&amp;nbsp;&amp;nbsp;&amp;nbsp; b&amp;nbsp;&amp;nbsp;&amp;nbsp; c&amp;nbsp;&amp;nbsp;&amp;nbsp; ddd&amp;nbsp;&amp;nbsp;&amp;nbsp; e&amp;nbsp;&amp;nbsp;&amp;nbsp; f
aa&amp;nbsp;&amp;nbsp;&amp;nbsp; bb&amp;nbsp;&amp;nbsp;&amp;nbsp; cc&amp;nbsp;&amp;nbsp;&amp;nbsp; jj&amp;nbsp;&amp;nbsp;&amp;nbsp; kk&amp;nbsp;&amp;nbsp;&amp;nbsp; ll
aaa&amp;nbsp;&amp;nbsp;&amp;nbsp; bbb&amp;nbsp;&amp;nbsp;&amp;nbsp; ccc&amp;nbsp;&amp;nbsp;&amp;nbsp; u&amp;nbsp;&amp;nbsp;&amp;nbsp; i&amp;nbsp;&amp;nbsp;&amp;nbsp; z
aaaa&amp;nbsp;&amp;nbsp;&amp;nbsp; bbbb&amp;nbsp;&amp;nbsp;&amp;nbsp; cccc&amp;nbsp;&amp;nbsp;&amp;nbsp; nn&amp;nbsp;&amp;nbsp;&amp;nbsp; bbaq&amp;nbsp;&amp;nbsp;&amp;nbsp; vvvv
;
run;

data want(keep=name value:);
length info1 - info3 $ 40;
 if _n_ eq 1 then do;
&amp;nbsp;&amp;nbsp;&amp;nbsp; if 0 then set h2;
&amp;nbsp;&amp;nbsp;&amp;nbsp; declare hash ha(hashexp:20);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ha.definekey('key');
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ha.definedata('value1','value2','value3');
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ha.definedone();

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do until(last);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set h2 end=last;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if not missing(info1) then do;key=info1;ha.add(); end;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if not missing(info2) then do;key=info2;ha.add(); end;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if not missing(info3) then do;key=info3;ha.add(); end;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;
end;
call missing(of _all_);
set h1;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if not missing(info1) then do;key=info1; rc=ha.find(); end;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if not missing(info2) then do;key=info2; rc=ha.find(); end;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if not missing(info3) then do;key=info3; rc=ha.find(); end;
run;



&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Ksharp&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 18 Jul 2012 02:33:35 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Conditional-Merge-or-conditional-join-SQL-on-two-tables/m-p/109782#M30514</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2012-07-18T02:33:35Z</dc:date>
    </item>
    <item>
      <title>Re: Conditional Merge (or conditional join [SQL]) on two tables</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Conditional-Merge-or-conditional-join-SQL-on-two-tables/m-p/109783#M30515</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thanks, Ksharp for bringing in the Hash() idea. Actually index can be inserted into hash() implementation to make it less hard coding:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data h1;&lt;/P&gt;&lt;P&gt;input (Name&amp;nbsp;&amp;nbsp;&amp;nbsp; Info1&amp;nbsp;&amp;nbsp;&amp;nbsp; Info2&amp;nbsp;&amp;nbsp;&amp;nbsp; Info3) (:$8.);&lt;/P&gt;&lt;P&gt;cards;&lt;/P&gt;&lt;P&gt;John&amp;nbsp;&amp;nbsp;&amp;nbsp; a&amp;nbsp;&amp;nbsp;&amp;nbsp; . .&amp;nbsp; &lt;/P&gt;&lt;P&gt;Paul&amp;nbsp;&amp;nbsp;&amp;nbsp; .&amp;nbsp;&amp;nbsp;&amp;nbsp; bb&amp;nbsp;&amp;nbsp;&amp;nbsp; cc&lt;/P&gt;&lt;P&gt;George&amp;nbsp;&amp;nbsp;&amp;nbsp; aaa&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .&amp;nbsp;&amp;nbsp;&amp;nbsp; ccc&lt;/P&gt;&lt;P&gt;Adam&amp;nbsp;&amp;nbsp;&amp;nbsp; aaaa&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bbbb&amp;nbsp;&amp;nbsp;&amp;nbsp; .&lt;/P&gt;&lt;P&gt;Brian&amp;nbsp;&amp;nbsp;&amp;nbsp; . .&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cccc&lt;/P&gt;&lt;P&gt;;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data h2;&lt;/P&gt;&lt;P&gt;input (Info1&amp;nbsp;&amp;nbsp;&amp;nbsp; Info2&amp;nbsp;&amp;nbsp;&amp;nbsp; Info3&amp;nbsp;&amp;nbsp;&amp;nbsp; Value1&amp;nbsp;&amp;nbsp;&amp;nbsp; Value2&amp;nbsp;&amp;nbsp;&amp;nbsp; Value3) (:$8.);&lt;/P&gt;&lt;P&gt;cards;&lt;/P&gt;&lt;P&gt;a&amp;nbsp;&amp;nbsp;&amp;nbsp; b&amp;nbsp;&amp;nbsp;&amp;nbsp; c&amp;nbsp;&amp;nbsp;&amp;nbsp; ddd&amp;nbsp;&amp;nbsp;&amp;nbsp; e&amp;nbsp;&amp;nbsp;&amp;nbsp; f&lt;/P&gt;&lt;P&gt;aa&amp;nbsp;&amp;nbsp;&amp;nbsp; bb&amp;nbsp;&amp;nbsp;&amp;nbsp; cc&amp;nbsp;&amp;nbsp;&amp;nbsp; jj&amp;nbsp;&amp;nbsp;&amp;nbsp; kk&amp;nbsp;&amp;nbsp;&amp;nbsp; ll&lt;/P&gt;&lt;P&gt;aaa&amp;nbsp;&amp;nbsp;&amp;nbsp; bbb&amp;nbsp;&amp;nbsp;&amp;nbsp; ccc&amp;nbsp;&amp;nbsp;&amp;nbsp; u&amp;nbsp;&amp;nbsp;&amp;nbsp; i&amp;nbsp;&amp;nbsp;&amp;nbsp; z&lt;/P&gt;&lt;P&gt;aaaa&amp;nbsp;&amp;nbsp;&amp;nbsp; bbbb&amp;nbsp;&amp;nbsp;&amp;nbsp; cccc&amp;nbsp;&amp;nbsp;&amp;nbsp; nn&amp;nbsp;&amp;nbsp;&amp;nbsp; bbaq&amp;nbsp;&amp;nbsp;&amp;nbsp; vvvv&lt;/P&gt;&lt;P&gt;;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data want;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; dcl hash h(ordered:'a');&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; h.definekey('var','var_name');&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; h.definedata('var','var_name','value1','value2','value3');&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; h.definedone();&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do until (last1);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set h2 end=last1;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; array ind&amp;nbsp; info1-info3;&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; do over ind;&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; var=ind;&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; var_name=vname(ind);&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; h.add();&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; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do until (last2);&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; set h1 end=last2;&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; array ind1&amp;nbsp; info1-info3;&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; do over ind1;&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; if not missing(ind1) then do;&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; rc=h.find(key:ind1,key:vname(ind1));&amp;nbsp; output;&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; leave;&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; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; keep name value1-value3;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; stop;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; proc print;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Haikuo&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 18 Jul 2012 15:14:18 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Conditional-Merge-or-conditional-join-SQL-on-two-tables/m-p/109783#M30515</guid>
      <dc:creator>Haikuo</dc:creator>
      <dc:date>2012-07-18T15:14:18Z</dc:date>
    </item>
    <item>
      <title>Re: Conditional Merge (or conditional join [SQL]) on two tables</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Conditional-Merge-or-conditional-join-SQL-on-two-tables/m-p/109784#M30516</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thank you both for your suggestions!&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I would like to add :&lt;/P&gt;&lt;P&gt;- Great forum&lt;/P&gt;&lt;P&gt;-Great Interface&lt;/P&gt;&lt;P&gt;-Great User base&lt;/P&gt;&lt;P&gt;-Fast Answer&lt;/P&gt;&lt;P&gt;Could not have asked for more.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thank you all for your help and time!&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 19 Jul 2012 16:17:25 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Conditional-Merge-or-conditional-join-SQL-on-two-tables/m-p/109784#M30516</guid>
      <dc:creator>nicnad</dc:creator>
      <dc:date>2012-07-19T16:17:25Z</dc:date>
    </item>
  </channel>
</rss>

