<?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: Find Distinct Values in a Horizontal List in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Find-Distinct-Values-in-a-Horizontal-List/m-p/898379#M355069</link>
    <description>&lt;P&gt;Hi,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;An alternative method:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want(keep = id list);
  set test;
  
  length
    lists $ 100
    list  $ 100
  ;

  lists = catx(',',list1,list2,list3);
  
  do i = 1 to length(lists);
    /* add a letter to a list if it is not found in the list */
    list = ifc(find(list,scan(lists,i)), list, catx(',',list,scan(lists,i)));
  end;
run;
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Thanks &amp;amp; kind regards,&lt;/P&gt;
&lt;P&gt;Amir.&lt;/P&gt;</description>
    <pubDate>Thu, 12 Oct 2023 18:08:59 GMT</pubDate>
    <dc:creator>Amir</dc:creator>
    <dc:date>2023-10-12T18:08:59Z</dc:date>
    <item>
      <title>Find Distinct Values in a Horizontal List</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Find-Distinct-Values-in-a-Horizontal-List/m-p/898344#M355055</link>
      <description>&lt;P&gt;I have an unusual task where I am given 3 lists that I merge together, and I am supposed to only report a single list of all distinct values found in all lists.&amp;nbsp; Below is some code that I made up to illustrate the idea.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;proc sql;
	create table test (ID char(3), LIST1 char(10), LIST2 char(10), LIST3 char(10));
		insert into test (id, list1, list2, list3)
			values ('001', 'A,B,C', 'A,B,C', 'A,B,C')
			values ('002', 'A,C,D', 'C', 'A,C,D')
			values ('003', 'A,B,C,D,E', '', '')
			values ('004', 'A,B,C,D,E', 'A,B', 'C,D,F');
quit;
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;I am wondering if there is a simple way to end up with the following results:&lt;/P&gt;
&lt;TABLE style="border-collapse: collapse; width: 96pt;" border="0" width="128" cellspacing="0" cellpadding="0"&gt;
&lt;TBODY&gt;
&lt;TR style="height: 15.0pt;"&gt;
&lt;TD width="64" height="20" class="xl63" style="height: 15.0pt; width: 48pt;"&gt;&lt;STRONG&gt;ID&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD width="64" class="xl63" style="width: 48pt;"&gt;&lt;STRONG&gt;LIST&lt;/STRONG&gt;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 15.0pt;"&gt;
&lt;TD height="20" style="height: 15.0pt;"&gt;001&lt;/TD&gt;
&lt;TD&gt;A,B,C&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 15.0pt;"&gt;
&lt;TD height="20" style="height: 15.0pt;"&gt;002&lt;/TD&gt;
&lt;TD&gt;A,C,D&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 15.0pt;"&gt;
&lt;TD height="20" style="height: 15.0pt;"&gt;003&lt;/TD&gt;
&lt;TD&gt;A,B,C,D,E&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 15.0pt;"&gt;
&lt;TD height="20" style="height: 15.0pt;"&gt;004&lt;/TD&gt;
&lt;TD&gt;A,B,C,D,E,F&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The best I can think is to parse each item from each list into a separate variable, transpose from horizontal to vertical, remove any duplicate values, transpose from vertical to horizontal, then CATX everything again into a single list.&amp;nbsp; Please tell me there is better way!&lt;/P&gt;</description>
      <pubDate>Thu, 12 Oct 2023 16:02:12 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Find-Distinct-Values-in-a-Horizontal-List/m-p/898344#M355055</guid>
      <dc:creator>djbateman</dc:creator>
      <dc:date>2023-10-12T16:02:12Z</dc:date>
    </item>
    <item>
      <title>Re: Find Distinct Values in a Horizontal List</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Find-Distinct-Values-in-a-Horizontal-List/m-p/898353#M355059</link>
      <description>&lt;P&gt;Hi&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/74"&gt;@djbateman&lt;/a&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I think your idea is worth following. If I understood your input correct, so my test data is something similar to what you have, this would do it:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
  infile datalines truncover;
  input ID $3. @5 List $char10.;
  datalines;
