<?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: how to get 3rd highest salary in group wise using data step and proc sql in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/how-to-get-3rd-highest-salary-in-group-wise-using-data-step-and/m-p/106261#M22156</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Here is a hard-coding low efficient SQL approach:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data have;&lt;/P&gt;&lt;P&gt;input EMPNO$ Salary empcode$;&lt;/P&gt;&lt;P&gt;cards;&lt;/P&gt;&lt;P&gt;111 4000 MGR&lt;/P&gt;&lt;P&gt;112 6000 MGR&lt;/P&gt;&lt;P&gt;114 2000 MGR&lt;/P&gt;&lt;P&gt;115 8000 MGR&lt;/P&gt;&lt;P&gt;223 2000 clerk&lt;/P&gt;&lt;P&gt;226 1000 clerk&lt;/P&gt;&lt;P&gt;228 3000 clerk&lt;/P&gt;&lt;P&gt;300 500 peon&lt;/P&gt;&lt;P&gt;333 700 peon&lt;/P&gt;&lt;P&gt;345 300 peon&lt;/P&gt;&lt;P&gt;356 200 peon&lt;/P&gt;&lt;P&gt;320 700 peon&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 * from &lt;/P&gt;&lt;P&gt;(select * from (select * from have group by empcode having salary ne max(salary)) &lt;/P&gt;&lt;P&gt;&amp;nbsp; group by empcode having salary ne max(salary))&lt;/P&gt;&lt;P&gt;&amp;nbsp; group by empcode having salary eq max(salary);&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>Thu, 25 Oct 2012 14:21:49 GMT</pubDate>
    <dc:creator>Haikuo</dc:creator>
    <dc:date>2012-10-25T14:21:49Z</dc:date>
    <item>
      <title>how to get 3rd highest salary in group wise using data step and proc sql</title>
      <link>https://communities.sas.com/t5/SAS-Programming/how-to-get-3rd-highest-salary-in-group-wise-using-data-step-and/m-p/106254#M22149</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I have a dataset EMP&lt;/P&gt;&lt;P&gt;EMPNO&amp;nbsp;&amp;nbsp; Salary&amp;nbsp;&amp;nbsp; empcode&lt;/P&gt;&lt;P&gt;111&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MGR&lt;BR /&gt;112&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 6000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MGR&lt;/P&gt;&lt;P&gt;114&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MGR&lt;/P&gt;&lt;P&gt;115&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 8000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MGR&lt;/P&gt;&lt;P&gt;223&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; clerk&lt;/P&gt;&lt;P&gt;226&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; clerk&lt;/P&gt;&lt;P&gt;228&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; clerk&lt;/P&gt;&lt;P&gt;300&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 500&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; peon&lt;/P&gt;&lt;P&gt;333&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 700&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; peon&lt;/P&gt;&lt;P&gt;345&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 300&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; peon&lt;/P&gt;&lt;P&gt;356&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 200&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; peon&lt;/P&gt;&lt;P&gt;320&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 700&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; peon&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I want a dataset which contain 3rd highest salary in group wise empcode&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;EMPNO&amp;nbsp;&amp;nbsp; Salary&amp;nbsp;&amp;nbsp; empcode&lt;/P&gt;&lt;P&gt;111&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MGR&lt;/P&gt;&lt;P&gt;223&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; clerk&lt;/P&gt;&lt;P&gt;345&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 300&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; peon&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Please help me how to write a program in sas proc sql and data sep and using sas macro.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks &amp;amp; Regards,&lt;/P&gt;&lt;P&gt;Ashwini&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 25 Oct 2012 08:05:55 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/how-to-get-3rd-highest-salary-in-group-wise-using-data-step-and/m-p/106254#M22149</guid>
      <dc:creator>Ashwini</dc:creator>
      <dc:date>2012-10-25T08:05:55Z</dc:date>
    </item>
    <item>
      <title>Re: how to get 3rd highest salary in group wise using data step and proc sql</title>
      <link>https://communities.sas.com/t5/SAS-Programming/how-to-get-3rd-highest-salary-in-group-wise-using-data-step-and/m-p/106255#M22150</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Here is a Data Step way.&lt;/P&gt;&lt;P&gt;PG may give you the SQL version.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE&gt;data x;
