<?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: Detecting unique values across variables in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Detecting-unique-values-across-variables/m-p/13727#M1659</link>
    <description>See how you single statement performs if you use variable name references instead of array reference.</description>
    <pubDate>Mon, 21 Feb 2011 18:46:29 GMT</pubDate>
    <dc:creator>data_null__</dc:creator>
    <dc:date>2011-02-21T18:46:29Z</dc:date>
    <item>
      <title>Detecting unique values across variables</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Detecting-unique-values-across-variables/m-p/13722#M1654</link>
      <description>I have a list of numeric variables (always integers) and would like to determine when they have distinct values.  In the following code the three variables are I, J, K, but in reality there can be a large number of variables.   Thoughts on an easier way to replace the [pre]i ne j &amp;amp; i ne k &amp;amp; j ne k[/pre]&lt;BR /&gt;
&lt;BR /&gt;
[pre]data alldiff;&lt;BR /&gt;
do i = 1 to 4;&lt;BR /&gt;
do j = 1 to 4;&lt;BR /&gt;
do k = 1 to 4;&lt;BR /&gt;
   if i ne j &amp;amp; i ne k &amp;amp; j ne k then output alldiff;&lt;BR /&gt;
end;end;end;&lt;BR /&gt;
run;&lt;BR /&gt;
proc print data=alldiff;&lt;BR /&gt;
run;[/pre]</description>
      <pubDate>Sat, 19 Feb 2011 00:43:29 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Detecting-unique-values-across-variables/m-p/13722#M1654</guid>
      <dc:creator>ArtC</dc:creator>
      <dc:date>2011-02-19T00:43:29Z</dc:date>
    </item>
    <item>
      <title>Re: Detecting unique values across variables</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Detecting-unique-values-across-variables/m-p/13723#M1655</link>
      <description>Here is one way. In the worst case, you will make 0.5*n*(n-1) comparisons per obs.&lt;BR /&gt;&lt;BR /&gt;
