<?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: Processing by Group in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Processing-by-Group/m-p/367234#M275289</link>
    <description>&lt;P&gt;Like this?&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;
proc sql;
   select a.NAME
        , a.ORDER
        , b.KEY_A 
        , b.MATCH_TYPE_A
        , c.KEY_B 
        , c.MATCH_TYPE_B
   from   HAVE                       a
        left join
          (select NAME, KEY_A, MATCH_TYPE_A  
           from HAVE
           group by NAME
           having MATCH_TYPE_A=max(MATCH_TYPE_A)
          )                         b
        on a.NAME  = b.NAME
        left join
          (select NAME, KEY_B, MATCH_TYPE_B  
           from HAVE
           group by NAME
           having MATCH_TYPE_B=max(MATCH_TYPE_B)
           )                         c
         on a.NAME  = c.NAME ;
; quit;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;DIV class="branch"&gt;&lt;A name="IDX" target="_blank"&gt;&lt;/A&gt;
&lt;DIV&gt;
&lt;DIV align="center"&gt;
&lt;TABLE class="table" rules="all" frame="box" cellspacing="0" cellpadding="5" summary="Procedure SQL: Query Results"&gt;&lt;COLGROUP&gt; &lt;COL /&gt; &lt;COL /&gt; &lt;COL /&gt; &lt;COL /&gt; &lt;COL /&gt; &lt;COL /&gt;&lt;/COLGROUP&gt;
&lt;THEAD&gt;
&lt;TR&gt;
&lt;TH class="l b header" scope="col"&gt;NAME&lt;/TH&gt;
&lt;TH class="r b header" scope="col"&gt;ORDER&lt;/TH&gt;
&lt;TH class="r b header" scope="col"&gt;KEY_A&lt;/TH&gt;
&lt;TH class="r b header" scope="col"&gt;MATCH_TYPE_A&lt;/TH&gt;
&lt;TH class="r b header" scope="col"&gt;KEY_B&lt;/TH&gt;
&lt;TH class="r b header" scope="col"&gt;MATCH_TYPE_B&lt;/TH&gt;
&lt;/TR&gt;
&lt;/THEAD&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class="l data"&gt;aaa&lt;/TD&gt;
&lt;TD class="r data"&gt;1&lt;/TD&gt;
&lt;TD class="r data"&gt;111&lt;/TD&gt;
&lt;TD class="r data"&gt;1&lt;/TD&gt;
&lt;TD class="r data"&gt;222&lt;/TD&gt;
&lt;TD class="r data"&gt;3&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="l data"&gt;aaa&lt;/TD&gt;
&lt;TD class="r data"&gt;2&lt;/TD&gt;
&lt;TD class="r data"&gt;111&lt;/TD&gt;
&lt;TD class="r data"&gt;1&lt;/TD&gt;
&lt;TD class="r data"&gt;222&lt;/TD&gt;
&lt;TD class="r data"&gt;3&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="l data"&gt;bbb&lt;/TD&gt;
&lt;TD class="r data"&gt;1&lt;/TD&gt;
&lt;TD class="r data"&gt;333&lt;/TD&gt;
&lt;TD class="r data"&gt;1&lt;/TD&gt;
&lt;TD class="r data"&gt;444&lt;/TD&gt;
&lt;TD class="r data"&gt;3&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="l data"&gt;bbb&lt;/TD&gt;
&lt;TD class="r data"&gt;2&lt;/TD&gt;
&lt;TD class="r data"&gt;333&lt;/TD&gt;
&lt;TD class="r data"&gt;1&lt;/TD&gt;
&lt;TD class="r data"&gt;444&lt;/TD&gt;
&lt;TD class="r data"&gt;3&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Thu, 15 Jun 2017 06:35:52 GMT</pubDate>
    <dc:creator>ChrisNZ</dc:creator>
    <dc:date>2017-06-15T06:35:52Z</dc:date>
    <item>
      <title>Processing by Group</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Processing-by-Group/m-p/367095#M275284</link>
      <description>&lt;P&gt;Hello,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I wanted to get your opinion on how some of you would handle the problem I have. I have grouped data that i need processed a particular way. For each group (name), i would like to always retain the key associated with the best match type for that group, as well as the corresponding match type.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The match types for each of the "keys"&amp;nbsp;are ordered from 1 to 10, with 1 being the best match for that key, and 10 the worst. So basically I want to over-write any record that isn't the "best match" within each group for each key type.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Please let me know if you need any further explanation of what I'm tying to accomplish...Thanks in advance!&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT color="#000080" face="Segoe UI" size="1"&gt;&lt;STRONG&gt;data&lt;/STRONG&gt;&lt;/FONT&gt;&lt;FONT face="Segoe UI" size="1"&gt; have1;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color="#0000ff" face="Segoe UI" size="1"&gt;input&lt;/FONT&gt;&lt;FONT face="Segoe UI" size="1"&gt; name $ &lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Segoe UI" size="1"&gt;3.&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Segoe UI" size="1"&gt; order &lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Segoe UI" size="1"&gt;2.&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Segoe UI" size="1"&gt; key_a &lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Segoe UI" size="1"&gt;4.&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Segoe UI" size="1"&gt; match_type_a &lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Segoe UI" size="1"&gt;2.&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Segoe UI" size="1"&gt; key_b &lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Segoe UI" size="1"&gt;4.&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Segoe UI" size="1"&gt; match_type_b &lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Segoe UI" size="1"&gt;2.&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Segoe UI" size="1"&gt;;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color="#0000ff" face="Segoe UI" size="1"&gt;datalines&lt;/FONT&gt;&lt;FONT face="Segoe UI" size="1"&gt; ;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;aaa 1 111 1 . 10&lt;/P&gt;
