<?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: Select top 3 records for each id in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Select-top-3-records-for-each-id/m-p/109157#M22691</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;data want;&lt;/P&gt;&lt;P&gt;do _n_=1 by 1 until(last.id);&lt;/P&gt;&lt;P&gt; set have;&lt;/P&gt;&lt;P&gt; by id;&lt;/P&gt;&lt;P&gt; if _n_ &amp;lt;= 3 then output;&lt;/P&gt;&lt;P&gt;end;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Sat, 27 Oct 2012 16:23:10 GMT</pubDate>
    <dc:creator>FriedEgg</dc:creator>
    <dc:date>2012-10-27T16:23:10Z</dc:date>
    <item>
      <title>Select top 3 records for each id</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Select-top-3-records-for-each-id/m-p/109156#M22690</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;there are 10 ids and scores,with varying records for each id. how to get top 3 records for each id based on score?&lt;/P&gt;&lt;P&gt;there is a function "TOP" in other SQL's, what is the equivalent in SAS?&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 27 Oct 2012 14:43:04 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Select-top-3-records-for-each-id/m-p/109156#M22690</guid>
      <dc:creator>SASPhile</dc:creator>
      <dc:date>2012-10-27T14:43:04Z</dc:date>
    </item>
    <item>
      <title>Re: Select top 3 records for each id</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Select-top-3-records-for-each-id/m-p/109157#M22691</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;data want;&lt;/P&gt;&lt;P&gt;do _n_=1 by 1 until(last.id);&lt;/P&gt;&lt;P&gt; set have;&lt;/P&gt;&lt;P&gt; by id;&lt;/P&gt;&lt;P&gt; if _n_ &amp;lt;= 3 then output;&lt;/P&gt;&lt;P&gt;end;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 27 Oct 2012 16:23:10 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Select-top-3-records-for-each-id/m-p/109157#M22691</guid>
      <dc:creator>FriedEgg</dc:creator>
      <dc:date>2012-10-27T16:23:10Z</dc:date>
    </item>
    <item>
      <title>Re: Select top 3 records for each id</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Select-top-3-records-for-each-id/m-p/109158#M22692</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;&lt;A __default_attr="733023" __jive_macro_name="user" class="jive_macro jive_macro_user" data-objecttype="3" href="https://communities.sas.com/"&gt;&lt;/A&gt; Of course that assumes that the data is pre-sorted and that ties aren't relevant.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 27 Oct 2012 16:45:35 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Select-top-3-records-for-each-id/m-p/109158#M22692</guid>
      <dc:creator>art297</dc:creator>
      <dc:date>2012-10-27T16:45:35Z</dc:date>
    </item>
    <item>
      <title>Re: Select top 3 records for each id</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Select-top-3-records-for-each-id/m-p/109159#M22693</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;If still choose SQL (SAS SQL in this case) and include ties:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data have;&lt;/P&gt;&lt;P&gt;input id $&amp;nbsp; value;&lt;/P&gt;&lt;P&gt;cards;&lt;/P&gt;&lt;P&gt;S12 -20&lt;/P&gt;&lt;P&gt;S12&amp;nbsp; 20&lt;/P&gt;&lt;P&gt;S12&amp;nbsp; 10&lt;/P&gt;&lt;P&gt;S12&amp;nbsp; 10&lt;/P&gt;&lt;P&gt;S12&amp;nbsp; 20&lt;/P&gt;&lt;P&gt;S12 -50&lt;/P&gt;&lt;P&gt;S13 -40&lt;/P&gt;&lt;P&gt;S13&amp;nbsp; 60&lt;/P&gt;&lt;P&gt;S13 -100&lt;/P&gt;&lt;P&gt;S14&amp;nbsp; 10&lt;/P&gt;&lt;P&gt;S14&amp;nbsp; 20&lt;/P&gt;&lt;P&gt;S14&amp;nbsp; 0&lt;/P&gt;&lt;P&gt;S14 -30&lt;/P&gt;&lt;P&gt;S14 -20&lt;/P&gt;&lt;P&gt;;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc sql;&lt;/P&gt;&lt;P&gt;select id,value from&lt;/P&gt;&lt;P&gt;&amp;nbsp; (select distinct b.id,b.value, a.value as avalue from have a&lt;/P&gt;&lt;P&gt;&amp;nbsp; left join have b&lt;/P&gt;&lt;P&gt;&amp;nbsp; on a.id=b.id)&lt;/P&gt;&lt;P&gt;group by id,value &lt;/P&gt;&lt;P&gt;having sum(avalue&amp;gt;=value)&amp;lt;=3;&lt;/P&gt;&lt;P&gt;quit;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Haikuo&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 28 Oct 2012 19:41:42 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Select-top-3-records-for-each-id/m-p/109159#M22693</guid>
      <dc:creator>Haikuo</dc:creator>
      <dc:date>2012-10-28T19:41:42Z</dc:date>
    </item>
    <item>
      <title>Re: Select top 3 records for each id</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Select-top-3-records-for-each-id/m-p/109160#M22694</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Yes, it relies upon the data being presorted, unlike sql, however the TOP clause itself is indiscriminate about and type of rank or ties, so that shouldn't be an issue to repeat functionality.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 28 Oct 2012 20:24:17 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Select-top-3-records-for-each-id/m-p/109160#M22694</guid>
      <dc:creator>FriedEgg</dc:creator>
      <dc:date>2012-10-28T20:24:17Z</dc:date>
    </item>
    <item>
      <title>Re: Select top 3 records for each id</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Select-top-3-records-for-each-id/m-p/109161#M22695</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;&lt;A __default_attr="4063" __jive_macro_name="user" class="jive_macro jive_macro_user" data-objecttype="3" href="https://communities.sas.com/"&gt;&lt;/A&gt;&amp;nbsp; I don't think that works as intended.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;A __default_attr="504807" __jive_macro_name="user" class="jive_macro jive_macro_user" data-objecttype="3" href="https://communities.sas.com/"&gt;&lt;/A&gt; You still haven't marked this question as being answered, thus everyone will still keep trying to come up with solutions.&amp;nbsp; I really think you are best off doing this in either a datastep or using a proc like proc rank.&amp;nbsp; However, since you asked how you might be able to do it using proc sql, here is a proc sql solution that takes ties into consideration (i.e., if there is a tie for the 3rd position, it will provide all records that have a value greater than of equal to the tied value).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Unfortunately, it has to be modified to account for the specific ids of interest.&amp;nbsp; I used Haikuo's example dataset, but added one record for testing purposes:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data have;&lt;/P&gt;&lt;P&gt;&amp;nbsp; input id $&amp;nbsp; value;&lt;/P&gt;&lt;P&gt;&amp;nbsp; cards;&lt;/P&gt;&lt;P&gt;S12 -20&lt;/P&gt;&lt;P&gt;S12&amp;nbsp; 20&lt;/P&gt;&lt;P&gt;S12&amp;nbsp; 10&lt;/P&gt;&lt;P&gt;S12&amp;nbsp; 10&lt;/P&gt;&lt;P&gt;S12&amp;nbsp; 20&lt;/P&gt;&lt;P&gt;S12 -50&lt;/P&gt;&lt;P&gt;S13 -40&lt;/P&gt;&lt;P&gt;S13 15&lt;/P&gt;&lt;P&gt;S13&amp;nbsp; 60&lt;/P&gt;&lt;P&gt;S13 -100&lt;/P&gt;&lt;P&gt;S14&amp;nbsp; 10&lt;/P&gt;&lt;P&gt;S14&amp;nbsp; 20&lt;/P&gt;&lt;P&gt;S14&amp;nbsp; 0&lt;/P&gt;&lt;P&gt;S14 -30&lt;/P&gt;&lt;P&gt;S14 -20&lt;/P&gt;&lt;P&gt;;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc sql;&lt;/P&gt;&lt;P&gt;&amp;nbsp; create table temp as&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; select *&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from have&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; where id="S12"&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; order by value desc&lt;/P&gt;&lt;P&gt;&amp;nbsp; ;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; create table S12 as&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; select id, value as bottom_value&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from temp (firstobs=3 obs=3)&lt;/P&gt;&lt;P&gt;&amp;nbsp; ;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; create table temp as&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; select *&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from have&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; where id="S13"&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; order by value desc&lt;/P&gt;&lt;P&gt;&amp;nbsp; ;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; create table S13 as&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; select id, value as bottom_value&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from temp (firstobs=3 obs=3)&lt;/P&gt;&lt;P&gt;&amp;nbsp; ;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; create table temp as&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; select *&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from have&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; where id="S14"&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; order by value desc&lt;/P&gt;&lt;P&gt;&amp;nbsp; ;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; create table S14 as&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; select id, value as bottom_value&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from temp (firstobs=3 obs=3)&lt;/P&gt;&lt;P&gt;&amp;nbsp; ;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; create table criteria as&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; select * from S12&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; union all select * from S13&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; union all select * from S14&lt;/P&gt;&lt;P&gt;&amp;nbsp; ;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; create table want (drop=count) as&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; select a.*,count(*) as count&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from have a&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; left join criteria b&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; on a.id=b.id&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; group by a.id&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; having a.value&amp;gt;=b.bottom_value&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; order by id, value desc&lt;/P&gt;&lt;P&gt;&amp;nbsp; ;&lt;/P&gt;&lt;P&gt;quit;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 28 Oct 2012 22:30:58 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Select-top-3-records-for-each-id/m-p/109161#M22695</guid>
      <dc:creator>art297</dc:creator>
      <dc:date>2012-10-28T22:30:58Z</dc:date>
    </item>
    <item>
      <title>Re: Select top 3 records for each id</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Select-top-3-records-for-each-id/m-p/109162#M22696</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;data have;&lt;/P&gt;&lt;P&gt;input id $&amp;nbsp; value @@;&lt;/P&gt;&lt;P&gt;cards;&lt;/P&gt;&lt;P&gt;S12 -20 S12&amp;nbsp; 20 S12&amp;nbsp; 10&lt;/P&gt;&lt;P&gt;S12&amp;nbsp; 10 S12&amp;nbsp; 20 S12 -50&lt;/P&gt;&lt;P&gt;S13 -40 S13&amp;nbsp; 60 S13 -100&lt;/P&gt;&lt;P&gt;S14&amp;nbsp; 10 S14&amp;nbsp; 20 S14&amp;nbsp; 0&lt;/P&gt;&lt;P&gt;S14 -30 S14 -20&lt;/P&gt;&lt;P&gt;;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc means data=have nway noprint;&lt;/P&gt;&lt;P&gt; class id;&lt;/P&gt;&lt;P&gt; var value;&lt;/P&gt;&lt;P&gt; output out=top3arr(drop=_:) idgroup ( max(value) out[3] (value)=) /autolabel autoname;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc transpose data=top3arr out=top3list(drop=_: rename=(col1=value)); &lt;/P&gt;&lt;P&gt; by id;&lt;/P&gt;&lt;P&gt; var value:;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc sql;&lt;/P&gt;&lt;P&gt; drop table top3arr;&lt;/P&gt;&lt;P&gt;quit;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD colspan="1"&gt;ID&lt;/TD&gt;&lt;TD colspan="1"&gt;VALUE&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;S12&lt;/TD&gt;&lt;TD&gt;20&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;S12&lt;/TD&gt;&lt;TD&gt;20&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;S12&lt;/TD&gt;&lt;TD&gt;10&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;S13&lt;/TD&gt;&lt;TD&gt;60&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;S13&lt;/TD&gt;&lt;TD&gt;-40&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;S13&lt;/TD&gt;&lt;TD&gt;-100&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;S14&lt;/TD&gt;&lt;TD&gt;20&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;S14&lt;/TD&gt;&lt;TD&gt;10&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;S14&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 28 Oct 2012 23:17:57 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Select-top-3-records-for-each-id/m-p/109162#M22696</guid>
      <dc:creator>FriedEgg</dc:creator>
      <dc:date>2012-10-28T23:17:57Z</dc:date>
    </item>
    <item>
      <title>Re: Select top 3 records for each id</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Select-top-3-records-for-each-id/m-p/109163#M22697</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;With &lt;STRONG&gt;proc rank&lt;/STRONG&gt; you get some control over the way ties are treated :&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 12pt; font-family: calibri, verdana, arial, sans-serif;"&gt;data have;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG style="font-size: 12pt; font-family: calibri, verdana, arial, sans-serif;"&gt;input id $ score @@;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG style="font-size: 12pt; font-family: calibri, verdana, arial, sans-serif;"&gt;datalines;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG style="font-size: 12pt; font-family: calibri, verdana, arial, sans-serif;"&gt;S12 -20 S12&amp;nbsp; 20 S12&amp;nbsp; 10&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG style="font-size: 12pt; font-family: calibri, verdana, arial, sans-serif;"&gt;S12&amp;nbsp; 10 S12&amp;nbsp; 20 S12 -50&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG style="font-size: 12pt; font-family: calibri, verdana, arial, sans-serif;"&gt;S13 -40 S13&amp;nbsp; 60 S13 -100&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG style="font-size: 12pt; font-family: calibri, verdana, arial, sans-serif;"&gt;S14&amp;nbsp; 10 S14&amp;nbsp; 20 S14&amp;nbsp; 0&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG style="font-size: 12pt; font-family: calibri, verdana, arial, sans-serif;"&gt;S14 -30 S14 -20&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG style="font-size: 12pt; font-family: calibri, verdana, arial, sans-serif;"&gt;;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 12pt; font-family: calibri, verdana, arial, sans-serif;"&gt; &lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 12pt; font-family: calibri, verdana, arial, sans-serif;"&gt;proc rank data=have descending ties=low /*ties=dense*/&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG style="font-size: 12pt; font-family: calibri, verdana, arial, sans-serif;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; out=want(where=(order&amp;lt;=3));&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG style="font-size: 12pt; font-family: calibri, verdana, arial, sans-serif;"&gt;by id notsorted;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG style="font-size: 12pt; font-family: calibri, verdana, arial, sans-serif;"&gt;var score; ranks order;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG style="font-size: 12pt; font-family: calibri, verdana, arial, sans-serif;"&gt;run;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;PG&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 29 Oct 2012 01:39:57 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Select-top-3-records-for-each-id/m-p/109163#M22697</guid>
      <dc:creator>PGStats</dc:creator>
      <dc:date>2012-10-29T01:39:57Z</dc:date>
    </item>
    <item>
      <title>Re: Select top 3 records for each id</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Select-top-3-records-for-each-id/m-p/109164#M22698</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Agree with Art, SQL is not really optimal for this kind of task. Comparing to PG's clean-cut proc rank, Data step will have same amount of control, if not more:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data have;&lt;/P&gt;&lt;P&gt;input id $ score @@;&lt;/P&gt;&lt;P&gt;datalines;&lt;/P&gt;&lt;P&gt;S12 -20 S12&amp;nbsp; 20 S12&amp;nbsp; 10&lt;/P&gt;&lt;P&gt;S12&amp;nbsp; 10 S12&amp;nbsp; 20 S12 -50&lt;/P&gt;&lt;P&gt;S13 -40 S13&amp;nbsp; 60 S13 -100&lt;/P&gt;&lt;P&gt;S14&amp;nbsp; 10 S14&amp;nbsp; 20 S14&amp;nbsp; 0&lt;/P&gt;&lt;P&gt;S14 -30 S14 -20&lt;/P&gt;&lt;P&gt;;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc sort data=have;&lt;/P&gt;&lt;P&gt;by id descending value;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data want;&lt;/P&gt;&lt;P&gt;&amp;nbsp; do _n_=1 by 1 until (last.id);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; set have nobs=nobs;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; by id descending value;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if first.id then _f=nobs;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _n+ifn(value=lag(value),0,1);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _n=ifn(first.id,1,_n);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _f=ifn(_n_=3,_n,_f) ;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if _n&amp;lt;=_f then output;&lt;/P&gt;&lt;P&gt;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp; drop _:;&lt;/P&gt;&lt;P&gt;&amp;nbsp; run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; proc print;run;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 29 Oct 2012 02:02:43 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Select-top-3-records-for-each-id/m-p/109164#M22698</guid>
      <dc:creator>Haikuo</dc:creator>
      <dc:date>2012-10-29T02:02:43Z</dc:date>
    </item>
    <item>
      <title>Re: Select top 3 records for each id</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Select-top-3-records-for-each-id/m-p/109165#M22699</link>
      <description>&lt;P&gt;&lt;EM&gt;Editor's Note: Thanks to all who contributed, showing that there are mulitple ways to get the same results in SAS.&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Here's my take on this.&amp;nbsp; A mix of proc sql and data step.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Alan&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;data have;&lt;BR /&gt;input id $ score @@;&lt;BR /&gt;datalines;&lt;BR /&gt;S12 -20 S12&amp;nbsp; 20 S12&amp;nbsp; 10&lt;BR /&gt;S12&amp;nbsp; 10 S12&amp;nbsp; 20 S12 -50&lt;BR /&gt;S13 -40 S13&amp;nbsp; 60 S13 -100&lt;BR /&gt;S14&amp;nbsp; 10 S14&amp;nbsp; 20 S14&amp;nbsp; 0&lt;BR /&gt;S14 -30 S14 -20&lt;BR /&gt;;&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;/* change as needed to bring back desired ranking&amp;nbsp; */&lt;BR /&gt;%let start= 1;&lt;BR /&gt;%let end = 3;&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;/*&amp;nbsp; create table containing distinct id and value&amp;nbsp; -- needed b/c more than one id can have the same score */&lt;BR /&gt;proc sql;&lt;BR /&gt;create table dst_id_score as&lt;BR /&gt;select distinct id, score from have&lt;BR /&gt;order by id, score desc;&amp;nbsp; /* keep this sort order for ranking */&lt;BR /&gt;* NOTE: Table WORK.DST_ID_SCORE created, with 12 rows and 2 columns. ;&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;/*&amp;nbsp; assign ranking by id by score */&lt;BR /&gt;data temp; &lt;BR /&gt; set dst_id_score ;&lt;BR /&gt;by id;&lt;BR /&gt;if first.id then rnk=0;&lt;BR /&gt;rnk + 1;&lt;BR /&gt;run;&lt;BR /&gt;* NOTE: The data set WORK.TEMP has 12 observations and 3 variables. ;&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;/*&amp;nbsp; go back to original file and bring back all data meeting desired ranking&amp;nbsp; */&lt;BR /&gt;proc sql;&lt;BR /&gt;create table final_top_ranked as&lt;/P&gt;