&lt;BR /&gt;&lt;BR /&gt;
&lt;P style="padding:0"&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color:#008000;font-family:Courier New;font-size:10pt;"&gt;/*&amp;nbsp;test&amp;nbsp;data&amp;nbsp;*/&lt;/SPAN&gt;&lt;/P&gt;&lt;BR /&gt;
&lt;P style="padding:0"&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;B&gt;&lt;SPAN style="color:#000080;font-family:Courier New;font-size:10pt;"&gt;data&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;one;&lt;/SPAN&gt;&lt;/P&gt;&lt;BR /&gt;
&lt;P style="padding:0"&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color:#0000FF;font-family:Courier New;font-size:10pt;"&gt;do&lt;/SPAN&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;i&amp;nbsp;=&amp;nbsp;&lt;/SPAN&gt;&lt;B&gt;&lt;SPAN style="color:#008080;font-family:Courier New;font-size:10pt;"&gt;1&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color:#0000FF;font-family:Courier New;font-size:10pt;"&gt;to&lt;/SPAN&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;B&gt;&lt;SPAN style="color:#008080;font-family:Courier New;font-size:10pt;"&gt;4&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;;&lt;/SPAN&gt;&lt;/P&gt;&lt;BR /&gt;
&lt;P style="padding:0"&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color:#0000FF;font-family:Courier New;font-size:10pt;"&gt;do&lt;/SPAN&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;j&amp;nbsp;=&amp;nbsp;&lt;/SPAN&gt;&lt;B&gt;&lt;SPAN style="color:#008080;font-family:Courier New;font-size:10pt;"&gt;1&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color:#0000FF;font-family:Courier New;font-size:10pt;"&gt;to&lt;/SPAN&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;B&gt;&lt;SPAN style="color:#008080;font-family:Courier New;font-size:10pt;"&gt;4&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;;&lt;/SPAN&gt;&lt;/P&gt;&lt;BR /&gt;
&lt;P style="padding:0"&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color:#0000FF;font-family:Courier New;font-size:10pt;"&gt;do&lt;/SPAN&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;k&amp;nbsp;=&amp;nbsp;&lt;/SPAN&gt;&lt;B&gt;&lt;SPAN style="color:#008080;font-family:Courier New;font-size:10pt;"&gt;1&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color:#0000FF;font-family:Courier New;font-size:10pt;"&gt;to&lt;/SPAN&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;B&gt;&lt;SPAN style="color:#008080;font-family:Courier New;font-size:10pt;"&gt;4&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;;&lt;/SPAN&gt;&lt;/P&gt;&lt;BR /&gt;
&lt;P style="padding:0"&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color:#0000FF;font-family:Courier New;font-size:10pt;"&gt;output&lt;/SPAN&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;;&lt;/SPAN&gt;&lt;/P&gt;&lt;BR /&gt;
&lt;P style="padding:0"&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color:#0000FF;font-family:Courier New;font-size:10pt;"&gt;end&lt;/SPAN&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;;&lt;/SPAN&gt;&lt;/P&gt;&lt;BR /&gt;
&lt;P style="padding:0"&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color:#0000FF;font-family:Courier New;font-size:10pt;"&gt;end&lt;/SPAN&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;;&lt;/SPAN&gt;&lt;/P&gt;&lt;BR /&gt;
&lt;P style="padding:0"&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color:#0000FF;font-family:Courier New;font-size:10pt;"&gt;end&lt;/SPAN&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;;&lt;/SPAN&gt;&lt;/P&gt;&lt;BR /&gt;
&lt;P style="padding:0"&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;B&gt;&lt;SPAN style="color:#000080;font-family:Courier New;font-size:10pt;"&gt;run&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;;&lt;/SPAN&gt;&lt;/P&gt;&lt;BR /&gt;
&lt;P style="padding:0"&gt;&amp;nbsp;&lt;/P&gt;&lt;BR /&gt;
&lt;P style="padding:0"&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color:#008000;font-family:Courier New;font-size:10pt;"&gt;/*&amp;nbsp;flag&amp;nbsp;if&amp;nbsp;all&amp;nbsp;ijk&amp;nbsp;values&amp;nbsp;are&amp;nbsp;different&amp;nbsp;*/&lt;/SPAN&gt;&lt;/P&gt;&lt;BR /&gt;
&lt;P style="padding:0"&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;B&gt;&lt;SPAN style="color:#000080;font-family:Courier New;font-size:10pt;"&gt;data&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;two;&lt;/SPAN&gt;&lt;/P&gt;&lt;BR /&gt;
&lt;P style="padding:0"&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color:#0000FF;font-family:Courier New;font-size:10pt;"&gt;set&lt;/SPAN&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;one;&lt;/SPAN&gt;&lt;/P&gt;&lt;BR /&gt;
&lt;P style="padding:0"&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color:#0000FF;font-family:Courier New;font-size:10pt;"&gt;array&lt;/SPAN&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;var(*)&amp;nbsp;i&amp;nbsp;j&amp;nbsp;k;&lt;/SPAN&gt;&lt;/P&gt;&lt;BR /&gt;
&lt;P style="padding:0"&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;unique&amp;nbsp;=&amp;nbsp;&lt;/SPAN&gt;&lt;B&gt;&lt;SPAN style="color:#008080;font-family:Courier New;font-size:10pt;"&gt;1&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;BR /&gt;
&lt;P style="padding:0"&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color:#0000FF;font-family:Courier New;font-size:10pt;"&gt;drop&lt;/SPAN&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;p&amp;nbsp;q;&lt;/SPAN&gt;&lt;/P&gt;&lt;BR /&gt;
&lt;P style="padding:0"&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color:#0000FF;font-family:Courier New;font-size:10pt;"&gt;do&lt;/SPAN&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;p&amp;nbsp;=&amp;nbsp;&lt;/SPAN&gt;&lt;B&gt;&lt;SPAN style="color:#008080;font-family:Courier New;font-size:10pt;"&gt;1&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color:#0000FF;font-family:Courier New;font-size:10pt;"&gt;to&lt;/SPAN&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;dim(var)-&lt;/SPAN&gt;&lt;B&gt;&lt;SPAN style="color:#008080;font-family:Courier New;font-size:10pt;"&gt;1&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color:#0000FF;font-family:Courier New;font-size:10pt;"&gt;while&lt;/SPAN&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;(unique);&lt;/SPAN&gt;&lt;/P&gt;&lt;BR /&gt;
&lt;P style="padding:0"&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color:#0000FF;font-family:Courier New;font-size:10pt;"&gt;do&lt;/SPAN&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;q&amp;nbsp;=&amp;nbsp;p&amp;nbsp;+&amp;nbsp;&lt;/SPAN&gt;&lt;B&gt;&lt;SPAN style="color:#008080;font-family:Courier New;font-size:10pt;"&gt;1&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color:#0000FF;font-family:Courier New;font-size:10pt;"&gt;to&lt;/SPAN&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;dim(var)&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color:#0000FF;font-family:Courier New;font-size:10pt;"&gt;while&lt;/SPAN&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;(unique);&lt;/SPAN&gt;&lt;/P&gt;&lt;BR /&gt;
&lt;P style="padding:0"&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;unique&amp;nbsp;=&amp;nbsp;var(p)^=var(q);&lt;/SPAN&gt;&lt;/P&gt;&lt;BR /&gt;
&lt;P style="padding:0"&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color:#0000FF;font-family:Courier New;font-size:10pt;"&gt;end&lt;/SPAN&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;;&lt;/SPAN&gt;&lt;/P&gt;&lt;BR /&gt;
&lt;P style="padding:0"&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color:#0000FF;font-family:Courier New;font-size:10pt;"&gt;end&lt;/SPAN&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;BR /&gt;
&lt;P style="padding:0"&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;B&gt;&lt;SPAN style="color:#000080;font-family:Courier New;font-size:10pt;"&gt;run&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;;&lt;/SPAN&gt;&lt;/P&gt;&lt;BR /&gt;
&lt;P style="padding:0"&gt;&amp;nbsp;&lt;/P&gt;&lt;BR /&gt;
&lt;P style="padding:0"&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color:#008000;font-family:Courier New;font-size:10pt;"&gt;/*&amp;nbsp;check&amp;nbsp;*/&lt;/SPAN&gt;&lt;/P&gt;&lt;BR /&gt;
&lt;P style="padding:0"&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;B&gt;&lt;SPAN style="color:#000080;font-family:Courier New;font-size:10pt;"&gt;proc&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;B&gt;&lt;SPAN style="color:#000080;font-family:Courier New;font-size:10pt;"&gt;print&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color:#0000FF;font-family:Courier New;font-size:10pt;"&gt;data&lt;/SPAN&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;=two(&lt;/SPAN&gt;&lt;SPAN style="color:#0000FF;font-family:Courier New;font-size:10pt;"&gt;obs&lt;/SPAN&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;=&lt;/SPAN&gt;&lt;B&gt;&lt;SPAN style="color:#008080;font-family:Courier New;font-size:10pt;"&gt;10&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;);&lt;/SPAN&gt;&lt;/P&gt;&lt;BR /&gt;
&lt;P style="padding:0"&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;B&gt;&lt;SPAN style="color:#000080;font-family:Courier New;font-size:10pt;"&gt;run&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;;&lt;/SPAN&gt;&lt;/P&gt;&lt;BR /&gt;
&lt;P style="padding:0"&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color:#008000;font-family:Courier New;font-size:10pt;"&gt;/*&amp;nbsp;on&amp;nbsp;lst&lt;/SPAN&gt;&lt;/P&gt;&lt;BR /&gt;
&lt;P style="padding:0"&gt;&lt;SPAN style="color:#008000;font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Obs&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;i&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;j&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;k&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;unique&lt;/SPAN&gt;&lt;/P&gt;&lt;BR /&gt;
&lt;P style="padding:0"&gt;&amp;nbsp;&lt;/P&gt;&lt;BR /&gt;
&lt;P style="padding:0"&gt;&lt;SPAN style="color:#008000;font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0&lt;/SPAN&gt;&lt;/P&gt;&lt;BR /&gt;
&lt;P style="padding:0"&gt;&lt;SPAN style="color:#008000;font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0&lt;/SPAN&gt;&lt;/P&gt;&lt;BR /&gt;
&lt;P style="padding:0"&gt;&lt;SPAN style="color:#008000;font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0&lt;/SPAN&gt;&lt;/P&gt;&lt;BR /&gt;
&lt;P style="padding:0"&gt;&lt;SPAN style="color:#008000;font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0&lt;/SPAN&gt;&lt;/P&gt;&lt;BR /&gt;
&lt;P style="padding:0"&gt;&lt;SPAN style="color:#008000;font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;5&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0&lt;/SPAN&gt;&lt;/P&gt;&lt;BR /&gt;
&lt;P style="padding:0"&gt;&lt;SPAN style="color:#008000;font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;6&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0&lt;/SPAN&gt;&lt;/P&gt;&lt;BR /&gt;
&lt;P style="padding:0"&gt;&lt;SPAN style="color:#008000;font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;7&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1&lt;/SPAN&gt;&lt;/P&gt;&lt;BR /&gt;
&lt;P style="padding:0"&gt;&lt;SPAN style="color:#008000;font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;8&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1&lt;/SPAN&gt;&lt;/P&gt;&lt;BR /&gt;
&lt;P style="padding:0"&gt;&lt;SPAN style="color:#008000;font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;9&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0&lt;/SPAN&gt;&lt;/P&gt;&lt;BR /&gt;
&lt;P style="padding:0"&gt;&lt;SPAN style="color:#008000;font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;10&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1&lt;/SPAN&gt;&lt;/P&gt;&lt;BR /&gt;
&lt;P style="padding:0"&gt;&lt;SPAN style="color:#008000;font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/&lt;/SPAN&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Sat, 19 Feb 2011 01:50:09 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Detecting-unique-values-across-variables/m-p/13723#M1655</guid>
      <dc:creator>chang_y_chung_hotmail_com</dc:creator>
      <dc:date>2011-02-19T01:50:09Z</dc:date>
    </item>
    <item>
      <title>Re: Detecting unique values across variables</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Detecting-unique-values-across-variables/m-p/13724#M1656</link>
      <description>I don't think this is really any different from Chang's program just "more statements" &lt;span class="lia-unicode-emoji" title=":slightly_smiling_face:"&gt;🙂&lt;/span&gt;&lt;BR /&gt;