001 A,B,C
001 A,B,C
001 A,B,C
002 A,C,D
002 C
002 A,C,D
003 A,B,C,D,E
004 A,B,C,D,E
004 A,B
004 C,D,F
;
run;

data t1; 
  set have;
  do i = 1 to countw(List,',');
    Item = scan(List,i,',');
    output;
  end;
run;

proc sql;
  create table t2 as
    select distinct ID, Item
    from t1
    group by ID;
quit;

data want (keep = ID List);
  set t2;
  by ID;
  length list $12.;
  retain List;
  if first.ID then call missing (List);
  List = catx(',', List, Item);
  if last.ID then output;
run;
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 12 Oct 2023 16:49:32 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Find-Distinct-Values-in-a-Horizontal-List/m-p/898353#M355059</guid>
      <dc:creator>ErikLund_Jensen</dc:creator>
      <dc:date>2023-10-12T16:49:32Z</dc:date>
    </item>
    <item>
      <title>Re: Find Distinct Values in a Horizontal List</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Find-Distinct-Values-in-a-Horizontal-List/m-p/898359#M355062</link>
      <description>Thank you so much!  I think this did the trick.  It is basically the same process as I spelled out, but yours was a bit cleaner than mine.  You did yours in just a few blocks while I used several small blocks.</description>
      <pubDate>Thu, 12 Oct 2023 17:05:33 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Find-Distinct-Values-in-a-Horizontal-List/m-p/898359#M355062</guid>
      <dc:creator>djbateman</dc:creator>
      <dc:date>2023-10-12T17:05:33Z</dc:date>
    </item>
    <item>
      <title>Re: Find Distinct Values in a Horizontal List</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Find-Distinct-Values-in-a-Horizontal-List/m-p/898379#M355069</link>
      <description>&lt;P&gt;Hi,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;An alternative method:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want(keep = id list);
  set test;
  
  length
    lists $ 100
    list  $ 100
  ;

  lists = catx(',',list1,list2,list3);
  
  do i = 1 to length(lists);
    /* add a letter to a list if it is not found in the list */
    list = ifc(find(list,scan(lists,i)), list, catx(',',list,scan(lists,i)));
  end;
run;
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Thanks &amp;amp; kind regards,&lt;/P&gt;
&lt;P&gt;Amir.&lt;/P&gt;</description>
      <pubDate>Thu, 12 Oct 2023 18:08:59 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Find-Distinct-Values-in-a-Horizontal-List/m-p/898379#M355069</guid>
      <dc:creator>Amir</dc:creator>
      <dc:date>2023-10-12T18:08:59Z</dc:date>
    </item>
    <item>
      <title>Re: Find Distinct Values in a Horizontal List</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Find-Distinct-Values-in-a-Horizontal-List/m-p/898383#M355071</link>
      <description>&lt;P&gt;Hi&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/74"&gt;@djbateman&lt;/a&gt;,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;If your "values" are single letters as in your sample data, you could select the distinct values from the collating sequence using the COMPRESS function and then, if needed, insert the commas using PRXCHANGE:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want(keep=id list);
set test;
length list $30;
list=prxchange('s/(\w\B)/$1,/',-1,compress(collate(65),cats(of list:),'k'));
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Otherwise,&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/22588"&gt;@Amir&lt;/a&gt;'s one-step approach could easily be modified to work also with longer words.&lt;/P&gt;</description>
      <pubDate>Thu, 12 Oct 2023 18:38:45 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Find-Distinct-Values-in-a-Horizontal-List/m-p/898383#M355071</guid>
      <dc:creator>FreelanceReinh</dc:creator>
      <dc:date>2023-10-12T18:38:45Z</dc:date>
    </item>
  </channel>
</rss>