&lt;P&gt;aaa 2 . 10 222 3&lt;/P&gt;
&lt;P&gt;bbb 1 333 1 . 10&lt;/P&gt;
&lt;P&gt;bbb 2 . 10 444 3&lt;/P&gt;
&lt;P&gt;;&lt;/P&gt;
&lt;P&gt;&lt;FONT color="#000080" face="Segoe UI" size="1"&gt;&lt;STRONG&gt;run&lt;/STRONG&gt;&lt;/FONT&gt;&lt;FONT face="Segoe UI" size="1"&gt;; &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT face="Segoe UI" size="1"&gt;Want:&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;TABLE width="621"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="87"&gt;name&lt;/TD&gt;
&lt;TD width="122"&gt;order&lt;/TD&gt;
&lt;TD width="79"&gt;key_a&lt;/TD&gt;
&lt;TD width="133"&gt;match_type_a&lt;/TD&gt;
&lt;TD width="79"&gt;key_b&lt;/TD&gt;
&lt;TD width="121"&gt;match_type_b&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;aaa&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;111&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;222&lt;/TD&gt;
&lt;TD&gt;3&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;aaa&lt;/TD&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;TD&gt;111&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;222&lt;/TD&gt;
&lt;TD&gt;3&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;bbb&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;333&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;444&lt;/TD&gt;
&lt;TD&gt;3&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;bbb&lt;/TD&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;TD&gt;333&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;444&lt;/TD&gt;
&lt;TD&gt;3&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;</description>
      <pubDate>Wed, 14 Jun 2017 18:34:26 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Processing-by-Group/m-p/367095#M275284</guid>
      <dc:creator>triley</dc:creator>
      <dc:date>2017-06-14T18:34:26Z</dc:date>
    </item>
    <item>
      <title>Re: Processing by Group</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Processing-by-Group/m-p/367117#M275285</link>
      <description>&lt;P&gt;How do we know which is "BEST" match for a key? A rule please as I doubt that your example covered all of the cases.&lt;/P&gt;</description>
      <pubDate>Wed, 14 Jun 2017 19:20:43 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Processing-by-Group/m-p/367117#M275285</guid>
      <dc:creator>ballardw</dc:creator>
      <dc:date>2017-06-14T19:20:43Z</dc:date>
    </item>
    <item>
      <title>Re: Processing by Group</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Processing-by-Group/m-p/367121#M275286</link>
      <description>&lt;P&gt;The lowest number would be the best...so for the by group "name" where name = 'aaa', there are 2 match_type_a's (1 and 10) so for key_a I would always want to see where name = 'aaa' for there to be key_a = 111 and match_type_a = 1.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Essentially, 10 means there wasn't a match, which is why no key is associated with key_a or key_b where the match_type's = 10.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;But there could be groups that have more than 1 non-null&amp;nbsp;&amp;nbsp;key_a's for example , which is why they match_type is important (i would want to keep the key associated with the lowest match type for each name).&lt;/P&gt;</description>
      <pubDate>Wed, 14 Jun 2017 19:30:35 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Processing-by-Group/m-p/367121#M275286</guid>
      <dc:creator>triley</dc:creator>
      <dc:date>2017-06-14T19:30:35Z</dc:date>
    </item>
    <item>
      <title>Re: Processing by Group</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Processing-by-Group/m-p/367173#M275287</link>
      <description>&lt;P&gt;I can't follow your logic with the data and rules you've shown. Can you try and make it more clear please?&lt;/P&gt;
&lt;P&gt;I suspect this is why you haven't received an answer yet, as otherwise questions like this are answered fairly promptly.&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 14 Jun 2017 23:13:41 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Processing-by-Group/m-p/367173#M275287</guid>
      <dc:creator>Reeza</dc:creator>
      <dc:date>2017-06-14T23:13:41Z</dc:date>
    </item>
    <item>
      <title>Re: Processing by Group</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Processing-by-Group/m-p/367224#M275288</link>
      <description>If I understand you correctly, this type of logic is usually performed by first sorting the data set (by name and_match_type). Then use retain to propagate the correct let to all rows for that name. &lt;BR /&gt;Hint 1: use set by, and first. and last. logic.&lt;BR /&gt;Hint 2: you need to this twice since you have a and b set of variables.</description>
      <pubDate>Thu, 15 Jun 2017 04:57:28 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Processing-by-Group/m-p/367224#M275288</guid>
      <dc:creator>LinusH</dc:creator>
      <dc:date>2017-06-15T04:57:28Z</dc:date>
    </item>
    <item>
      <title>Re: Processing by Group</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Processing-by-Group/m-p/367234#M275289</link>
      <description>&lt;P&gt;Like this?&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;