input EMPNO&amp;nbsp;&amp;nbsp; Salary&amp;nbsp;&amp;nbsp; empcode $;
cards;
111&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MGR
112&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 6000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MGR
114&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MGR
115&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 8000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MGR
223&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; clerk
226&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; clerk
228&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; clerk
300&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 500&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; peon
333&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 700&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; peon
345&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 300&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; peon
356&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 200&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; peon
320&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 700&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; peon
;
run;
proc sort data=x nodupkey; by empcode descending salary;run;
data want;
 set x;
 by empcode;
 if first.empcode then n=0;
 n+1;
 if n=3 then output;
run;
&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Ksharp&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 25 Oct 2012 09:08:37 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/how-to-get-3rd-highest-salary-in-group-wise-using-data-step-and/m-p/106255#M22150</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2012-10-25T09:08:37Z</dc:date>
    </item>
    <item>
      <title>Re: how to get 3rd highest salary in group wise using data step and proc sql</title>
      <link>https://communities.sas.com/t5/SAS-Programming/how-to-get-3rd-highest-salary-in-group-wise-using-data-step-and/m-p/106256#M22151</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;What about if there are less than 3 representatives of a group?&lt;/P&gt;&lt;P&gt;Would you want the lowest salary out of 2 or the only salary represented in your dataset?&lt;/P&gt;&lt;P&gt;If so, no problem, modify Ksharp's code slightly&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data want;&lt;/P&gt;&lt;P&gt;set x;&lt;/P&gt;&lt;P&gt;by empcode;&lt;/P&gt;&lt;P&gt;if first.empcode then n=0;&lt;/P&gt;&lt;P&gt;n+1;&lt;/P&gt;&lt;P&gt;if n=3&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;STRONG&gt;or n&amp;lt;3 and last.empcode&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; then output;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 25 Oct 2012 09:22:23 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/how-to-get-3rd-highest-salary-in-group-wise-using-data-step-and/m-p/106256#M22151</guid>
      <dc:creator>RichardinOz</dc:creator>
      <dc:date>2012-10-25T09:22:23Z</dc:date>
    </item>
    <item>
      <title>Re: how to get 3rd highest salary in group wise using data step and proc sql</title>
      <link>https://communities.sas.com/t5/SAS-Programming/how-to-get-3rd-highest-salary-in-group-wise-using-data-step-and/m-p/106257#M22152</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thanks a lot for your kind information.&lt;/P&gt;&lt;P&gt;Could you pls explain me how it done in proc sql and sas macro&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 25 Oct 2012 11:59:21 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/how-to-get-3rd-highest-salary-in-group-wise-using-data-step-and/m-p/106257#M22152</guid>
      <dc:creator>Ashwini</dc:creator>
      <dc:date>2012-10-25T11:59:21Z</dc:date>
    </item>
    <item>
      <title>Re: how to get 3rd highest salary in group wise using data step and proc sql</title>
      <link>https://communities.sas.com/t5/SAS-Programming/how-to-get-3rd-highest-salary-in-group-wise-using-data-step-and/m-p/106258#M22153</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;If a group has five people, and the top 3 all have the same salary, which one do you want to select?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I imagine the SQL gurus out there could select/remove the max, select/remove the max from the remainder, then select the max. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Why would you want to use macro language?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Good luck.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 25 Oct 2012 12:46:50 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/how-to-get-3rd-highest-salary-in-group-wise-using-data-step-and/m-p/106258#M22153</guid>
      <dc:creator>Astounding</dc:creator>
      <dc:date>2012-10-25T12:46:50Z</dc:date>
    </item>
    <item>
      <title>Re: how to get 3rd highest salary in group wise using data step and proc sql</title>
      <link>https://communities.sas.com/t5/SAS-Programming/how-to-get-3rd-highest-salary-in-group-wise-using-data-step-and/m-p/106259#M22154</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;What happens if there is a tie for the 3rd highest?&amp;nbsp; If you want to return both records, then you need a different solution to that proposed.&amp;nbsp; One option is to run Proc Rank after the dedupe, keep the 3rd highest rank and then merge this back to the original table.&amp;nbsp; Example below with modified original data&amp;nbsp; (record 3 has had salary amended to 4,000).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;With regards to sas macro, the only reason I can see a use for this is if you needed to change the ranking number (e.g. 4th highest instead of 3rd).&lt;/P&gt;&lt;P&gt;Note also that the solution from @KSharp deletes duplicate records from the source data as there is no 'out=' option!&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data x;&lt;/P&gt;&lt;P&gt;input empno salary empcode $;&lt;/P&gt;&lt;P&gt;cards;&lt;/P&gt;&lt;P&gt;111&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MGR&lt;/P&gt;&lt;P&gt;112&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 6000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MGR&lt;/P&gt;&lt;P&gt;114&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MGR&lt;/P&gt;&lt;P&gt;115&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 8000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MGR&lt;/P&gt;&lt;P&gt;223&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; clerk&lt;/P&gt;&lt;P&gt;226&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; clerk&lt;/P&gt;&lt;P&gt;228&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; clerk&lt;/P&gt;&lt;P&gt;300&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 700&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; peon&lt;/P&gt;&lt;P&gt;333&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 700&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; peon&lt;/P&gt;&lt;P&gt;345&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 300&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; peon&lt;/P&gt;&lt;P&gt;356&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 200&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; peon&lt;/P&gt;&lt;P&gt;320&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 700&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; peon&lt;/P&gt;&lt;P&gt;;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc sort data=x nodupkey out=dedupe_x; &lt;/P&gt;&lt;P&gt;by empcode descending salary;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc rank data=dedupe_x out=ranked_x (where=(salary_rank=3)) descending;&lt;/P&gt;&lt;P&gt;by empcode;&lt;/P&gt;&lt;P&gt;var salary;&lt;/P&gt;&lt;P&gt;ranks salary_rank;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc sql;&lt;/P&gt;&lt;P&gt;create table want as select&lt;/P&gt;&lt;P&gt;a.* &lt;/P&gt;&lt;P&gt;from x as a inner join&lt;/P&gt;&lt;P&gt;&amp;nbsp; ranked_x as b on a.empcode=b.empcode and a.salary=b.salary;&lt;/P&gt;&lt;P&gt;quit;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 25 Oct 2012 12:55:27 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/how-to-get-3rd-highest-salary-in-group-wise-using-data-step-and/m-p/106259#M22154</guid>
      <dc:creator>Keith</dc:creator>
      <dc:date>2012-10-25T12:55:27Z</dc:date>
    </item>
    <item>
      <title>Re: how to get 3rd highest salary in group wise using data step and proc sql</title>
      <link>https://communities.sas.com/t5/SAS-Programming/how-to-get-3rd-highest-salary-in-group-wise-using-data-step-and/m-p/106260#M22155</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Keith,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;As you noted, there is no valid solution possible unless there is a decision made about how to handle ties.&amp;nbsp; Even PROC RANK can't necessarily get around that fact, as there will be some ranking methods that produce 0 records having salary_rank=3.&amp;nbsp; A double DOW would be most flexible, since it allows different counting/ranking methods:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data want;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; do until (last.empcode);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set have;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; by empcode descending salary;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * Various flexible counting/ranking methods are possible here to select the target salary;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; do until (last.empcode);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set have;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; by empcode descending salary;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * Various outputting methods are available here, depending on whether tied records should be output;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;But the OP has some decisions to make before the programming can be done.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 25 Oct 2012 13:58:12 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/how-to-get-3rd-highest-salary-in-group-wise-using-data-step-and/m-p/106260#M22155</guid>
      <dc:creator>Astounding</dc:creator>
      <dc:date>2012-10-25T13:58:12Z</dc:date>
    </item>
    <item>
      <title>Re: how to get 3rd highest salary in group wise using data step and proc sql</title>
      <link>https://communities.sas.com/t5/SAS-Programming/how-to-get-3rd-highest-salary-in-group-wise-using-data-step-and/m-p/106261#M22156</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Here is a hard-coding low efficient SQL approach:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data have;&lt;/P&gt;&lt;P&gt;input EMPNO$ Salary empcode$;&lt;/P&gt;&lt;P&gt;cards;&lt;/P&gt;&lt;P&gt;111 4000 MGR&lt;/P&gt;&lt;P&gt;112 6000 MGR&lt;/P&gt;&lt;P&gt;114 2000 MGR&lt;/P&gt;&lt;P&gt;115 8000 MGR&lt;/P&gt;&lt;P&gt;223 2000 clerk&lt;/P&gt;&lt;P&gt;226 1000 clerk&lt;/P&gt;&lt;P&gt;228 3000 clerk&lt;/P&gt;&lt;P&gt;300 500 peon&lt;/P&gt;&lt;P&gt;333 700 peon&lt;/P&gt;&lt;P&gt;345 300 peon&lt;/P&gt;&lt;P&gt;356 200 peon&lt;/P&gt;&lt;P&gt;320 700 peon&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 * from &lt;/P&gt;&lt;P&gt;(select * from (select * from have group by empcode having salary ne max(salary)) &lt;/P&gt;&lt;P&gt;&amp;nbsp; group by empcode having salary ne max(salary))&lt;/P&gt;&lt;P&gt;&amp;nbsp; group by empcode having salary eq max(salary);&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>Thu, 25 Oct 2012 14:21:49 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/how-to-get-3rd-highest-salary-in-group-wise-using-data-step-and/m-p/106261#M22156</guid>
      <dc:creator>Haikuo</dc:creator>
      <dc:date>2012-10-25T14:21:49Z</dc:date>
    </item>
    <item>
      <title>Re: how to get 3rd highest salary in group wise using data step and proc sql</title>
      <link>https://communities.sas.com/t5/SAS-Programming/how-to-get-3rd-highest-salary-in-group-wise-using-data-step-and/m-p/106262#M22157</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Here is a not so hard-coding SQL approach:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data have;&lt;/P&gt;&lt;P&gt;input EMPNO$ Salary empcode$;&lt;/P&gt;&lt;P&gt;cards;&lt;/P&gt;&lt;P&gt;111 4000 MGR&lt;/P&gt;&lt;P&gt;112 6000 MGR&lt;/P&gt;&lt;P&gt;114 2000 MGR&lt;/P&gt;&lt;P&gt;115 8000 MGR&lt;/P&gt;&lt;P&gt;223 2000 clerk&lt;/P&gt;&lt;P&gt;226 1000 clerk&lt;/P&gt;&lt;P&gt;228 3000 clerk&lt;/P&gt;&lt;P&gt;300 500 peon&lt;/P&gt;&lt;P&gt;333 700 peon&lt;/P&gt;&lt;P&gt;345 300 peon&lt;/P&gt;&lt;P&gt;356 200 peon&lt;/P&gt;&lt;P&gt;320 700 peon&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 * from have a1 ,&lt;/P&gt;&lt;P&gt;(select empcode,salary from&lt;/P&gt;&lt;P&gt;&amp;nbsp; (select distinct b.empcode,b.salary, a.salary as _salary 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.empcode=b.empcode)&lt;/P&gt;&lt;P&gt;group by empcode,salary&lt;/P&gt;&lt;P&gt;having sum(_salary&amp;gt;=salary)=3) b1&lt;/P&gt;&lt;P&gt;where a1.empcode=b1.empcode and a1.salary=b1.salary;&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:57:48 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/how-to-get-3rd-highest-salary-in-group-wise-using-data-step-and/m-p/106262#M22157</guid>
      <dc:creator>Haikuo</dc:creator>
      <dc:date>2012-10-28T19:57:48Z</dc:date>
    </item>
    <item>
      <title>Re: how to get 3rd highest salary in group wise using data step and proc sql</title>
      <link>https://communities.sas.com/t5/SAS-Programming/how-to-get-3rd-highest-salary-in-group-wise-using-data-step-and/m-p/566657#M159282</link>
      <description>&lt;P&gt;The SQL solution, though&amp;nbsp;probably not the most efficient one,&amp;nbsp;is quite elegant in my opinion:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;proc sql;
    select 
        *
    from 
        EMP as e1
    where
        2 = (select 
                 count(distinct e2.Salary)
            from
                 EMP as e2
            where
                 e1.empcode = e2.empcode and e2.Salary &amp;gt; e1.Salary);
quit;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Mon, 17 Jun 2019 17:57:07 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/how-to-get-3rd-highest-salary-in-group-wise-using-data-step-and/m-p/566657#M159282</guid>
      <dc:creator>Zhanxiong</dc:creator>
      <dc:date>2019-06-17T17:57:07Z</dc:date>
    </item>
  </channel>
</rss>

