<?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: Specifying Conditions for Subjects with Multiple Rows in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Specifying-Conditions-for-Subjects-with-Multiple-Rows/m-p/257633#M49469</link>
    <description>&lt;P&gt;Hello Everyone,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I actually found a totally different way of doing that I wanted to do selecting only the duplicates and then tranposing two datasets them erging them back together.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;data have_dupes;
	set have;
	by subjid;
	if first.usubjid ne last.usubjid;
run;


proc transpose data=have_dupes out=wide1 ;
    by USUBJID ;
	var ECHORES;
run;

proc transpose data=have_dupes out=wide2 ;
    by USUBJID ;
	var ADY;
run;

DATA ADY;
SET wide2
(RENAME= (COL1 = ADY1 COL2 = ADY2));

KEEP USUBJID ADY1 ADY2;
RUN;

DATA ECHORES;
SET wide1
(RENAME= (COL1 = ECHORES1 COL2 = ECHORES2 ));

KEEP USUBJID ECHORES1 ECHORES2;
RUN;


data ady_ECHORES;
merge ady(in=a) ECHORES (in=b);
by usubjid;
IF ECHORES1 = "YES" ECHORES1 = "MI";
IF ECHORES2 = "YES" ECHORES2 = "MI";
run;




DATA SASISNEAT;
SET ady_ECHORES;
ADY3    =0;


IF ECHORES1 = "Inadequate" AND ECHORES2 = "Inadequate" THEN DO;
 IF ABS(ADY1 - 35) &amp;lt; ABS(ADY2 - 35) THEN ADY3 = ADY1; ELSE ADY3 = ADY2;
 ECHORES3 = "Inadequate";
END;


IF ECHORES1 = "No_MI" AND ECHORES2 = "No_MI" THEN DO;
 IF ABS(ADY1 - 35) &amp;lt; ABS(ADY2 - 35) THEN ADY3 = ADY1; ELSE ADY3 = ADY2;
 ECHORES3 = "No_MI";
END;

IF ECHORES1 = "MI" AND ECHORES2 = "MI" THEN DO;
 IF ABS(ADY1 - 35) &amp;lt; ABS(ADY2 - 35) THEN ADY3 = ADY1; ELSE ADY3 = ADY2;
 ECHORES3 = "MI";
END;

IF (ECHORES1 = "Inadequate" AND ECHORES2 = "MI") THEN ECHORES3 = "MI";
IF (ECHORES1 = "Inadequate" AND ECHORES2 = "MI") THEN ADY3     =  ADY2;

IF (ECHORES2 = "Inadequate" AND ECHORES1 = "MI") THEN ECHORES3 = "MI";
IF (ECHORES2 = "Inadequate" AND ECHORES1 = "MI") THEN ADY3     =  ADY1;


IF (ECHORES1 = "Inadequate" AND ECHORES2 = "No_MI") THEN ECHORES3 = "No_MI";
IF (ECHORES1 = "Inadequate" AND ECHORES2 = "No_MI") THEN ADY3     =     ADY2;



IF (ECHORES2 = "Inadequate" AND ECHORES1 = "No_MI") THEN ECHORES3 = "No_MI";
IF (ECHORES2 = "Inadequate" AND ECHORES1 = "No_MI") THEN ADY3     =     ADY1;


IF ADY3 &amp;gt;= 32 AND ADY3 &amp;lt;= 47 THEN WINDOWFL = "Y"; ELSE WINDOWFL = "N";
RUN;
&lt;/PRE&gt;</description>
    <pubDate>Fri, 18 Mar 2016 14:46:36 GMT</pubDate>
    <dc:creator>daszlosek</dc:creator>
    <dc:date>2016-03-18T14:46:36Z</dc:date>
    <item>
      <title>Specifying Conditions for Subjects with Multiple Rows</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Specifying-Conditions-for-Subjects-with-Multiple-Rows/m-p/257335#M49378</link>
      <description>&lt;P&gt;Hello Eveyrone,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I am trying to satsify the following conditions in my dataset:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;If there are multiple ECHO results, pick only the adequate result(s), if all results are inadequate pick one closest to Day 35&lt;/LI&gt;
