<?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: Extract multiple criteria per subject in New SAS User</title>
    <link>https://communities.sas.com/t5/New-SAS-User/Extract-multiple-criteria-per-subject/m-p/614948#M18695</link>
    <description>&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data raw_data;
input Subject_id $ Test_Code $ Result $;
datalines;
1001 IE01 Fail
1001 IE02 Pass
1001 IE03 Pass
1001 EX01 Pass
1001 EX01 Fail
1001 EX01 Fail
1003 IE01 Fail
1003 IE02 Fail
1003 EX01 Pass
1003 EX02 Pass
;

proc sql;
create table want as
select *
from raw_data
group by subject_id,substr(test_code,1,2)
having sum(Result='Fail')=1 and Result='Fail' or sum(Result='Pass')=1 and Result='Pass';
quit;&lt;/CODE&gt;&lt;/PRE&gt;</description>
    <pubDate>Fri, 03 Jan 2020 12:48:57 GMT</pubDate>
    <dc:creator>novinosrin</dc:creator>
    <dc:date>2020-01-03T12:48:57Z</dc:date>
    <item>
      <title>Extract multiple criteria per subject</title>
      <link>https://communities.sas.com/t5/New-SAS-User/Extract-multiple-criteria-per-subject/m-p/614946#M18694</link>
      <description>&lt;P&gt;Objective;&amp;nbsp;&lt;/P&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;I need to pick the subject(s) who has failed only one test(IE) and passed only one test (ex).&amp;nbsp;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;then output, both condition should match for a subject.&lt;/DIV&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;data raw_data;&lt;BR /&gt;input Subject_id $ Test_Code $ Result $;&lt;BR /&gt;datalines;&lt;BR /&gt;1001 IE01 Fail&lt;BR /&gt;1001 IE02 Pass&lt;BR /&gt;1001 IE03 Pass&lt;BR /&gt;1001 EX01 Pass&lt;BR /&gt;1001 EX01 Fail&lt;BR /&gt;1001 EX01 Fail&lt;BR /&gt;1003 IE01 Fail&lt;BR /&gt;1003 IE02 Fail&lt;BR /&gt;1003 EX01 Pass&lt;BR /&gt;1003 EX02 Pass&lt;BR /&gt;;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;output required;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;Subject_id&lt;/TD&gt;&lt;TD&gt;Test_Code&lt;/TD&gt;&lt;TD&gt;Result&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1001&lt;/TD&gt;&lt;TD&gt;IE01&lt;/TD&gt;&lt;TD&gt;Fail&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1001&lt;/TD&gt;&lt;TD&gt;EX01&lt;/TD&gt;&lt;TD&gt;Pass&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;My code;&lt;/P&gt;</description>
      <pubDate>Fri, 03 Jan 2020 12:35:51 GMT</pubDate>
      <guid>https://communities.sas.com/t5/New-SAS-User/Extract-multiple-criteria-per-subject/m-p/614946#M18694</guid>
      <dc:creator>tsureshinvites</dc:creator>
      <dc:date>2020-01-03T12:35:51Z</dc:date>
    </item>
    <item>
      <title>Re: Extract multiple criteria per subject</title>
      <link>https://communities.sas.com/t5/New-SAS-User/Extract-multiple-criteria-per-subject/m-p/614948#M18695</link>
      <description>&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data raw_data;
input Subject_id $ Test_Code $ Result $;
datalines;
1001 IE01 Fail
1001 IE02 Pass
1001 IE03 Pass
1001 EX01 Pass
1001 EX01 Fail
1001 EX01 Fail
1003 IE01 Fail
1003 IE02 Fail
1003 EX01 Pass
1003 EX02 Pass
;

proc sql;
create table want as
select *
from raw_data
group by subject_id,substr(test_code,1,2)
having sum(Result='Fail')=1 and Result='Fail' or sum(Result='Pass')=1 and Result='Pass';
quit;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Fri, 03 Jan 2020 12:48:57 GMT</pubDate>
      <guid>https://communities.sas.com/t5/New-SAS-User/Extract-multiple-criteria-per-subject/m-p/614948#M18695</guid>
      <dc:creator>novinosrin</dc:creator>
      <dc:date>2020-01-03T12:48:57Z</dc:date>
    </item>
    <item>
      <title>Re: Extract multiple criteria per subject</title>
      <link>https://communities.sas.com/t5/New-SAS-User/Extract-multiple-criteria-per-subject/m-p/614955#M18696</link>
      <description>&lt;P&gt;Thanks a lot for your wonderful support, but small request, could you please write in datastep.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks a lot.&lt;/P&gt;</description>
      <pubDate>Fri, 03 Jan 2020 13:08:18 GMT</pubDate>
      <guid>https://communities.sas.com/t5/New-SAS-User/Extract-multiple-criteria-per-subject/m-p/614955#M18696</guid>
      <dc:creator>tsureshinvites</dc:creator>
      <dc:date>2020-01-03T13:08:18Z</dc:date>
    </item>
    <item>
      <title>Re: Extract multiple criteria per subject</title>
      <link>https://communities.sas.com/t5/New-SAS-User/Extract-multiple-criteria-per-subject/m-p/614964#M18698</link>
      <description>&lt;P&gt;Hi&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/293333"&gt;@tsureshinvites&lt;/a&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Here is a way to do that using data / proc step&lt;/P&gt;