&lt;BR /&gt;
I don't unstand why I had to define a data item for the hash in order to use the ADD method syntax with the KEY argument, h.add(key:v&lt;L&gt;,data:' ')&lt;BR /&gt;
It works without DEFINEDATA and the DATA argument but you have assign Y and then call the ADD method, y=v&lt;L&gt;; rc=h.add(), but h.add(key:v&lt;L&gt;) does not.&lt;BR /&gt;
&lt;BR /&gt;
[pre]&lt;BR /&gt;
data alldiff;&lt;BR /&gt;
   length y 8 d $1;&lt;BR /&gt;
   call missing(y,d);&lt;BR /&gt;
   declare hash h();&lt;BR /&gt;
   h.definekey('y');&lt;BR /&gt;
   h.definedata('d');&lt;BR /&gt;
   h.definedone();&lt;BR /&gt;
   do i = 1 to 4;&lt;BR /&gt;
      do j = 1 to 4;&lt;BR /&gt;
         do k = 1 to 4;&lt;BR /&gt;
            h.clear();&lt;BR /&gt;
            array v&lt;LI&gt; i j k;&lt;BR /&gt;
            do l=1 to dim(v) until(h.add(key:v&lt;L&gt;,data:' ') gt 0);&lt;BR /&gt;
               end;&lt;BR /&gt;
            unique = l eq dim(v)+1;&lt;BR /&gt;
            output;&lt;BR /&gt;
            end;&lt;BR /&gt;
         end;&lt;BR /&gt;
      end;&lt;BR /&gt;
   drop y d l;&lt;BR /&gt;
   run;&lt;BR /&gt;
[/pre]&lt;/L&gt;&lt;/LI&gt;&lt;/L&gt;&lt;/L&gt;&lt;/L&gt;</description>
      <pubDate>Sat, 19 Feb 2011 12:54:06 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Detecting-unique-values-across-variables/m-p/13724#M1656</guid>
      <dc:creator>data_null__</dc:creator>
      <dc:date>2011-02-19T12:54:06Z</dc:date>
    </item>
    <item>
      <title>Re: Detecting unique values across variables</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Detecting-unique-values-across-variables/m-p/13725#M1657</link>
      <description>Thank you Chang and Data _NULL_.  I was afraid (and hoping) that I might have been missing something like a uniquevarvalues function.  For either solution there is quite a bit of checking that needs to take place.  It will be interesting to see how the hash solution scales for larger data sets and numbers of vars.&lt;BR /&gt;
Thanks&lt;BR /&gt;
Art</description>
      <pubDate>Mon, 21 Feb 2011 07:00:33 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Detecting-unique-values-across-variables/m-p/13725#M1657</guid>
      <dc:creator>ArtC</dc:creator>
      <dc:date>2011-02-21T07:00:33Z</dc:date>
    </item>
    <item>
      <title>Re: Detecting unique values across variables</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Detecting-unique-values-across-variables/m-p/13726#M1658</link>
      <description>I was also curious to see how the hash solution compares for larger datasets with more variables.  I ran a test on a dataset with 1000000 observations and 20 variables.  Also, I tried testing a third solution which uses a simple macro to create a single statement in the data step.  Here are the results.&lt;BR /&gt;
&lt;BR /&gt;
[pre]&lt;BR /&gt;
1    data test;&lt;BR /&gt;
2        array var{20};&lt;BR /&gt;
3        do i = 1 to 1000000;&lt;BR /&gt;
4            do j=1 to dim(var);&lt;BR /&gt;
5                var{j} = floor(ranuni(0)*300);&lt;BR /&gt;
6            end;&lt;BR /&gt;
7            output;&lt;BR /&gt;
8        end;&lt;BR /&gt;
9        drop i j;&lt;BR /&gt;
10   run;&lt;BR /&gt;
&lt;BR /&gt;
NOTE: The data set WORK.TEST has 1000000 observations and 20 variables.&lt;BR /&gt;
NOTE: DATA statement used (Total process time):&lt;BR /&gt;
      real time           3.57 seconds&lt;BR /&gt;
      cpu time            3.57 seconds&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
11&lt;BR /&gt;
12   data chang;&lt;BR /&gt;
13        set test;&lt;BR /&gt;
14        array var(*) var:;&lt;BR /&gt;
NOTE: The array var has the same name as a SAS-supplied or user-defined function.  Parentheses&lt;BR /&gt;
      following this name are treated as array references and not function references.&lt;BR /&gt;
15        unique = 1;&lt;BR /&gt;
16        drop p q;&lt;BR /&gt;
17        do p = 1 to dim(var)-1 while(unique);&lt;BR /&gt;
18           do q = p + 1 to dim(var) while(unique);&lt;BR /&gt;
19              unique = var(p)^=var(q);&lt;BR /&gt;
20           end;&lt;BR /&gt;
21        end;&lt;BR /&gt;
22   run;&lt;BR /&gt;
&lt;BR /&gt;
NOTE: There were 1000000 observations read from the data set WORK.TEST.&lt;BR /&gt;
NOTE: The data set WORK.CHANG has 1000000 observations and 21 variables.&lt;BR /&gt;
NOTE: DATA statement used (Total process time):&lt;BR /&gt;
      real time           24.56 seconds&lt;BR /&gt;
      cpu time            25.00 seconds&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
23&lt;BR /&gt;
24   data data_null_;&lt;BR /&gt;
25      length y 8 d $1;&lt;BR /&gt;
26      if _n_ = 1 then do;&lt;BR /&gt;
27       call missing(y,d);&lt;BR /&gt;
28       declare hash h();&lt;BR /&gt;
29       h.definekey('y');&lt;BR /&gt;
30       h.definedata('d');&lt;BR /&gt;
31       h.definedone();&lt;BR /&gt;
32      end;&lt;BR /&gt;
33      set test;&lt;BR /&gt;
34      h.clear();&lt;BR /&gt;
35      array v&lt;LI&gt; var:;&lt;BR /&gt;
36       do l=1 to dim(v) until(h.add(key:v&lt;L&gt;,data:' ') gt 0);&lt;BR /&gt;
37         end;&lt;BR /&gt;
38      unique = l eq dim(v)+1;&lt;BR /&gt;
39      output;&lt;BR /&gt;
40      drop y d l;&lt;BR /&gt;
41   run;&lt;BR /&gt;
&lt;BR /&gt;
NOTE: There were 1000000 observations read from the data set WORK.TEST.&lt;BR /&gt;
NOTE: The data set WORK.DATA_NULL_ has 1000000 observations and 21 variables.&lt;BR /&gt;
NOTE: DATA statement used (Total process time):&lt;BR /&gt;
      real time           36.87 seconds&lt;BR /&gt;
      cpu time            37.23 seconds&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
