<?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: Join based on a concatenated value in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Join-based-on-a-concatenated-value/m-p/923549#M363573</link>
    <description>&lt;P&gt;"&lt;EM&gt;The join you want can't be done in one step.&lt;/EM&gt;" ?!?! Hold my beer...&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data Result_in_one_step;
  if 0 then set Table_B;
  declare hash H(dataset: "Table_B");
  H.defineKey("code");
  H.defineData("data");
  H.defineDone();

  do until (EOF);
    set Table_A end=EOF;

    length code $ 1 var3 $ 128;
    call missing(var3);
    do i = 1 to countw(var1,", ");
      code=scan(var1,i,", ");
      if 0=H.find() then var3 = catx(", ", var3, data);
    end;

    output; 
  end;

  stop;
  keep ID var3;
run;

title "Result_in_one_step";
proc print data=Result_in_one_step;
run;
title;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Bart&lt;/P&gt;</description>
    <pubDate>Tue, 09 Apr 2024 09:19:11 GMT</pubDate>
    <dc:creator>yabwon</dc:creator>
    <dc:date>2024-04-09T09:19:11Z</dc:date>
    <item>
      <title>Join based on a concatenated value</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Join-based-on-a-concatenated-value/m-p/923546#M363570</link>
      <description>&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;I'm trying to join 2 tables based on a concatenated field (var1) :&lt;/P&gt;&lt;P&gt;Thank you&lt;/P&gt;&lt;P&gt;Table A:&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;ID&lt;/TD&gt;&lt;TD&gt;var1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;a, b, d&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;c&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;d, a&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;Table B:&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;var1&lt;/TD&gt;&lt;TD&gt;var2&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;a&lt;/TD&gt;&lt;TD&gt;John&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;b&lt;/TD&gt;&lt;TD&gt;Sarah&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;c&lt;/TD&gt;&lt;TD&gt;Tralala&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;d&lt;/TD&gt;&lt;TD&gt;Minnie&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&lt;SPAN&gt;Result:&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;ID&lt;/TD&gt;&lt;TD&gt;var 3&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;John, Sarah, Minnie&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;Tralala&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;Minnie,&amp;nbsp; John&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;</description>
      <pubDate>Tue, 09 Apr 2024 08:53:36 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Join-based-on-a-concatenated-value/m-p/923546#M363570</guid>
      <dc:creator>mshr</dc:creator>
      <dc:date>2024-04-09T08:53:36Z</dc:date>
    </item>
    <item>
      <title>Re: Join based on a concatenated value</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Join-based-on-a-concatenated-value/m-p/923548#M363572</link>
      <description>&lt;P&gt;This is a step by step solution:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;title "Table_A";
data Table_A;
input ID	var1 $20.;
cards;
1	a, b, d
2	c
3	d, a
;
run;
proc print;
run;

title "Table_B";
data Table_B;
input code $1. data $20.; /* variables names changed */
cards;
a	John
b	Sarah
c	Tralala
d	Minnie
;
run;
proc print;
run;


/* step 1 */
data splited;
  set Table_A;

  length code $ 1;
  do i = 1 to countw(var1,", ");
    code=scan(var1,i,", ");
    output;
  end;
drop var1;
run;

/* step 2 */
proc sql;
  create table combined as
  select s.ID, b.data
  from splited as s
  left join
  Table_B as b
  on s.code=b.code
  order by s.ID
  ;
quit;

/* step 3 */
proc transpose data=combined out=transposed;
  by ID;
  var data;
run;

/* step 4 */
title "Result";
data Result;
  set transposed;
  array C[*] col:;

  length var3 $ 128;
  var3 = catx(", ", of C[*]);
  keep ID var3;
run;
proc print data=Result;
run;
title;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;The join you want can't be done in one step.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Bart&lt;/P&gt;</description>
      <pubDate>Tue, 09 Apr 2024 09:17:27 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Join-based-on-a-concatenated-value/m-p/923548#M363572</guid>
      <dc:creator>yabwon</dc:creator>
      <dc:date>2024-04-09T09:17:27Z</dc:date>
    </item>
    <item>
      <title>Re: Join based on a concatenated value</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Join-based-on-a-concatenated-value/m-p/923549#M363573</link>
      <description>&lt;P&gt;"&lt;EM&gt;The join you want can't be done in one step.&lt;/EM&gt;" ?!?! Hold my beer...&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data Result_in_one_step;
  if 0 then set Table_B;
  declare hash H(dataset: "Table_B");
  H.defineKey("code");
  H.defineData("data");
  H.defineDone();

  do until (EOF);
    set Table_A end=EOF;

    length code $ 1 var3 $ 128;
    call missing(var3);
    do i = 1 to countw(var1,", ");
      code=scan(var1,i,", ");
      if 0=H.find() then var3 = catx(", ", var3, data);
    end;

    output; 
  end;

  stop;
  keep ID var3;
run;

title "Result_in_one_step";
proc print data=Result_in_one_step;
run;
title;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Bart&lt;/P&gt;</description>
      <pubDate>Tue, 09 Apr 2024 09:19:11 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Join-based-on-a-concatenated-value/m-p/923549#M363573</guid>
      <dc:creator>yabwon</dc:creator>
      <dc:date>2024-04-09T09:19:11Z</dc:date>
    </item>
    <item>
      <title>Re: Join based on a concatenated value</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Join-based-on-a-concatenated-value/m-p/923557#M363579</link>
      <description>&lt;P&gt;your solution works great!&amp;nbsp;&lt;/P&gt;&lt;P&gt;many thanks&lt;/P&gt;</description>
      <pubDate>Tue, 09 Apr 2024 10:27:15 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Join-based-on-a-concatenated-value/m-p/923557#M363579</guid>
      <dc:creator>mshr</dc:creator>
      <dc:date>2024-04-09T10:27:15Z</dc:date>
    </item>
  </channel>
</rss>