&lt;P&gt;select &lt;BR /&gt;&amp;nbsp; a.id &lt;BR /&gt;, a.score &lt;BR /&gt;, b.rnk as rank&lt;BR /&gt;from have a inner join temp b on a.id = b.id and a.score = b.score&lt;BR /&gt;where rnk between &amp;amp;start and &amp;amp;end&lt;BR /&gt;order by id, rnk;&lt;BR /&gt;* NOTE: Table WORK.FINAL_TOP_RANKED created, with 11 rows and 3 columns. ;&lt;/P&gt;</description>
      <pubDate>Thu, 31 Aug 2017 19:05:13 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Select-top-3-records-for-each-id/m-p/109165#M22699</guid>
      <dc:creator>alandool</dc:creator>
      <dc:date>2017-08-31T19:05:13Z</dc:date>
    </item>
    <item>
      <title>Re: Select top 3 records for each id</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Select-top-3-records-for-each-id/m-p/262634#M51328</link>
      <description>Great solution. It is transparent, and that is critical for debugging and portability.</description>
      <pubDate>Sat, 09 Apr 2016 03:56:32 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Select-top-3-records-for-each-id/m-p/262634#M51328</guid>
      <dc:creator>neekum</dc:creator>
      <dc:date>2016-04-09T03:56:32Z</dc:date>
    </item>
    <item>
      <title>Re: Select top 3 records for each id</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Select-top-3-records-for-each-id/m-p/262636#M51330</link>
      <description>I meant, great solution by alandool. It totally matches my coding style, where I spell out each and every item explicitly for QA and later use. Kudos!</description>
      <pubDate>Sat, 09 Apr 2016 03:58:18 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Select-top-3-records-for-each-id/m-p/262636#M51330</guid>
      <dc:creator>neekum</dc:creator>
      <dc:date>2016-04-09T03:58:18Z</dc:date>
    </item>
  </channel>
</rss>