&lt;LI&gt;If there are multiple adequate results, pick only the one(s) in the prespecified window (Day 32-42)&lt;/LI&gt;
&lt;LI&gt;If there are multiple adequate results in the window, and they have the same result (MI, no MI, or Inadequate) pick the one closest to Day 35&lt;/LI&gt;
&lt;LI&gt;If there are multiple adequate results in the window, and they have different results (one MI and one no MI), choose the DVT (but Annemarie thinks this did not happen)&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;And my data looks like this:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;TABLE&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="266"&gt;
&lt;P&gt;SUBJID&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="266"&gt;
&lt;P&gt;ECHORES&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="266"&gt;
&lt;P&gt;WINDOW&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="266"&gt;
&lt;P&gt;1&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="266"&gt;
&lt;P&gt;No MI&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="266"&gt;
&lt;P&gt;35&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="266"&gt;
&lt;P&gt;2&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="266"&gt;
&lt;P&gt;Inadequate&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="266"&gt;
&lt;P&gt;34&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="266"&gt;
&lt;P&gt;2&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="266"&gt;
&lt;P&gt;No_MI&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="266"&gt;
&lt;P&gt;41&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="266"&gt;
&lt;P&gt;3&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="266"&gt;
&lt;P&gt;Yes&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="266"&gt;
&lt;P&gt;32&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="266"&gt;
&lt;P&gt;3&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="266"&gt;
&lt;P&gt;Yes&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="266"&gt;
&lt;P&gt;34&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="266"&gt;
&lt;P&gt;4&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="266"&gt;
&lt;P&gt;Yes&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="266"&gt;
&lt;P&gt;32&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="266"&gt;
&lt;P&gt;4&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="266"&gt;
&lt;P&gt;Yes&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="266"&gt;
&lt;P&gt;28&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;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I was starting by working on the first condition by trying out a series of do loops:&lt;/P&gt;
&lt;PRE&gt;data want;
do until(last.usubjid);
    set test; by usubjid;
	 if first.usubjid then do;
          if  ECHORES = "No MI" or if ECHORES = "MI" THEN DO; 
              if last.usubjid then do;
                   if  ECHORES = "INADEQUATE" then delete;

				   end;
				   end;
				   end;
				   end;



run;&lt;/PRE&gt;
&lt;P&gt;Is using DOW loops the right way to approach this?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Best,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Donald&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 17 Mar 2016 15:41:02 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Specifying-Conditions-for-Subjects-with-Multiple-Rows/m-p/257335#M49378</guid>
      <dc:creator>daszlosek</dc:creator>
      <dc:date>2016-03-17T15:41:02Z</dc:date>
    </item>
    <item>
      <title>Re: Specifying Conditions for Subjects with Multiple Rows</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Specifying-Conditions-for-Subjects-with-Multiple-Rows/m-p/257351#M49387</link>
      <description>&lt;P&gt;Personally I would start with one datastep for each of your conditions. &amp;nbsp;Are they heirachical, it looks it from a glance at the logic. &amp;nbsp;So point 1 do a datastep, point 2 do a datastep. &amp;nbsp;Once you know the logic its easier to try to combine. &amp;nbsp;If you can provide some test data in the form of a datastep with data to cover each condition, and what the output should look like, can look further.&lt;/P&gt;</description>
      <pubDate>Thu, 17 Mar 2016 16:26:37 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Specifying-Conditions-for-Subjects-with-Multiple-Rows/m-p/257351#M49387</guid>
      <dc:creator>RW9</dc:creator>
      <dc:date>2016-03-17T16:26:37Z</dc:date>
    </item>
    <item>
      <title>Re: Specifying Conditions for Subjects with Multiple Rows</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Specifying-Conditions-for-Subjects-with-Multiple-Rows/m-p/257633#M49469</link>
      <description>&lt;P&gt;Hello Everyone,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I actually found a totally different way of doing that I wanted to do selecting only the duplicates and then tranposing two datasets them erging them back together.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;data have_dupes;
	set have;
	by subjid;
	if first.usubjid ne last.usubjid;