42&lt;BR /&gt;
43   %macro ne(array, elements);&lt;BR /&gt;
44       %do i = 1 %to %eval(&amp;amp;elements-2);&lt;BR /&gt;
45           %do j = %eval(&amp;amp;i+1) %to &amp;amp;elements;&lt;BR /&gt;
46               (&amp;amp;array[&amp;amp;i] ne &amp;amp;array[&amp;amp;j]) &amp;amp;&lt;BR /&gt;
47           %end;&lt;BR /&gt;
48       %end;&lt;BR /&gt;
49       (&amp;amp;array[%eval(&amp;amp;elements-1)] ne &amp;amp;array[&amp;amp;elements])&lt;BR /&gt;
50   %mend;&lt;BR /&gt;
51&lt;BR /&gt;
52   data _null_;&lt;BR /&gt;
53       if 0 then set test;&lt;BR /&gt;
54       array var&lt;/L&gt;&lt;/LI&gt;&lt;LI&gt; var:;&lt;BR /&gt;
55       call symputx('num_vars', dim(var));&lt;BR /&gt;
56   run;&lt;BR /&gt;
&lt;BR /&gt;
NOTE: DATA STEP stopped due to looping.&lt;BR /&gt;
NOTE: DATA statement used (Total process time):&lt;BR /&gt;
      real time           0.01 seconds&lt;BR /&gt;
      cpu time            0.01 seconds&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
57&lt;BR /&gt;
58   data polingjw;&lt;BR /&gt;
59       set test;&lt;BR /&gt;
60       array var&lt;/LI&gt;&lt;LI&gt; var:;&lt;BR /&gt;
61       unique = (%ne(var, &amp;amp;num_vars));&lt;BR /&gt;
62   run;&lt;BR /&gt;
&lt;BR /&gt;
NOTE: There were 1000000 observations read from the data set WORK.TEST.&lt;BR /&gt;
NOTE: The data set WORK.POLINGJW has 1000000 observations and 21 variables.&lt;BR /&gt;
NOTE: DATA statement used (Total process time):&lt;BR /&gt;
      real time           22.06 seconds&lt;BR /&gt;
      cpu time            22.15 seconds&lt;BR /&gt;
[/pre]&lt;/LI&gt;</description>
      <pubDate>Mon, 21 Feb 2011 17:37:09 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Detecting-unique-values-across-variables/m-p/13726#M1658</guid>
      <dc:creator>polingjw</dc:creator>
      <dc:date>2011-02-21T17:37:09Z</dc:date>
    </item>
    <item>
      <title>Re: Detecting unique values across variables</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Detecting-unique-values-across-variables/m-p/13727#M1659</link>
      <description>See how you single statement performs if you use variable name references instead of array reference.</description>
      <pubDate>Mon, 21 Feb 2011 18:46:29 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Detecting-unique-values-across-variables/m-p/13727#M1659</guid>
      <dc:creator>data_null__</dc:creator>
      <dc:date>2011-02-21T18:46:29Z</dc:date>
    </item>
    <item>
      <title>Re: Detecting unique values across variables</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Detecting-unique-values-across-variables/m-p/13728#M1660</link>
      <description>Hi data _null_,&lt;BR /&gt;
&lt;BR /&gt;
I don’t get it.  Don’t all three programs rely on array references?  Please help me to understand.&lt;BR /&gt;
&lt;BR /&gt;
Overall, it seems to me that Chang’s program is probably the best answer.  His is the simplest program, it is comparable to the macro program that I posted in terms of efficiency (for my test dataset anyway), and I can see how it’s less problematic than using macros.  I created the macro only because I was curious to see how using a single statement would compare to the other two excellent suggestions in terms of efficiency.  Since I personally like Chang’s solution better than my own, I almost did not post my solution.  But, then again, I suspected that if I did post the macro this thread could turn into a good learning experience for myself &lt;span class="lia-unicode-emoji" title=":slightly_smiling_face:"&gt;🙂&lt;/span&gt;&lt;BR /&gt;
&lt;BR /&gt;
Thanks again.</description>
      <pubDate>Mon, 21 Feb 2011 19:53:38 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Detecting-unique-values-across-variables/m-p/13728#M1660</guid>
      <dc:creator>polingjw</dc:creator>
      <dc:date>2011-02-21T19:53:38Z</dc:date>
    </item>
    <item>
      <title>Re: Detecting unique values across variables</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Detecting-unique-values-across-variables/m-p/13729#M1661</link>
      <description>My hypothesis is that &lt;BR /&gt;
&lt;BR /&gt;
var1 eq var2&lt;BR /&gt;
is faster than&lt;BR /&gt;
var[1] eq var[2]&lt;BR /&gt;
&lt;BR /&gt;
I will easy to test since your variable names are VARn, a bit harder to generalize.</description>
      <pubDate>Mon, 21 Feb 2011 20:05:31 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Detecting-unique-values-across-variables/m-p/13729#M1661</guid>
      <dc:creator>data_null__</dc:creator>
      <dc:date>2011-02-21T20:05:31Z</dc:date>
    </item>
    <item>
      <title>Re: Detecting unique values across variables</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Detecting-unique-values-across-variables/m-p/13730#M1662</link>
      <description>&amp;nbsp;&lt;BR /&gt;
