<?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 delete corresponding rows based on conditions in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/delete-corresponding-rows-based-on-conditions/m-p/360342#M84820</link>
    <description>&lt;P&gt;I want to delete duplicates where ID and program_id are matching. But I want to keep the duplicate with the most recent collection_yr. For example, if two observations have the same ID and program_id but the completion_yr is 2009 and 2010, I want to keep the observation with the 2010 completion_yr. I have attached an example data set with duplicates. I want to delete the observation with ID=4 and program_id=9034 but collection_yr=2009 as that is not the most recent. However, I want to do this on a larger scale where there are more observations&lt;/P&gt;&lt;P&gt;Cheers&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;ID&lt;/TD&gt;&lt;TD&gt;program_id&lt;/TD&gt;&lt;TD&gt;COLLECTION_YR&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;999&lt;/TD&gt;&lt;TD&gt;2009&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;444&lt;/TD&gt;&lt;TD&gt;2010&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;SRC&lt;/TD&gt;&lt;TD&gt;2009&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;9034&lt;/TD&gt;&lt;TD&gt;2009&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;9034&lt;/TD&gt;&lt;TD&gt;2010&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;9069&lt;/TD&gt;&lt;TD&gt;2010&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;7767&lt;/TD&gt;&lt;TD&gt;2006&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;6&lt;/TD&gt;&lt;TD&gt;30999&lt;/TD&gt;&lt;TD&gt;2009&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;</description>
    <pubDate>Mon, 22 May 2017 00:21:00 GMT</pubDate>
    <dc:creator>BenBrady</dc:creator>
    <dc:date>2017-05-22T00:21:00Z</dc:date>
    <item>
      <title>delete corresponding rows based on conditions</title>
      <link>https://communities.sas.com/t5/SAS-Programming/delete-corresponding-rows-based-on-conditions/m-p/360342#M84820</link>
      <description>&lt;P&gt;I want to delete duplicates where ID and program_id are matching. But I want to keep the duplicate with the most recent collection_yr. For example, if two observations have the same ID and program_id but the completion_yr is 2009 and 2010, I want to keep the observation with the 2010 completion_yr. I have attached an example data set with duplicates. I want to delete the observation with ID=4 and program_id=9034 but collection_yr=2009 as that is not the most recent. However, I want to do this on a larger scale where there are more observations&lt;/P&gt;&lt;P&gt;Cheers&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;ID&lt;/TD&gt;&lt;TD&gt;program_id&lt;/TD&gt;&lt;TD&gt;COLLECTION_YR&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;999&lt;/TD&gt;&lt;TD&gt;2009&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;444&lt;/TD&gt;&lt;TD&gt;2010&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;SRC&lt;/TD&gt;&lt;TD&gt;2009&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;9034&lt;/TD&gt;&lt;TD&gt;2009&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;9034&lt;/TD&gt;&lt;TD&gt;2010&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;9069&lt;/TD&gt;&lt;TD&gt;2010&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;7767&lt;/TD&gt;&lt;TD&gt;2006&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;6&lt;/TD&gt;&lt;TD&gt;30999&lt;/TD&gt;&lt;TD&gt;2009&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;</description>
      <pubDate>Mon, 22 May 2017 00:21:00 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/delete-corresponding-rows-based-on-conditions/m-p/360342#M84820</guid>
      <dc:creator>BenBrady</dc:creator>
      <dc:date>2017-05-22T00:21:00Z</dc:date>
    </item>
    <item>
      <title>Re: delete corresponding rows based on conditions</title>
      <link>https://communities.sas.com/t5/SAS-Programming/delete-corresponding-rows-based-on-conditions/m-p/360350#M84828</link>
      <description>&lt;P&gt;Sort with the NODUPKEY option will get you there.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;Proc sort data = have out=have_sorted;
By Id programID descending year; *puts year as first;
Run;

Proc sort data = have nodupkey out=unique1;
By Id programID;
Run;

&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Or a SQL solution&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;proc sql:
Create table unique2 as
Select Id, programID, max(year) as year
From have
Group by Id, programID;
Quit;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;And one more - data step - note this does require the sort from the first piece of code.&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;Data unique3;
Set have_sorted;
By Id programID;

If first.programID;