proc sql;
   select a.NAME
        , a.ORDER
        , b.KEY_A 
        , b.MATCH_TYPE_A
        , c.KEY_B 
        , c.MATCH_TYPE_B
   from   HAVE                       a
        left join
          (select NAME, KEY_A, MATCH_TYPE_A  
           from HAVE
           group by NAME
           having MATCH_TYPE_A=max(MATCH_TYPE_A)
          )                         b
        on a.NAME  = b.NAME
        left join
          (select NAME, KEY_B, MATCH_TYPE_B  
           from HAVE
           group by NAME
           having MATCH_TYPE_B=max(MATCH_TYPE_B)
           )                         c
         on a.NAME  = c.NAME ;
; quit;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;DIV class="branch"&gt;&lt;A name="IDX" target="_blank"&gt;&lt;/A&gt;
&lt;DIV&gt;
&lt;DIV align="center"&gt;
&lt;TABLE class="table" rules="all" frame="box" cellspacing="0" cellpadding="5" summary="Procedure SQL: Query Results"&gt;&lt;COLGROUP&gt; &lt;COL /&gt; &lt;COL /&gt; &lt;COL /&gt; &lt;COL /&gt; &lt;COL /&gt; &lt;COL /&gt;&lt;/COLGROUP&gt;
&lt;THEAD&gt;
&lt;TR&gt;
&lt;TH class="l b header" scope="col"&gt;NAME&lt;/TH&gt;
&lt;TH class="r b header" scope="col"&gt;ORDER&lt;/TH&gt;
&lt;TH class="r b header" scope="col"&gt;KEY_A&lt;/TH&gt;
&lt;TH class="r b header" scope="col"&gt;MATCH_TYPE_A&lt;/TH&gt;
&lt;TH class="r b header" scope="col"&gt;KEY_B&lt;/TH&gt;
&lt;TH class="r b header" scope="col"&gt;MATCH_TYPE_B&lt;/TH&gt;
&lt;/TR&gt;
&lt;/THEAD&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class="l data"&gt;aaa&lt;/TD&gt;
&lt;TD class="r data"&gt;1&lt;/TD&gt;
&lt;TD class="r data"&gt;111&lt;/TD&gt;
&lt;TD class="r data"&gt;1&lt;/TD&gt;
&lt;TD class="r data"&gt;222&lt;/TD&gt;
&lt;TD class="r data"&gt;3&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="l data"&gt;aaa&lt;/TD&gt;
&lt;TD class="r data"&gt;2&lt;/TD&gt;
&lt;TD class="r data"&gt;111&lt;/TD&gt;
&lt;TD class="r data"&gt;1&lt;/TD&gt;
&lt;TD class="r data"&gt;222&lt;/TD&gt;
&lt;TD class="r data"&gt;3&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="l data"&gt;bbb&lt;/TD&gt;
&lt;TD class="r data"&gt;1&lt;/TD&gt;
&lt;TD class="r data"&gt;333&lt;/TD&gt;
&lt;TD class="r data"&gt;1&lt;/TD&gt;
&lt;TD class="r data"&gt;444&lt;/TD&gt;
&lt;TD class="r data"&gt;3&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="l data"&gt;bbb&lt;/TD&gt;
&lt;TD class="r data"&gt;2&lt;/TD&gt;
&lt;TD class="r data"&gt;333&lt;/TD&gt;
&lt;TD class="r data"&gt;1&lt;/TD&gt;
&lt;TD class="r data"&gt;444&lt;/TD&gt;
&lt;TD class="r data"&gt;3&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 15 Jun 2017 06:35:52 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Processing-by-Group/m-p/367234#M275289</guid>
      <dc:creator>ChrisNZ</dc:creator>
      <dc:date>2017-06-15T06:35:52Z</dc:date>
    </item>
    <item>
      <title>Re: Processing by Group</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Processing-by-Group/m-p/367330#M275290</link>
      <description>&lt;P&gt;i had to change the "max" to "min" but overall that seemed to work. thanks&lt;/P&gt;</description>
      <pubDate>Thu, 15 Jun 2017 12:11:20 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Processing-by-Group/m-p/367330#M275290</guid>
      <dc:creator>triley</dc:creator>
      <dc:date>2017-06-15T12:11:20Z</dc:date>
    </item>
  </channel>
</rss>