@polingjw: Thanks for the nice words!&lt;BR /&gt;
&lt;BR /&gt;
I think _null_ has a point. On my box, polingjw2 seems to run faster than polingjw1 below.&lt;BR /&gt;
&lt;BR /&gt;
&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color:#008000;font-family:Courier New;font-size:10pt;"&gt;/*&amp;nbsp;test&amp;nbsp;data&amp;nbsp;*/&lt;/SPAN&gt;&lt;BR /&gt;
&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;B&gt;&lt;SPAN style="color:#000080;font-family:Courier New;font-size:10pt;"&gt;data&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;test;&lt;/SPAN&gt;&lt;BR /&gt;
&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color:#0000FF;font-family:Courier New;font-size:10pt;"&gt;array&lt;/SPAN&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;var{&lt;/SPAN&gt;&lt;B&gt;&lt;SPAN style="color:#008080;font-family:Courier New;font-size:10pt;"&gt;20&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;};&lt;/SPAN&gt;&lt;BR /&gt;
&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color:#0000FF;font-family:Courier New;font-size:10pt;"&gt;do&lt;/SPAN&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;i&amp;nbsp;=&amp;nbsp;&lt;/SPAN&gt;&lt;B&gt;&lt;SPAN style="color:#008080;font-family:Courier New;font-size:10pt;"&gt;1&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color:#0000FF;font-family:Courier New;font-size:10pt;"&gt;to&lt;/SPAN&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;B&gt;&lt;SPAN style="color:#008080;font-family:Courier New;font-size:10pt;"&gt;1000000&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;;&lt;/SPAN&gt;&lt;BR /&gt;
&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color:#0000FF;font-family:Courier New;font-size:10pt;"&gt;do&lt;/SPAN&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;j=&lt;/SPAN&gt;&lt;B&gt;&lt;SPAN style="color:#008080;font-family:Courier New;font-size:10pt;"&gt;1&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color:#0000FF;font-family:Courier New;font-size:10pt;"&gt;to&lt;/SPAN&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;dim(var);&lt;/SPAN&gt;&lt;BR /&gt;
&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var{j}&amp;nbsp;=&amp;nbsp;floor(ranuni(&lt;/SPAN&gt;&lt;B&gt;&lt;SPAN style="color:#008080;font-family:Courier New;font-size:10pt;"&gt;0&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;)*&lt;/SPAN&gt;&lt;B&gt;&lt;SPAN style="color:#008080;font-family:Courier New;font-size:10pt;"&gt;300&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;);&lt;/SPAN&gt;&lt;BR /&gt;
&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color:#0000FF;font-family:Courier New;font-size:10pt;"&gt;end&lt;/SPAN&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;;&lt;/SPAN&gt;&lt;BR /&gt;
&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color:#0000FF;font-family:Courier New;font-size:10pt;"&gt;output&lt;/SPAN&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;;&lt;/SPAN&gt;&lt;BR /&gt;
&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color:#0000FF;font-family:Courier New;font-size:10pt;"&gt;end&lt;/SPAN&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;;&lt;/SPAN&gt;&lt;BR /&gt;
&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color:#0000FF;font-family:Courier New;font-size:10pt;"&gt;drop&lt;/SPAN&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;i&amp;nbsp;j;&lt;/SPAN&gt;&lt;BR /&gt;
&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;B&gt;&lt;SPAN style="color:#000080;font-family:Courier New;font-size:10pt;"&gt;run&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;;&lt;/SPAN&gt;&lt;BR /&gt;
&amp;nbsp;&lt;BR /&gt;
&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color:#0000FF;font-family:Courier New;font-size:10pt;"&gt;sasfile&lt;/SPAN&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;work.test.data&amp;nbsp;open;&lt;/SPAN&gt;&lt;BR /&gt;
&amp;nbsp;&lt;BR /&gt;
&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color:#008000;font-family:Courier New;font-size:10pt;"&gt;/*&amp;nbsp;dummy&amp;nbsp;step&amp;nbsp;to&amp;nbsp;load&amp;nbsp;the&amp;nbsp;data&amp;nbsp;into&amp;nbsp;sasfile.&lt;/SPAN&gt;&lt;BR /&gt;
&lt;SPAN style="color:#008000;font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;see&amp;nbsp;Mark^s&amp;nbsp;sas-l&amp;nbsp;posting&amp;nbsp;&lt;/SPAN&gt;&lt;BR /&gt;
&lt;SPAN style="color:#008000;font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;http://www.listserv.uga.edu/cgi-bin/wa?A2=ind1102B&amp;amp;L=sas-l&amp;amp;D=1&amp;amp;H=0&amp;amp;O=D&amp;amp;T=1&amp;amp;P=10531&amp;nbsp;*/&lt;/SPAN&gt;&lt;BR /&gt;
&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;B&gt;&lt;SPAN style="color:#000080;font-family:Courier New;font-size:10pt;"&gt;data&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color:#0000FF;font-family:Courier New;font-size:10pt;"&gt;_null_&lt;/SPAN&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;;&amp;nbsp;&lt;/SPAN&gt;&lt;BR /&gt;
&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color:#0000FF;font-family:Courier New;font-size:10pt;"&gt;set&lt;/SPAN&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;test;&lt;/SPAN&gt;&lt;BR /&gt;
&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;B&gt;&lt;SPAN style="color:#000080;font-family:Courier New;font-size:10pt;"&gt;run&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;;&lt;/SPAN&gt;&lt;BR /&gt;
&amp;nbsp;&lt;BR /&gt;
&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;B&gt;&lt;SPAN style="color:#000080;font-family:Courier New;font-size:10pt;"&gt;%macro&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;ne(array,&amp;nbsp;elements);&lt;/SPAN&gt;&lt;BR /&gt;
&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color:#0000FF;font-family:Courier New;font-size:10pt;"&gt;%do&lt;/SPAN&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;i&amp;nbsp;=&amp;nbsp;&lt;/SPAN&gt;&lt;B&gt;&lt;SPAN style="color:#008080;font-family:Courier New;font-size:10pt;"&gt;1&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color:#0000FF;font-family:Courier New;font-size:10pt;"&gt;%to&lt;/SPAN&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color:#0000FF;font-family:Courier New;font-size:10pt;"&gt;%eval&lt;/SPAN&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;(&amp;amp;elements-&lt;/SPAN&gt;&lt;B&gt;&lt;SPAN style="color:#008080;font-family:Courier New;font-size:10pt;"&gt;2&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;);&lt;/SPAN&gt;&lt;BR /&gt;
&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color:#0000FF;font-family:Courier New;font-size:10pt;"&gt;%do&lt;/SPAN&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;j&amp;nbsp;=&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color:#0000FF;font-family:Courier New;font-size:10pt;"&gt;%eval&lt;/SPAN&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;(&amp;amp;i+&lt;/SPAN&gt;&lt;B&gt;&lt;SPAN style="color:#008080;font-family:Courier New;font-size:10pt;"&gt;1&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;)&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color:#0000FF;font-family:Courier New;font-size:10pt;"&gt;%to&lt;/SPAN&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;amp;elements;&lt;/SPAN&gt;&lt;BR /&gt;
&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(&amp;amp;array[&amp;amp;i]&amp;nbsp;ne&amp;nbsp;&amp;amp;array[&amp;amp;j])&amp;nbsp;&amp;amp;&lt;/SPAN&gt;&lt;BR /&gt;
&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color:#0000FF;font-family:Courier New;font-size:10pt;"&gt;%end&lt;/SPAN&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;;&lt;/SPAN&gt;&lt;BR /&gt;
&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color:#0000FF;font-family:Courier New;font-size:10pt;"&gt;%end&lt;/SPAN&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;;&lt;/SPAN&gt;&lt;BR /&gt;
&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(&amp;amp;array[&lt;/SPAN&gt;&lt;SPAN style="color:#0000FF;font-family:Courier New;font-size:10pt;"&gt;%eval&lt;/SPAN&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;(&amp;amp;elements-&lt;/SPAN&gt;&lt;B&gt;&lt;SPAN style="color:#008080;font-family:Courier New;font-size:10pt;"&gt;1&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;)]&amp;nbsp;ne&amp;nbsp;&amp;amp;array[&amp;amp;elements])&lt;/SPAN&gt;&lt;BR /&gt;
&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;B&gt;&lt;SPAN style="color:#000080;font-family:Courier New;font-size:10pt;"&gt;%mend&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;;&lt;/SPAN&gt;&lt;BR /&gt;
&amp;nbsp;&lt;BR /&gt;
&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;B&gt;&lt;SPAN style="color:#000080;font-family:Courier New;font-size:10pt;"&gt;data&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;polingjw1;&lt;/SPAN&gt;&lt;BR /&gt;
&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color:#0000FF;font-family:Courier New;font-size:10pt;"&gt;set&lt;/SPAN&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;test;&lt;/SPAN&gt;&lt;BR /&gt;
&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color:#0000FF;font-family:Courier New;font-size:10pt;"&gt;array&lt;/SPAN&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;var&lt;LI&gt;&amp;nbsp;var:;&lt;/LI&gt;&lt;/SPAN&gt;&lt;BR /&gt;
&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;unique&amp;nbsp;=&amp;nbsp;(%&lt;/SPAN&gt;&lt;B&gt;&lt;I&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;ne&lt;/SPAN&gt;&lt;/I&gt;&lt;/B&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;(var,&amp;nbsp;&lt;/SPAN&gt;&lt;B&gt;&lt;SPAN style="color:#008080;font-family:Courier New;font-size:10pt;"&gt;20&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;));&lt;/SPAN&gt;&lt;BR /&gt;
&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;B&gt;&lt;SPAN style="color:#000080;font-family:Courier New;font-size:10pt;"&gt;run&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;BR /&gt;
&amp;nbsp;&lt;BR /&gt;
&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;B&gt;&lt;SPAN style="color:#000080;font-family:Courier New;font-size:10pt;"&gt;%macro&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;allDiff(root=,&amp;nbsp;dim=);&lt;/SPAN&gt;&lt;BR /&gt;
&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color:#0000FF;font-family:Courier New;font-size:10pt;"&gt;%local&lt;/SPAN&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;i&amp;nbsp;j&amp;nbsp;maxi&amp;nbsp;minj;&lt;/SPAN&gt;&lt;BR /&gt;
&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color:#0000FF;font-family:Courier New;font-size:10pt;"&gt;%let&lt;/SPAN&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;maxi&amp;nbsp;=&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color:#0000FF;font-family:Courier New;font-size:10pt;"&gt;%eval&lt;/SPAN&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;(&amp;amp;dim&amp;nbsp;-&amp;nbsp;2);&lt;/SPAN&gt;&lt;BR /&gt;
&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color:#0000FF;font-family:Courier New;font-size:10pt;"&gt;%do&lt;/SPAN&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;i&amp;nbsp;=&amp;nbsp;&lt;/SPAN&gt;&lt;B&gt;&lt;SPAN style="color:#008080;font-family:Courier New;font-size:10pt;"&gt;1&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color:#0000FF;font-family:Courier New;font-size:10pt;"&gt;%to&lt;/SPAN&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;amp;maxi;&lt;/SPAN&gt;&lt;BR /&gt;
&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color:#0000FF;font-family:Courier New;font-size:10pt;"&gt;%let&lt;/SPAN&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;minj&amp;nbsp;=&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color:#0000FF;font-family:Courier New;font-size:10pt;"&gt;%eval&lt;/SPAN&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;(&amp;amp;i&amp;nbsp;+&amp;nbsp;1);&lt;/SPAN&gt;&lt;BR /&gt;
&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color:#0000FF;font-family:Courier New;font-size:10pt;"&gt;%do&lt;/SPAN&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;j&amp;nbsp;=&amp;nbsp;&amp;amp;minj&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color:#0000FF;font-family:Courier New;font-size:10pt;"&gt;%to&lt;/SPAN&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;amp;dim;&lt;/SPAN&gt;&lt;BR /&gt;
&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;%&lt;/SPAN&gt;&lt;SPAN style="color:#008000;font-family:Courier New;font-size:10pt;"&gt;*;&lt;/SPAN&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;amp;&lt;/SPAN&gt;&lt;SPAN style="color:#008080;font-family:Courier New;font-size:10pt;"&gt;root.&lt;/SPAN&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;amp;i&amp;nbsp;ne&amp;nbsp;&amp;amp;root&amp;amp;j&amp;nbsp;&amp;amp;&lt;/SPAN&gt;&lt;BR /&gt;
&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color:#0000FF;font-family:Courier New;font-size:10pt;"&gt;%end&lt;/SPAN&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;;&lt;/SPAN&gt;&lt;BR /&gt;
&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color:#0000FF;font-family:Courier New;font-size:10pt;"&gt;%end&lt;/SPAN&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;;&lt;/SPAN&gt;&lt;BR /&gt;
&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;amp;&lt;/SPAN&gt;&lt;SPAN style="color:#008080;font-family:Courier New;font-size:10pt;"&gt;root.&lt;/SPAN&gt;&lt;SPAN style="color:#0000FF;font-family:Courier New;font-size:10pt;"&gt;%eval&lt;/SPAN&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;(&amp;amp;dim&amp;nbsp;-&amp;nbsp;&lt;/SPAN&gt;&lt;B&gt;&lt;SPAN style="color:#008080;font-family:Courier New;font-size:10pt;"&gt;1&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;)&amp;nbsp;ne&amp;nbsp;&amp;amp;&lt;/SPAN&gt;&lt;SPAN style="color:#008080;font-family:Courier New;font-size:10pt;"&gt;root.&lt;/SPAN&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;amp;dim&lt;/SPAN&gt;&lt;BR /&gt;
&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;B&gt;&lt;SPAN style="color:#000080;font-family:Courier New;font-size:10pt;"&gt;%mend&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;allDiff;&lt;/SPAN&gt;&lt;BR /&gt;
&amp;nbsp;&lt;BR /&gt;
&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color:#008000;font-family:Courier New;font-size:10pt;"&gt;/*&amp;nbsp;using&amp;nbsp;no&amp;nbsp;arrays&amp;nbsp;but&amp;nbsp;the&amp;nbsp;variable&amp;nbsp;names&amp;nbsp;directly.&amp;nbsp;it&amp;nbsp;also&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;BR /&gt;
&lt;SPAN style="color:#008000;font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;takes&amp;nbsp;advantage&amp;nbsp;of&amp;nbsp;if&amp;nbsp;expression&amp;nbsp;short-circuiting&amp;nbsp;as&amp;nbsp;well.&lt;/SPAN&gt;&lt;BR /&gt;
&lt;SPAN style="color:#008000;font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;see&amp;nbsp;this&amp;nbsp;and&amp;nbsp;the&amp;nbsp;thread&amp;nbsp;mentioned&amp;nbsp;in&amp;nbsp;it:&lt;/SPAN&gt;&lt;BR /&gt;
&lt;SPAN style="color:#008000;font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;http://www.listserv.uga.edu/cgi-bin/wa?A2=ind0406D&amp;amp;L=sas-l&amp;amp;D=1&amp;amp;H=0&amp;amp;O=D&amp;amp;T=1&amp;amp;P=45708&amp;nbsp;*/&lt;/SPAN&gt;&lt;BR /&gt;
&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;B&gt;&lt;SPAN style="color:#000080;font-family:Courier New;font-size:10pt;"&gt;data&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;polingjw2;&lt;/SPAN&gt;&lt;BR /&gt;
&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color:#0000FF;font-family:Courier New;font-size:10pt;"&gt;set&lt;/SPAN&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;test;&lt;/SPAN&gt;&lt;BR /&gt;
&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color:#0000FF;font-family:Courier New;font-size:10pt;"&gt;if&lt;/SPAN&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;%&lt;/SPAN&gt;&lt;B&gt;&lt;I&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;allDiff&lt;/SPAN&gt;&lt;/I&gt;&lt;/B&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;(root=var,&amp;nbsp;dim=&lt;/SPAN&gt;&lt;B&gt;&lt;SPAN style="color:#008080;font-family:Courier New;font-size:10pt;"&gt;20&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;)&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color:#0000FF;font-family:Courier New;font-size:10pt;"&gt;then&lt;/SPAN&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;unique&amp;nbsp;=&amp;nbsp;&lt;/SPAN&gt;&lt;B&gt;&lt;SPAN style="color:#008080;font-family:Courier New;font-size:10pt;"&gt;1&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;;&lt;/SPAN&gt;&lt;BR /&gt;
&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color:#0000FF;font-family:Courier New;font-size:10pt;"&gt;else&lt;/SPAN&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;unique&amp;nbsp;=&amp;nbsp;&lt;/SPAN&gt;&lt;B&gt;&lt;SPAN style="color:#008080;font-family:Courier New;font-size:10pt;"&gt;0&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;;&lt;/SPAN&gt;&lt;BR /&gt;
&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;B&gt;&lt;SPAN style="color:#000080;font-family:Courier New;font-size:10pt;"&gt;run&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;;&lt;/SPAN&gt;&lt;BR /&gt;
&amp;nbsp;&lt;BR /&gt;
&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color:#0000FF;font-family:Courier New;font-size:10pt;"&gt;sasfile&lt;/SPAN&gt;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;&amp;nbsp;work.test.data&amp;nbsp;close;&lt;/SPAN&gt;&lt;BR /&gt;
&amp;nbsp;</description>
      <pubDate>Mon, 21 Feb 2011 20:46:06 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Detecting-unique-values-across-variables/m-p/13730#M1662</guid>
      <dc:creator>chang_y_chung_hotmail_com</dc:creator>
      <dc:date>2011-02-21T20:46:06Z</dc:date>
    </item>
    <item>
      <title>Re: Detecting unique values across variables</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Detecting-unique-values-across-variables/m-p/13731#M1663</link>
      <description>A quick question about your last posting...  Wouldn’t using a LOAD option on the SASFILE statement eliminate the need for the dummy step?&lt;BR /&gt;
