<?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 delete a set of data based on a condition not being met over a group of multiple observat in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/How-to-delete-a-set-of-data-based-on-a-condition-not-being-met/m-p/822094#M324589</link>
    <description>&lt;P&gt;Read the keys where the condition is met into a hash:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want;
set have;
if _n_ = 1
then do;
  declare hash h (dataset:"have (where=(custid = custto))");
  h.definekey("custid");
  h.definedone();
end;
if h.check() = 0;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;or use a double DO loop:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want;
flag = 0;
do until (last.custid);
  set have;
  by custid;
  if custid = custto then flag = 1;
end;
do until (last.custid);
  set have;
  by custid;
  if flag then output;
end;
drop flag;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
    <pubDate>Thu, 07 Jul 2022 16:30:16 GMT</pubDate>
    <dc:creator>Kurt_Bremser</dc:creator>
    <dc:date>2022-07-07T16:30:16Z</dc:date>
    <item>
      <title>How to delete a set of data based on a condition not being met over a group of multiple observations</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-delete-a-set-of-data-based-on-a-condition-not-being-met/m-p/822090#M324587</link>
      <description>&lt;P&gt;Hi all,&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I'm working on a dataset that has repeated data. Below is a sample of the Have data:&amp;nbsp;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;CustID&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;Count&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;CustTo&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;AAA&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;3&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;AAA&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;AAA&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;3&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;BBB&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;AAA&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;3&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;DDD&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;BBB&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;2&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;AAA&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;BBB&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;2&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;AAA&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;CCC&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;1&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;BBB&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;DDD&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;3&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;AAA&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;DDD&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;3&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;BBB&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;DDD&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;3&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;AAA&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;EEE&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;2&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;GGG&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;EEE&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;2&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;HHH&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;FFF&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;1&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;AAA&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;GGG&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;1&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;AAA&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;HHH&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;4&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;BBB&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;HHH&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;4&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;BBB&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;HHH&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;4&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;BBB&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;HHH&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;4&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;HHH&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;in sas format:&lt;/P&gt;&lt;P&gt;data have;&lt;BR /&gt;infile datalines truncover dsd dlm=',';&lt;BR /&gt;input (custID count custto) ($);&lt;BR /&gt;datalines;&lt;BR /&gt;AAA,3,AAA&lt;BR /&gt;AAA,3,BBB&lt;BR /&gt;AAA,3,DDD&lt;BR /&gt;BBB,2,AAA&lt;BR /&gt;BBB,2,AAA&lt;BR /&gt;CCC,1,BBB&lt;BR /&gt;DDD,3,AAA&lt;BR /&gt;DDD,3,BBB&lt;BR /&gt;DDD,3,AAA&lt;BR /&gt;EEE,2,GGG&lt;BR /&gt;EEE,2,HHH&lt;BR /&gt;FFF,1,AAA&lt;BR /&gt;GGG,1,AAA&lt;BR /&gt;HHH,4,BBB&lt;BR /&gt;HHH,4,BBB&lt;BR /&gt;HHH,4,BBB&lt;BR /&gt;HHH,4,HHH&lt;BR /&gt;;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I want to look at the data in groups, one CUSTID at a time.&amp;nbsp;&lt;/P&gt;&lt;P&gt;For each CUSTID the same CUSTID should be present in the CustTo column at least once or else that entire group of CUSTID obs is to be deleted (or sent to another output dataset).&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The Want table would look like this, where only AAA and HHH data remains and all other CUSTIDs were removed.:&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;CustID&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;Count&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;CustTo&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;AAA&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;3&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;AAA&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;AAA&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;3&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;BBB&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;AAA&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;3&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;DDD&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;HHH&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;4&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;BBB&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;HHH&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;4&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;BBB&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;HHH&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;4&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;BBB&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;HHH&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;4&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;HHH&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&lt;BR /&gt;Based on searches on this forum I tried this but it did not work in the full dataset:&lt;BR /&gt;proc sql;&lt;BR /&gt;create table want as&lt;BR /&gt;select * from have where custid in (select distinct custto from have);&lt;BR /&gt;quit;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;Any help would be much appreciated!&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 07 Jul 2022 16:02:00 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-delete-a-set-of-data-based-on-a-condition-not-being-met/m-p/822090#M324587</guid>
      <dc:creator>curiosity</dc:creator>
      <dc:date>2022-07-07T16:02:00Z</dc:date>
    </item>
    <item>
      <title>Re: How to delete a set of data based on a condition not being met over a group of multiple observat</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-delete-a-set-of-data-based-on-a-condition-not-being-met/m-p/822094#M324589</link>
      <description>&lt;P&gt;Read the keys where the condition is met into a hash:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want;
