<?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: NODUPKEY with PROC SORT in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/NODUPKEY-with-PROC-SORT/m-p/291623#M60418</link>
    <description>&lt;PRE&gt;
For me, I would like to use PROC SQL ,because it is simple.
Actually Data Step also could make it simple as SQL.


data have;
input id date code;
cards;
009 123195 03
009 101595 01
009 090995 07
033 101095 07
033 101095 03
033 090995 02
033 051894 01
033 010594 07
045 122195 06
045 103195 05
045 102195 05
;
run;

proc sort data=nodupkey_data;
by id descending date;
run;
data want;
 set have;
 by id descending date;
 if first.id then n=0;
 n+first.date;
 if n=1;
 drop n;
run;

&lt;/PRE&gt;</description>
    <pubDate>Mon, 15 Aug 2016 02:00:51 GMT</pubDate>
    <dc:creator>Ksharp</dc:creator>
    <dc:date>2016-08-15T02:00:51Z</dc:date>
    <item>
      <title>NODUPKEY with PROC SORT</title>
      <link>https://communities.sas.com/t5/SAS-Programming/NODUPKEY-with-PROC-SORT/m-p/291569#M60411</link>
      <description>&lt;P&gt;Hi, i have the table PROC SORT by ID then Descending Date.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;However ID 033 has 2 instances with the same date and NODUPKEY only picks up the 1st instance.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Is it possible to pick up ID 033's 2 instances?&lt;BR /&gt;&lt;BR /&gt;My idea is to pick up each ID's latest date.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thank you.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE border="0" cellspacing="0" cellpadding="0"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;ID&lt;/TD&gt;&lt;TD&gt;DATE&lt;/TD&gt;&lt;TD&gt;CODE&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;009&lt;/TD&gt;&lt;TD&gt;123195&lt;/TD&gt;&lt;TD&gt;03&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;009&lt;/TD&gt;&lt;TD&gt;101595&lt;/TD&gt;&lt;TD&gt;01&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;009&lt;/TD&gt;&lt;TD&gt;090995&lt;/TD&gt;&lt;TD&gt;07&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;033&lt;/TD&gt;&lt;TD&gt;101095&lt;/TD&gt;&lt;TD&gt;07&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;033&lt;/TD&gt;&lt;TD&gt;101095&lt;/TD&gt;&lt;TD&gt;03&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;033&lt;/TD&gt;&lt;TD&gt;090995&lt;/TD&gt;&lt;TD&gt;02&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;033&lt;/TD&gt;&lt;TD&gt;051894&lt;/TD&gt;&lt;TD&gt;01&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;033&lt;/TD&gt;&lt;TD&gt;010594&lt;/TD&gt;&lt;TD&gt;07&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;045&lt;/TD&gt;&lt;TD&gt;122195&lt;/TD&gt;&lt;TD&gt;06&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;045&lt;/TD&gt;&lt;TD&gt;103195&lt;/TD&gt;&lt;TD&gt;05&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;045&lt;/TD&gt;&lt;TD&gt;102195&lt;/TD&gt;&lt;TD&gt;05&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;</description>
      <pubDate>Sun, 14 Aug 2016 10:45:13 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/NODUPKEY-with-PROC-SORT/m-p/291569#M60411</guid>
      <dc:creator>ovonel</dc:creator>
      <dc:date>2016-08-14T10:45:13Z</dc:date>
    </item>
    <item>
      <title>Re: NODUPKEY with PROC SORT</title>
      <link>https://communities.sas.com/t5/SAS-Programming/NODUPKEY-with-PROC-SORT/m-p/291571#M60412</link>
      <description>&lt;P&gt;There are so many ways to skin this particular cat (sorry, Lily), but nodupkey isn't one of them.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;It could have been done in one pass with SQL, but here's a method with proc sort and two data steps:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;data nodupkey_data;&lt;BR /&gt;infile cards dsd dlm='09'x;&lt;BR /&gt;attrib id length=3 format=z3.;&lt;BR /&gt;attrib date informat=mmddyy6. format=yymmdd10.;&lt;BR /&gt;attrib code length=$ 2;&lt;BR /&gt;input id&lt;BR /&gt; date&lt;BR /&gt; code;&lt;BR /&gt;cards;&lt;BR /&gt;009 123195 03&lt;BR /&gt;009 101595 01&lt;BR /&gt;009 090995 07&lt;BR /&gt;033 101095 07&lt;BR /&gt;033 101095 03&lt;BR /&gt;033 090995 02&lt;BR /&gt;033 051894 01&lt;BR /&gt;033 010594 07&lt;BR /&gt;045 122195 06&lt;BR /&gt;045 103195 05&lt;BR /&gt;045 102195 05&lt;BR /&gt;;&lt;BR /&gt;run;&lt;BR /&gt;&lt;BR /&gt;proc sort data=nodupkey_data;&lt;BR /&gt;by id date;&lt;BR /&gt;run;&lt;BR /&gt;&lt;BR /&gt;/*&lt;BR /&gt; For each id, get the most recent date */&lt;BR /&gt;data maxdate;&lt;BR /&gt;set nodupkey_data;&lt;BR /&gt;by id;&lt;BR /&gt;if last.id;&lt;BR /&gt;keep id date;&lt;BR /&gt;run;&lt;BR /&gt;&lt;BR /&gt;/*&lt;BR /&gt; Merge back in with the main dataset, but only retain those observations&lt;BR /&gt; where the date is the same as the most recent.&lt;BR /&gt;*/&lt;BR /&gt;data id_latest_date;&lt;BR /&gt;merge nodupkey_data&lt;BR /&gt; maxdate(in=in_maxdate);&lt;BR /&gt;by id date;&lt;BR /&gt;if in_maxdate;&lt;BR /&gt;run;&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Sun, 14 Aug 2016 11:16:58 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/NODUPKEY-with-PROC-SORT/m-p/291571#M60412</guid>
      <dc:creator>LaurieF</dc:creator>
      <dc:date>2016-08-14T11:16:58Z</dc:date>
    </item>
    <item>
      <title>Re: NODUPKEY with PROC SORT</title>
      <link>https://communities.sas.com/t5/SAS-Programming/NODUPKEY-with-PROC-SORT/m-p/291582#M60415</link>
      <description>&lt;P&gt;Thank you. Appreciated.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I had thought of NODUPKEY as a quick solution as I assumed there is no 2 or more IDs with the same date.&lt;/P&gt;</description>
      <pubDate>Sun, 14 Aug 2016 12:57:23 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/NODUPKEY-with-PROC-SORT/m-p/291582#M60415</guid>
      <dc:creator>ovonel</dc:creator>
      <dc:date>2016-08-14T12:57:23Z</dc:date>
    </item>
    <item>
      <title>Re: NODUPKEY with PROC SORT</title>
      <link>https://communities.sas.com/t5/SAS-Programming/NODUPKEY-with-PROC-SORT/m-p/291615#M60417</link>
      <description>&lt;P&gt;It comes down to understanding what &lt;EM&gt;nodupkey&lt;/EM&gt; does (and, as I just found out, &lt;EM&gt;nouniquekey&lt;/EM&gt;!).&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The former detects multiple instances of duplicate keys and only keeps one of them. You have to be careful using this if you want to control which one is kept - if you do care, I recommend not using it; instead do a sort and then control which one in a data step.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The latter&amp;nbsp;&lt;EM&gt;only&amp;nbsp;&lt;/EM&gt;keeps duplicates. Running a sort with your data keeps the two observations you want for&amp;nbsp;&lt;EM&gt;033&lt;/EM&gt; but gets rid of the rest.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;So thank you - I learnt something new with &lt;EM&gt;nouniquekey&lt;/EM&gt;.&amp;nbsp;&lt;img id="smileyhappy" class="emoticon emoticon-smileyhappy" src="https://communities.sas.com/i/smilies/16x16_smiley-happy.png" alt="Smiley Happy" title="Smiley Happy" /&gt;&lt;/P&gt;</description>
      <pubDate>Sun, 14 Aug 2016 22:04:38 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/NODUPKEY-with-PROC-SORT/m-p/291615#M60417</guid>
      <dc:creator>LaurieF</dc:creator>
      <dc:date>2016-08-14T22:04:38Z</dc:date>
    </item>
    <item>
      <title>Re: NODUPKEY with PROC SORT</title>
      <link>https://communities.sas.com/t5/SAS-Programming/NODUPKEY-with-PROC-SORT/m-p/291623#M60418</link>
      <description>&lt;PRE&gt;
For me, I would like to use PROC SQL ,because it is simple.
Actually Data Step also could make it simple as SQL.


data have;
input id date code;
cards;
009 123195 03
009 101595 01
009 090995 07
033 101095 07
033 101095 03
033 090995 02
033 051894 01
033 010594 07
045 122195 06
045 103195 05
045 102195 05
;
run;

proc sort data=nodupkey_data;
by id descending date;
run;
data want;
 set have;
 by id descending date;
 if first.id then n=0;
 n+first.date;
 if n=1;
 drop n;
run;

&lt;/PRE&gt;</description>
      <pubDate>Mon, 15 Aug 2016 02:00:51 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/NODUPKEY-with-PROC-SORT/m-p/291623#M60418</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2016-08-15T02:00:51Z</dc:date>
    </item>
  </channel>
</rss>