&lt;BR /&gt;
[pre]&lt;BR /&gt;
sasfile work.test.data load;&lt;BR /&gt;
[/pre]</description>
      <pubDate>Tue, 22 Feb 2011 11:39:59 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Detecting-unique-values-across-variables/m-p/13731#M1663</guid>
      <dc:creator>polingjw</dc:creator>
      <dc:date>2011-02-22T11:39:59Z</dc:date>
    </item>
    <item>
      <title>Re: Detecting unique values across variables</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Detecting-unique-values-across-variables/m-p/13732#M1664</link>
      <description>@polingjw: Yep. You are absolutely correct. I should have used load instead of open. Thanks.</description>
      <pubDate>Tue, 22 Feb 2011 14:31:45 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Detecting-unique-values-across-variables/m-p/13732#M1664</guid>
      <dc:creator>chang_y_chung_hotmail_com</dc:creator>
      <dc:date>2011-02-22T14:31:45Z</dc:date>
    </item>
    <item>
      <title>Re: Detecting unique values across variables</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Detecting-unique-values-across-variables/m-p/13733#M1665</link>
      <description>Wow! Nice to see so many ways to do this. Here you go My contribution.&lt;BR /&gt;
Another Method using dictionary tables  :).   &lt;BR /&gt;
&lt;BR /&gt;
/*Creating test data */&lt;BR /&gt;
data test;&lt;BR /&gt;
array var{5};&lt;BR /&gt;
do j=1 to 10;&lt;BR /&gt;
do i=1 to dim(var);&lt;BR /&gt;
 var{i}= floor(ranuni(0)*60);&lt;BR /&gt;