Run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;&lt;HR /&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/142222"&gt;@BenBrady&lt;/a&gt; wrote:&lt;BR /&gt;
&lt;P&gt;I want to delete duplicates where ID and program_id are matching. But I want to keep the duplicate with the most recent collection_yr. For example, if two observations have the same ID and program_id but the completion_yr is 2009 and 2010, I want to keep the observation with the 2010 completion_yr. I have attached an example data set with duplicates. I want to delete the observation with ID=4 and program_id=9034 but collection_yr=2009 as that is not the most recent. However, I want to do this on a larger scale where there are more observations&lt;/P&gt;
&lt;P&gt;Cheers&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;TABLE&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD&gt;ID&lt;/TD&gt;
&lt;TD&gt;program_id&lt;/TD&gt;
&lt;TD&gt;COLLECTION_YR&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;999&lt;/TD&gt;
&lt;TD&gt;2009&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;TD&gt;444&lt;/TD&gt;
&lt;TD&gt;2010&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;3&lt;/TD&gt;
&lt;TD&gt;SRC&lt;/TD&gt;
&lt;TD&gt;2009&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;4&lt;/TD&gt;
&lt;TD&gt;9034&lt;/TD&gt;
&lt;TD&gt;2009&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;4&lt;/TD&gt;
&lt;TD&gt;9034&lt;/TD&gt;
&lt;TD&gt;2010&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;4&lt;/TD&gt;
&lt;TD&gt;9069&lt;/TD&gt;
&lt;TD&gt;2010&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;5&lt;/TD&gt;
&lt;TD&gt;7767&lt;/TD&gt;
&lt;TD&gt;2006&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;6&lt;/TD&gt;
&lt;TD&gt;30999&lt;/TD&gt;
&lt;TD&gt;2009&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;HR /&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;BR /&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 22 May 2017 00:57:55 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/delete-corresponding-rows-based-on-conditions/m-p/360350#M84828</guid>
      <dc:creator>Reeza</dc:creator>
      <dc:date>2017-05-22T00:57:55Z</dc:date>
    </item>
    <item>
      <title>Re: delete corresponding rows based on conditions</title>
      <link>https://communities.sas.com/t5/SAS-Programming/delete-corresponding-rows-based-on-conditions/m-p/360351#M84829</link>
      <description>&lt;P&gt;One way is to use two proc sorts. e.g.:&lt;/P&gt;
&lt;PRE&gt;proc sort data=have;
  by ID program_id descending COLLECTION_YR;
run;

proc sort data=have out=want nodupkey;
  by ID program_id;
run;
&lt;/PRE&gt;
&lt;P&gt;Art, CEO, AnalystFinder.com&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 22 May 2017 00:56:35 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/delete-corresponding-rows-based-on-conditions/m-p/360351#M84829</guid>
      <dc:creator>art297</dc:creator>
      <dc:date>2017-05-22T00:56:35Z</dc:date>
    </item>
    <item>
      <title>Re: delete corresponding rows based on conditions</title>
      <link>https://communities.sas.com/t5/SAS-Programming/delete-corresponding-rows-based-on-conditions/m-p/360455#M84871</link>
      <description>&lt;P&gt;In a pedantic feeling mode: If two records have some values the same and at least one value different they are not "duplicates" they are &lt;STRONG&gt;similar.&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;So you are selecting between similar records.&lt;/P&gt;</description>
      <pubDate>Mon, 22 May 2017 14:41:12 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/delete-corresponding-rows-based-on-conditions/m-p/360455#M84871</guid>
      <dc:creator>ballardw</dc:creator>
      <dc:date>2017-05-22T14:41:12Z</dc:date>
    </item>
    <item>
      <title>Re: delete corresponding rows based on conditions</title>
      <link>https://communities.sas.com/t5/SAS-Programming/delete-corresponding-rows-based-on-conditions/m-p/360501#M84885</link>
      <description>&lt;P&gt;If your data are &lt;EM&gt;&lt;STRONG&gt;aleady&lt;/STRONG&gt;&lt;/EM&gt; sorted by id /program_id/collection_yr:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want;
  set have;
  by id program_id collection_yr;
  if last.program_id;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;If your data are not sorted, and sorting is expensive (i.e. it's a big data set), there is always proc summary:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;proc summary data=have nway;
  class id program_id;
  var collection_yr;
  output out=want2 (drop=_type_ _freq_) max=;
run;
&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Mon, 22 May 2017 17:51:04 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/delete-corresponding-rows-based-on-conditions/m-p/360501#M84885</guid>
      <dc:creator>mkeintz</dc:creator>
      <dc:date>2017-05-22T17:51:04Z</dc:date>
    </item>
  </channel>
</rss>