set have;
if _n_ = 1
then do;
  declare hash h (dataset:"have (where=(custid = custto))");
  h.definekey("custid");
  h.definedone();
end;
if h.check() = 0;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;or use a double DO loop:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want;
flag = 0;
do until (last.custid);
  set have;
  by custid;
  if custid = custto then flag = 1;
end;
do until (last.custid);
  set have;
  by custid;
  if flag then output;
end;
drop flag;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Thu, 07 Jul 2022 16:30:16 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-delete-a-set-of-data-based-on-a-condition-not-being-met/m-p/822094#M324589</guid>
      <dc:creator>Kurt_Bremser</dc:creator>
      <dc:date>2022-07-07T16:30:16Z</dc:date>
    </item>
    <item>
      <title>Re: How to delete a set of data based on a condition not being met over a group of multiple observat</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-delete-a-set-of-data-based-on-a-condition-not-being-met/m-p/822106#M324596</link>
      <description>&lt;P&gt;Thanks Kurt, that worked!&lt;BR /&gt;&lt;BR /&gt;I have a related question (not sure if I should ask that in a new topic as it is similar but with one additional column).&lt;BR /&gt;If you wish I can move this question to a new topic.&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=""&gt;data have;
  infile datalines truncover dsd dlm=',';
  input (custID count custfrom custto) ($);
  datalines;
AxA,3,aaa,aaa
AxA,3,aaa,bbb
AxA,3,aaa,ccc
B2B,2,bbb,ccc
B2B,2,bbb,ddd
CCC,1,ccc,aaa
DzD,3,ddd,aaa
DzD,3,ddd,hhh
DzD,3,ddd,ccc
EEE,2,eee,ccc
EtE,2,eee,aaa
FtF,1,fff,ggg
GGG,1,ggg,hhh
HHt,4,hhh,aaa
HHt,4,hhh,bbb
HHt,4,hhh,ccc
HHt,4,hhh,hhh
;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;In this case I want to subset by orderID.&amp;nbsp;&lt;BR /&gt;If custfrom does not equal to custto at least once per orderID then I would like to remove all of those orderid observations from the dataset.&lt;BR /&gt;&lt;BR /&gt;want would look like this:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;CustID&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;Count&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;Custfrom&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;custto&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;AxA&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;3&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;aaa&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;aaa&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;AxA&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;3&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;aaa&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;bbb&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;AxA&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;3&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;aaa&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;ccc&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;HHt&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;4&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;hhh&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;aaa&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;HHt&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;4&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;hhh&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;bbb&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;HHt&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;4&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;hhh&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;ccc&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;HHt&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;4&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;hhh&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;hhh&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;thank you!&lt;/P&gt;</description>
      <pubDate>Thu, 07 Jul 2022 17:33:48 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-delete-a-set-of-data-based-on-a-condition-not-being-met/m-p/822106#M324596</guid>
      <dc:creator>curiosity</dc:creator>
      <dc:date>2022-07-07T17:33:48Z</dc:date>
    </item>
    <item>
      <title>Re: How to delete a set of data based on a condition not being met over a group of multiple observat</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-delete-a-set-of-data-based-on-a-condition-not-being-met/m-p/822107#M324597</link>
      <description>&lt;P&gt;Just add your condition into the subquery.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;proc sql;
create table want as
  select a.* from have a
  where a.custid in 
      (select distinct b.custid 
       from have b
       where b.custid = b.custto
      )
;
quit;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Thu, 07 Jul 2022 17:31:36 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-delete-a-set-of-data-based-on-a-condition-not-being-met/m-p/822107#M324597</guid>
      <dc:creator>Tom</dc:creator>
      <dc:date>2022-07-07T17:31:36Z</dc:date>
    </item>
  </channel>
</rss>

