<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: find the second minimum value of a variable in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/find-the-second-minimum-value-of-a-variable/m-p/164011#M263567</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;How about :&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE&gt; 
data have;
input Name $ Score;
cards;
A 766
A 9
A 93
A 869
A 143
B 8
B 119
B 362
B 6
B 95
C 524
C 99
C 123
C 176
C 210
D 8
D 0
D 31
D 123
D 12
;
run;
data want(drop= m n second);
 n=0;m=0;
 array x{999} _temporary_;
 do until(last.name);
&amp;nbsp; set have ;
&amp;nbsp; by name;
&amp;nbsp; n+1;x{n}=score;
&amp;nbsp; if score lt 10 then m+1;
 end;
 second=smallest(2,of x{*});&amp;nbsp; call missing(of x{*});
 do until(last.name);
&amp;nbsp; set have ;
&amp;nbsp; by name;
&amp;nbsp; if score lt 10 then call missing(score);
&amp;nbsp;&amp;nbsp; else if m eq 1 and score eq&amp;nbsp; second then call missing(score);
&amp;nbsp; output;
 end;
run;
&amp;nbsp;&amp;nbsp; 


&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;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Xia Keshan&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Sat, 16 Aug 2014 12:16:30 GMT</pubDate>
    <dc:creator>Ksharp</dc:creator>
    <dc:date>2014-08-16T12:16:30Z</dc:date>
    <item>
      <title>find the second minimum value of a variable</title>
      <link>https://communities.sas.com/t5/SAS-Programming/find-the-second-minimum-value-of-a-variable/m-p/164005#M263561</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I have a dataset looks as the following:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Name Score&lt;/P&gt;&lt;P&gt;A 766&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;A 9&lt;/P&gt;&lt;P&gt;A 93&lt;/P&gt;&lt;P&gt;A 869&lt;/P&gt;&lt;P&gt;A 143&lt;/P&gt;&lt;P&gt;B 8&lt;/P&gt;&lt;P&gt;B 119&lt;/P&gt;&lt;P&gt;B 362&lt;/P&gt;&lt;P&gt;B 6&lt;/P&gt;&lt;P&gt;B 95&lt;/P&gt;&lt;P&gt;C 524&lt;/P&gt;&lt;P&gt;C 99&lt;/P&gt;&lt;P&gt;C 123&lt;/P&gt;&lt;P&gt;C 176&lt;/P&gt;&lt;P&gt;C 210&lt;/P&gt;&lt;P&gt;D 8&lt;/P&gt;&lt;P&gt;D 0&lt;/P&gt;&lt;P&gt;D 31&lt;/P&gt;&lt;P&gt;D 123&lt;/P&gt;&lt;P&gt;D 12&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I need to set the score value to do the following:&lt;/P&gt;&lt;P&gt;1. if the score value less than 10, set the score to missing&lt;/P&gt;&lt;P&gt;2. if there is only one score less than 10 for each name group, then set the second minimum score to missing. (that's where I am stuck. &lt;img id="smileysad" class="emoticon emoticon-smileysad" src="https://communities.sas.com/i/smilies/16x16_smiley-sad.png" alt="Smiley Sad" title="Smiley Sad" /&gt;)&lt;/P&gt;&lt;P&gt;for example, the above table:&lt;/P&gt;&lt;P&gt;for Name A, 9 and 93 should set to missing;&lt;/P&gt;&lt;P&gt;for Name B, 8 and 6 should set to missing ...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;BTW, the number of each name is always 5.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 16 Aug 2014 00:52:17 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/find-the-second-minimum-value-of-a-variable/m-p/164005#M263561</guid>
      <dc:creator>Jade</dc:creator>
      <dc:date>2014-08-16T00:52:17Z</dc:date>
    </item>
    <item>
      <title>Re: find the second minimum value of a variable</title>
      <link>https://communities.sas.com/t5/SAS-Programming/find-the-second-minimum-value-of-a-variable/m-p/164006#M263562</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;If the order matters you'll want to add an indicator to keep the row number and then resort the data after, if it doesn't this works:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data have;&lt;/P&gt;&lt;P&gt;input Name $ Score;&lt;/P&gt;&lt;P&gt;cards;&lt;/P&gt;&lt;P&gt;A 766&amp;nbsp; &lt;/P&gt;&lt;P&gt;A 9&lt;/P&gt;&lt;P&gt;A 93&lt;/P&gt;&lt;P&gt;A 869&lt;/P&gt;&lt;P&gt;A 143&lt;/P&gt;&lt;P&gt;B 8&lt;/P&gt;&lt;P&gt;B 119&lt;/P&gt;&lt;P&gt;B 362&lt;/P&gt;&lt;P&gt;B 6&lt;/P&gt;&lt;P&gt;B 95&lt;/P&gt;&lt;P&gt;C 524&lt;/P&gt;&lt;P&gt;C 99&lt;/P&gt;&lt;P&gt;C 123&lt;/P&gt;&lt;P&gt;C 176&lt;/P&gt;&lt;P&gt;C 210&lt;/P&gt;&lt;P&gt;D 8&lt;/P&gt;&lt;P&gt;D 0&lt;/P&gt;&lt;P&gt;D 31&lt;/P&gt;&lt;P&gt;D 123&lt;/P&gt;&lt;P&gt;D 12&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;&lt;/P&gt;&lt;P&gt;proc sort data=have;&lt;/P&gt;&lt;P&gt;by name score;&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;set have;&lt;/P&gt;&lt;P&gt;by name;&lt;/P&gt;&lt;P&gt;if first.name then less10=0; &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;if score&amp;lt;10 then do;&lt;/P&gt;&lt;P&gt;&amp;nbsp; score=.;&lt;/P&gt;&lt;P&gt;&amp;nbsp; less10+1;&lt;/P&gt;&lt;P&gt;end;&lt;/P&gt;&lt;P&gt;else if score&amp;gt;=10 and less10=1 then do;&lt;/P&gt;&lt;P&gt;&amp;nbsp; score=.;&lt;/P&gt;&lt;P&gt;&amp;nbsp; less10+1;&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, 16 Aug 2014 02:08:25 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/find-the-second-minimum-value-of-a-variable/m-p/164006#M263562</guid>
      <dc:creator>Reeza</dc:creator>
      <dc:date>2014-08-16T02:08:25Z</dc:date>
    </item>
    <item>
      <title>Re: find the second minimum value of a variable</title>
      <link>https://communities.sas.com/t5/SAS-Programming/find-the-second-minimum-value-of-a-variable/m-p/164007#M263563</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thanks.&amp;nbsp; but i don't think this will work.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;"else if score&amp;gt;=10 and less10=1 then do&lt;/SPAN&gt;"&lt;/P&gt;&lt;P&gt;How can less10 be 1?&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 16 Aug 2014 02:18:38 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/find-the-second-minimum-value-of-a-variable/m-p/164007#M263563</guid>
      <dc:creator>Jade</dc:creator>
      <dc:date>2014-08-16T02:18:38Z</dc:date>
    </item>
    <item>
      <title>Re: find the second minimum value of a variable</title>
      <link>https://communities.sas.com/t5/SAS-Programming/find-the-second-minimum-value-of-a-variable/m-p/164008#M263564</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Try it. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Less10 is a variable that is incremented every time you set a variable to missing in the first IF condition. &lt;/P&gt;&lt;P&gt;The second IF condition checks if the number set to missing is 1, though you may want to change that to &amp;lt;=1 incase you have no values less than 10. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Additionally, you haven't specified if its less than or equal to 10, so you should modify the code to consider the =10 situation. &lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 16 Aug 2014 02:40:34 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/find-the-second-minimum-value-of-a-variable/m-p/164008#M263564</guid>
      <dc:creator>Reeza</dc:creator>
      <dc:date>2014-08-16T02:40:34Z</dc:date>
    </item>
    <item>
      <title>Re: find the second minimum value of a variable</title>
      <link>https://communities.sas.com/t5/SAS-Programming/find-the-second-minimum-value-of-a-variable/m-p/164009#M263565</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;This should work:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;data have;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;input Name $ Score;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;cards;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;A 766 &lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;A 9&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;A 93&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;A 869&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;A 143&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;B 8&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;B 119&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;B 362&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;B 6&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;B 95&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;C 524&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;C 99&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;C 123&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;C 176&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;C 210&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;D 8&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;D 0&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;D 31&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;D 123&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;D 12&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;data want;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;array s(5);&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;do i = 1 to 5;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; set have;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if score &amp;lt; 10 then call missing(s(i));&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else s(i) = score;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;if nmiss(of s(*)) = 1 then do;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; second = min(of s(*));&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; do i = 1 to 5;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if s(i) = second then call missing(s(i));&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;do i = 1 to 5;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; score = s(i);&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; output;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;keep name score;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;run;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;proc print data=want noobs; 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>Sat, 16 Aug 2014 03:08:09 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/find-the-second-minimum-value-of-a-variable/m-p/164009#M263565</guid>
      <dc:creator>PGStats</dc:creator>
      <dc:date>2014-08-16T03:08:09Z</dc:date>
    </item>
    <item>
      <title>Re: find the second minimum value of a variable</title>
      <link>https://communities.sas.com/t5/SAS-Programming/find-the-second-minimum-value-of-a-variable/m-p/164010#M263566</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;data have;&lt;BR /&gt;input Name $ Score;&lt;BR /&gt;cards;&lt;BR /&gt;A 766&lt;BR /&gt;A 9&lt;BR /&gt;A 93&lt;BR /&gt;A 869&lt;BR /&gt;A 143&lt;BR /&gt;B 8&lt;BR /&gt;B 119&lt;BR /&gt;B 362&lt;BR /&gt;B 6&lt;BR /&gt;B 95&lt;BR /&gt;C 524&lt;BR /&gt;C 99&lt;BR /&gt;C 123&lt;BR /&gt;C 176&lt;BR /&gt;C 210&lt;BR /&gt;D 8&lt;BR /&gt;D 0&lt;BR /&gt;D 31&lt;BR /&gt;D 123&lt;BR /&gt;D 12&lt;BR /&gt;;&lt;/P&gt;&lt;P&gt;data want;&lt;BR /&gt;set have;&lt;BR /&gt;if score&amp;lt;10 then score=.;&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc sql;&lt;BR /&gt;select a.name,case when score=min then . else score end as score from want a&lt;BR /&gt;left join&lt;BR /&gt;(select name,min(score) as min from &lt;BR /&gt;(select name,score,sum(score=.) as miss_count from want&lt;BR /&gt;group by name)&lt;BR /&gt;where miss_count=1 and score ne .&lt;BR /&gt;group by name) b&lt;BR /&gt;on a.name=b.name;&lt;BR /&gt;quit;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 16 Aug 2014 04:44:21 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/find-the-second-minimum-value-of-a-variable/m-p/164010#M263566</guid>
      <dc:creator>stat_sas</dc:creator>
      <dc:date>2014-08-16T04:44:21Z</dc:date>
    </item>
    <item>
      <title>Re: find the second minimum value of a variable</title>
      <link>https://communities.sas.com/t5/SAS-Programming/find-the-second-minimum-value-of-a-variable/m-p/164011#M263567</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;How about :&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE&gt; 
data have;
input Name $ Score;
cards;
A 766
A 9
A 93
A 869
A 143
B 8
B 119
B 362
B 6
B 95
C 524
C 99
C 123
C 176
C 210
D 8
D 0
D 31
D 123
D 12
;
run;
data want(drop= m n second);
 n=0;m=0;
 array x{999} _temporary_;
 do until(last.name);
&amp;nbsp; set have ;
&amp;nbsp; by name;
&amp;nbsp; n+1;x{n}=score;
&amp;nbsp; if score lt 10 then m+1;
 end;
 second=smallest(2,of x{*});&amp;nbsp; call missing(of x{*});
 do until(last.name);
&amp;nbsp; set have ;
&amp;nbsp; by name;
&amp;nbsp; if score lt 10 then call missing(score);
&amp;nbsp;&amp;nbsp; else if m eq 1 and score eq&amp;nbsp; second then call missing(score);
&amp;nbsp; output;
 end;
run;
&amp;nbsp;&amp;nbsp; 


&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;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Xia Keshan&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 16 Aug 2014 12:16:30 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/find-the-second-minimum-value-of-a-variable/m-p/164011#M263567</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2014-08-16T12:16:30Z</dc:date>
    </item>
  </channel>
</rss>