&lt;P&gt;But in my opinion, proc sql remains the simplest way to do that.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;proc freq data=raw_data noprint;
	table Subject_id * Result / out=stat_IE (where=(count=1) drop=percent);
	where substr(Test_code,1,2) = "IE" and Result = "Fail";
run;
&lt;BR /&gt;/* IE */
data stat_IE2;
	if _n_ = 1 then do;
		declare hash h (dataset:'stat_IE');
		h.definekey('Subject_id','Result'); 
		h.definedone();
	end;
	set raw_data;
	where substr(Test_code,1,2) = "IE";
	if h.find() = 0 then output;
run;
&lt;BR /&gt;/* EX */&lt;BR /&gt;
proc freq data=raw_data noprint;
	table Subject_id * Result / out=stat_EX (where=(count=1) drop=percent);
	where substr(Test_code,1,2) = "EX" and Result = "Pass";
run;

data stat_EX2;
	if _n_ = 1 then do;
		declare hash h (dataset:'stat_EX');
		h.definekey('Subject_id','Result'); 
		h.definedone();
	end;
	set raw_data;
	where substr(Test_code,1,2) = "EX";
	if h.find() = 0 then output;
run;
&lt;BR /&gt;/* Final dataset : dataset WANT*/
data want;
	if _n_ = 1 then do;
		declare hash h1 (dataset:'stat_EX2');
		h1.definekey('Subject_id'); 
		h1.definedone();
		declare hash h2 (dataset:'stat_IE2');
		h2.definekey('Subject_id'); 
		h2.definedone();
	end;

	set stat_EX2 stat_IE2;
	if h1.find() = 0 and h2.find() = 0 then output;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Fri, 03 Jan 2020 13:33:40 GMT</pubDate>
      <guid>https://communities.sas.com/t5/New-SAS-User/Extract-multiple-criteria-per-subject/m-p/614964#M18698</guid>
      <dc:creator>ed_sas_member</dc:creator>
      <dc:date>2020-01-03T13:33:40Z</dc:date>
    </item>
    <item>
      <title>Re: Extract multiple criteria per subject</title>
      <link>https://communities.sas.com/t5/New-SAS-User/Extract-multiple-criteria-per-subject/m-p/614965#M18699</link>
      <description>&lt;P&gt;Hi&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/293333"&gt;@tsureshinvites&lt;/a&gt;&amp;nbsp; Here is&amp;nbsp; simple Datastep approach that you will easily understand. Please review the comments&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;

data raw_data;
input Subject_id $ Test_Code $ Result $;
datalines;
1001 IE01 Fail
1001 IE02 Pass
1001 IE03 Pass
1001 EX01 Pass
1001 EX01 Fail
1001 EX01 Fail
1003 IE01 Fail
1003 IE02 Fail
1003 EX01 Pass
1003 EX02 Pass
;

/*Get the group */

data temp;
set raw_data;
t=substr(test_code,1,2);
run;

/*Sort for by group processing*/
proc sort data=temp;
by Subject_id t;
run;
/*Flag the observations based on the condition for each by group*/
data temp1;
set temp;
by Subject_id t;
if first.t then do;
f1=.;
f2=.;
end;
if Result='Fail' then f1+1;
else if Result='Pass' then f2+1;
if last.t;
keep subject_id t f:;
run;

/*Merge back the flagged result from the previous with the original and filter*/
data want;
merge temp temp1;
by Subject_id t;
if Result='Fail' and f1=1 or Result='Pass' and f2=1;
drop f: t;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;If you are learning, the above is the easiest to follow&lt;/P&gt;</description>
      <pubDate>Fri, 03 Jan 2020 13:36:57 GMT</pubDate>
      <guid>https://communities.sas.com/t5/New-SAS-User/Extract-multiple-criteria-per-subject/m-p/614965#M18699</guid>
      <dc:creator>novinosrin</dc:creator>
      <dc:date>2020-01-03T13:36:57Z</dc:date>
    </item>
    <item>
      <title>Re: Extract multiple criteria per subject</title>
      <link>https://communities.sas.com/t5/New-SAS-User/Extract-multiple-criteria-per-subject/m-p/614966#M18700</link>
      <description>&lt;P&gt;Assuming the data has been sorted .&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data raw_data;
input Subject_id $ Test_Code $ Result $;
datalines;
1001 IE01 Fail
1001 IE02 Pass
1001 IE03 Pass
1001 EX01 Pass
1001 EX01 Fail
1001 EX01 Fail
1003 IE01 Fail
1003 IE02 Fail
1003 EX01 Pass
1003 EX02 Pass
;

data want;
one=0;two=0;
 do until(last.Subject_id);
  set raw_data;
  by Subject_id;
  if Test_code =: 'IE' and Result='Fail' then one+1;
  if Test_code =: 'EX' and Result='Pass' then two+1;
 end;
 do until(last.Subject_id);
  set raw_data;
  by Subject_id;
  if one=1 and two=1 then do;
   if Test_code =: 'IE' and Result='Fail' or  Test_code =: 'EX' and Result='Pass' then output;
  end;
 end;
drop one two;
run;
&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Fri, 03 Jan 2020 13:45:10 GMT</pubDate>
      <guid>https://communities.sas.com/t5/New-SAS-User/Extract-multiple-criteria-per-subject/m-p/614966#M18700</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2020-01-03T13:45:10Z</dc:date>
    </item>
  </channel>
</rss>