end;&lt;BR /&gt;
output;&lt;BR /&gt;
end;&lt;BR /&gt;
drop i j;&lt;BR /&gt;
run;&lt;BR /&gt;
&lt;BR /&gt;
/* here it checks the uniqueness. Doing a not to get 1 for uniquenes */&lt;BR /&gt;
data t;&lt;BR /&gt;
set test;&lt;BR /&gt;
unique=&lt;B&gt;not(var1=var2=var3=var4=var5)&lt;/B&gt;;&lt;BR /&gt;
run;&lt;BR /&gt;
&lt;BR /&gt;
/* Taking the numeric column name from the sashelp.vcolumn(dictionary) and creating a macro */&lt;BR /&gt;
proc sql;&lt;BR /&gt;
select name INTO :VARS SEPARATED BY '=' from sashelp.Vcolumn where libname='WORK'&lt;BR /&gt;
and memname='TEST' and type='num';&lt;BR /&gt;
quit;&lt;BR /&gt;
&lt;BR /&gt;
%PUT &amp;amp;VARS.;&lt;BR /&gt;
DATA T;&lt;BR /&gt;
SET TEST;&lt;BR /&gt;
UNIQUE=NOT(&amp;amp;VARS);&lt;BR /&gt;
RUN;&lt;BR /&gt;
&lt;BR /&gt;
I've not done bench mark against the other methods to see the performance though.</description>
      <pubDate>Tue, 22 Feb 2011 20:53:19 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Detecting-unique-values-across-variables/m-p/13733#M1665</guid>
      <dc:creator>jonam</dc:creator>
      <dc:date>2011-02-22T20:53:19Z</dc:date>
    </item>
    <item>
      <title>Re: Detecting unique values across variables</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Detecting-unique-values-across-variables/m-p/13734#M1666</link>
      <description>@jonam: A good try! Unfortunately, however, your code is incorrect (unless you have only two variables). The reason is simply that the negation of "all same" is &lt;I&gt;not&lt;/I&gt; "all different."&lt;BR /&gt;&lt;BR /&gt;