run;


proc transpose data=have_dupes out=wide1 ;
    by USUBJID ;
	var ECHORES;
run;

proc transpose data=have_dupes out=wide2 ;
    by USUBJID ;
	var ADY;
run;

DATA ADY;
SET wide2
(RENAME= (COL1 = ADY1 COL2 = ADY2));

KEEP USUBJID ADY1 ADY2;
RUN;

DATA ECHORES;
SET wide1
(RENAME= (COL1 = ECHORES1 COL2 = ECHORES2 ));

KEEP USUBJID ECHORES1 ECHORES2;
RUN;


data ady_ECHORES;
merge ady(in=a) ECHORES (in=b);
by usubjid;
IF ECHORES1 = "YES" ECHORES1 = "MI";
IF ECHORES2 = "YES" ECHORES2 = "MI";
run;




DATA SASISNEAT;
SET ady_ECHORES;
ADY3    =0;


IF ECHORES1 = "Inadequate" AND ECHORES2 = "Inadequate" THEN DO;
 IF ABS(ADY1 - 35) &amp;lt; ABS(ADY2 - 35) THEN ADY3 = ADY1; ELSE ADY3 = ADY2;
 ECHORES3 = "Inadequate";
END;


IF ECHORES1 = "No_MI" AND ECHORES2 = "No_MI" THEN DO;
 IF ABS(ADY1 - 35) &amp;lt; ABS(ADY2 - 35) THEN ADY3 = ADY1; ELSE ADY3 = ADY2;
 ECHORES3 = "No_MI";
END;

IF ECHORES1 = "MI" AND ECHORES2 = "MI" THEN DO;
 IF ABS(ADY1 - 35) &amp;lt; ABS(ADY2 - 35) THEN ADY3 = ADY1; ELSE ADY3 = ADY2;
 ECHORES3 = "MI";
END;

IF (ECHORES1 = "Inadequate" AND ECHORES2 = "MI") THEN ECHORES3 = "MI";
IF (ECHORES1 = "Inadequate" AND ECHORES2 = "MI") THEN ADY3     =  ADY2;

IF (ECHORES2 = "Inadequate" AND ECHORES1 = "MI") THEN ECHORES3 = "MI";
IF (ECHORES2 = "Inadequate" AND ECHORES1 = "MI") THEN ADY3     =  ADY1;


IF (ECHORES1 = "Inadequate" AND ECHORES2 = "No_MI") THEN ECHORES3 = "No_MI";
IF (ECHORES1 = "Inadequate" AND ECHORES2 = "No_MI") THEN ADY3     =     ADY2;



IF (ECHORES2 = "Inadequate" AND ECHORES1 = "No_MI") THEN ECHORES3 = "No_MI";
IF (ECHORES2 = "Inadequate" AND ECHORES1 = "No_MI") THEN ADY3     =     ADY1;


IF ADY3 &amp;gt;= 32 AND ADY3 &amp;lt;= 47 THEN WINDOWFL = "Y"; ELSE WINDOWFL = "N";
RUN;
&lt;/PRE&gt;</description>
      <pubDate>Fri, 18 Mar 2016 14:46:36 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Specifying-Conditions-for-Subjects-with-Multiple-Rows/m-p/257633#M49469</guid>
      <dc:creator>daszlosek</dc:creator>
      <dc:date>2016-03-18T14:46:36Z</dc:date>
    </item>
  </channel>
</rss>