&lt;BR /&gt;&lt;BR /&gt;
Your SAS expression&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;not(var1=var2=var3=var4)&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;
is a shorthand form of&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;not (var1=var2 &amp;amp; var2=var3 &amp;amp; var3=var4)&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;
And this is equivalent to&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="font-family:Courier New;font-size:10pt;"&gt;(var1^=var2 | var2^=var3 | var3^=var4)&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;
&lt;BR /&gt;&lt;BR /&gt;
This evaluates true, if any of the adjacent pairs happens to be different, &lt;I&gt;even&lt;/I&gt; when the others are the same.</description>
      <pubDate>Wed, 23 Feb 2011 14:46:40 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Detecting-unique-values-across-variables/m-p/13734#M1666</guid>
      <dc:creator>chang_y_chung_hotmail_com</dc:creator>
      <dc:date>2011-02-23T14:46:40Z</dc:date>
    </item>
    <item>
      <title>Re: Detecting unique values across variables</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Detecting-unique-values-across-variables/m-p/13735#M1667</link>
      <description>@chang.&lt;BR /&gt;
&lt;BR /&gt;
Oh! you are absolutely right!  Thanks a lot for pointing that out....I've taken a different approach.&lt;BR /&gt;
&lt;BR /&gt;
/*Creating test data */&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
data test;&lt;BR /&gt;
&lt;BR /&gt;
     do i = 1 to 4;&lt;BR /&gt;
&lt;BR /&gt;
       do j = 1 to 4;&lt;BR /&gt;
&lt;BR /&gt;
         do k = 1 to 4;&lt;BR /&gt;
&lt;BR /&gt;
           output;&lt;BR /&gt;
&lt;BR /&gt;
         end;&lt;BR /&gt;
&lt;BR /&gt;
       end;&lt;BR /&gt;
&lt;BR /&gt;
     end;&lt;BR /&gt;
&lt;BR /&gt;
   run;&lt;BR /&gt;
&lt;BR /&gt;
/* Taking the numeric column name from the sashelp.vcolumn(dictionary) and creating a macro */&lt;BR /&gt;
proc sql;&lt;BR /&gt;
select compress(name), count(name) INTO :VARS  SEPARATED BY ' ',:max from sashelp.Vcolumn where libname='WORK'&lt;BR /&gt;
and memname='TEST' and type='num';&lt;BR /&gt;
quit;&lt;BR /&gt;
&lt;BR /&gt;
%PUT &amp;amp;VARS.;&lt;BR /&gt;
/*&lt;BR /&gt;
Samevar: to avoid comparing the same variable&lt;BR /&gt;
Next     : Once identified equal Move to next observation&lt;BR /&gt;
*/&lt;BR /&gt;
&lt;BR /&gt;
option obs=max;&lt;BR /&gt;
DATA T;&lt;BR /&gt;
SET TEST;&lt;BR /&gt;
array  a{*} &amp;amp;vars.;&lt;BR /&gt;
end=&amp;amp;max.;&lt;BR /&gt;
flag=0;&lt;BR /&gt;
do l=1 to end;&lt;BR /&gt;
  unique=1;&lt;BR /&gt;
  do l1=2 to end;&lt;BR /&gt;
	if l=l1 then go to &lt;B&gt;Samevar;&lt;/B&gt;&lt;BR /&gt;
	if a{l}=a{l1} then&lt;BR /&gt;
	do;&lt;BR /&gt;
	 	unique=0;&lt;BR /&gt;
		flag=1;&lt;BR /&gt;
       end;&lt;BR /&gt;
       if flag=1 then go to &lt;B&gt;next;&lt;/B&gt;&lt;BR /&gt;
  end;&lt;B&gt;&lt;BR /&gt;
Samevar:&lt;/B&gt;&lt;BR /&gt;
end;&lt;BR /&gt;
&lt;B&gt;next:&lt;/B&gt;&lt;BR /&gt;
drop l l1 end flag; &lt;BR /&gt;
RUN;

removed the old method.&lt;BR /&gt;
&lt;BR /&gt;
    &lt;BR /&gt;
Message was edited by: jonam</description>
      <pubDate>Wed, 23 Feb 2011 21:54:49 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Detecting-unique-values-across-variables/m-p/13735#M1667</guid>
      <dc:creator>jonam</dc:creator>
      <dc:date>2011-02-23T21:54:49Z</dc:date>
    </item>
    <item>
      <title>Re: Detecting unique values across variables</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Detecting-unique-values-across-variables/m-p/13736#M1668</link>
      <description>Dear Arthur.Carpenter:&lt;BR /&gt;
 I do not know whether you like hash table, I use it find another way.&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
[pre]&lt;BR /&gt;
data temp;&lt;BR /&gt;
   do i = 1 to 4;&lt;BR /&gt;
      do j = 1 to 4;&lt;BR /&gt;
         do k = 1 to 4;&lt;BR /&gt;
           output;&lt;BR /&gt;
         end;&lt;BR /&gt;
        end;&lt;BR /&gt;
    end;&lt;BR /&gt;
run;&lt;BR /&gt;
&lt;BR /&gt;
data result(drop=rc count _n id);&lt;BR /&gt;
 set temp;&lt;BR /&gt;
 declare hash hh(hashexp: 10);&lt;BR /&gt;
 declare hiter ff('hh');&lt;BR /&gt;
 hh.definekey('id');&lt;BR /&gt;
 hh.definedone();&lt;BR /&gt;
 array var{*} i--k;&lt;BR /&gt;
 do _n=1 to dim(var);&lt;BR /&gt;
  id=var{_n};&lt;BR /&gt;
  hh.replace();&lt;BR /&gt;
 end;&lt;BR /&gt;
 count=0;&lt;BR /&gt;
 rc=ff.first();&lt;BR /&gt;
 do while(rc=0);&lt;BR /&gt;
  count+1;&lt;BR /&gt;
  rc=ff.next();&lt;BR /&gt;
 end;&lt;BR /&gt;
 if count=dim(var) then flag=1;&lt;BR /&gt;
  else flag=0;&lt;BR /&gt;
run;&lt;BR /&gt;
[/pre]&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
Ksharp</description>
      <pubDate>Mon, 28 Feb 2011 01:52:10 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Detecting-unique-values-across-variables/m-p/13736#M1668</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2011-02-28T01:52:10Z</dc:date>
    </item>
  </channel>
</rss>

