<?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: Output row based on a condition by SUBJID in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Output-row-based-on-a-condition-by-SUBJID/m-p/862863#M340833</link>
    <description>&lt;P&gt;Fantastic code! Thank you so much.&lt;/P&gt;</description>
    <pubDate>Wed, 08 Mar 2023 05:41:24 GMT</pubDate>
    <dc:creator>JennieWalker</dc:creator>
    <dc:date>2023-03-08T05:41:24Z</dc:date>
    <item>
      <title>Output row based on a condition by SUBJID</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Output-row-based-on-a-condition-by-SUBJID/m-p/862838#M340824</link>
      <description>&lt;P&gt;Hi all&lt;/P&gt;&lt;P&gt;I am seeking advice on how to output a row based on the AVLAC value by SUBJID. &amp;nbsp;Each subject has 3 rows corresponding to different visit days. I would like to output the first row (earliest ADY) &amp;nbsp;by SUBJID when AVALC= “Y”. If this condition is met, I would like to move to the next subject. If the condition is not met, then I would like to output a row where AVLAC= “N”.&lt;/P&gt;&lt;P&gt;For example, using the below dataset I would like to output three rows - one for each subject.&lt;/P&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;SUBJID&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;ADY&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;AVALC&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;PARAMCD&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;AVISIT&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;1&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;7&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;N&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;GOAL&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;WEEK 1&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;1&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;14&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;Y&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;GOAL&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;WEEK 2&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;1&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;21&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;N&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;GOAL&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;WEEK 3&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;2&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;7&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;Y&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;GOAL&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;WEEK 1&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;2&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;14&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;Y&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;GOAL&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;WEEK 2&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;2&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;21&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;N&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;GOAL&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;WEEK 3&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;3&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;7&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;N&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;GOAL&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;WEEK 1&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;3&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;14&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;N&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;GOAL&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;WEEK 2&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;3&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;21&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;N&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;GOAL&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;WEEK 3&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;Desired output...&lt;/P&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;SUBJID&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;ADY&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;AVALC&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;PARAMCD&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;AVISIT&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;1&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;14&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;Y&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;GOALMET&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;POSTBASE BEST VALUE&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;2&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;7&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;Y&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;GOALMET&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;POSTBASE BEST VALUE&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;3&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;.&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;N&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;GOALMET&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;POSTBASE BEST VALUE&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;So far my code falls short – with the below code I am outputting all rows where AVALC= “Y”.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=""&gt;data ds2; 
  do until (last.SUBJID);
  set ds1;

  by SUBJID;

    if AVALC="Y" then do;
      PARAMCD="GOALMET";
      AVISIT="POSTBASE BEST VALUE";
    output;
    end;

  end;
run;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;Thanks in advance for your time!&lt;/P&gt;&lt;P&gt;Jennie&lt;/P&gt;</description>
      <pubDate>Tue, 07 Mar 2023 22:34:53 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Output-row-based-on-a-condition-by-SUBJID/m-p/862838#M340824</guid>
      <dc:creator>JennieWalker</dc:creator>
      <dc:date>2023-03-07T22:34:53Z</dc:date>
    </item>
    <item>
      <title>Re: Output row based on a condition by SUBJID</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Output-row-based-on-a-condition-by-SUBJID/m-p/862852#M340827</link>
      <description>&lt;P&gt;Please post data as data step code. Or at least plain text. What ever source you copy those values from becomes impossible to use in&amp;nbsp; creating data step code without retyping everything and I'm too lazy to do that.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Why does the value of ADY become missing for Subjid 3?&lt;/P&gt;
&lt;P&gt;If the value of Paramcd and Avisit in the output are exactly the same for all observations why bother to have them? Note that without actual data I suspect that the length of Avisit may very well not be long enough to hold the value "POSTBASE BEST VALUE" and quite possibly the same for Paramcd.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I think this matches your selection logic. Note this requires the input data set to be sorted by Subjid and Avisit.&lt;/P&gt;
&lt;PRE&gt;data want;
   set have;
   by subjid;
   retain selected;
   if first.subjid the selected=0;
   if avalc='Y' and selected=0 then do;
      /* attempt to set Paramcd and Avisit if needed 
         goes here
      */
      output;
      selected=1;
   end;
   if last.subjid and selected=0 then do;
      /* attempt to set Paramcd and Avisit if needed 
         goes here
      */      
      output;
   end;
   drop selected;
run;&lt;/PRE&gt;
&lt;P&gt;When data is used with By group processing SAS provides automatic temporary variables First. and Last. for each variable on the By statement. These are 1/0 valued for true/false so can be used to do things conditionally for the first or last observation of a group. In this case we are setting a flag for a Retained variable, the value will be kept across the data step boundary so keeps whether we have already a selected a value for the Subjid to output. If we get to the last of the Subjid and have not selected a record for output based on Avalc then it outputs the last record for the Subjid.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I did not include code to reset values for Paramcd and Avisit because of the comments I made above. Replace the comments with assignments to do so. I also did not assign a value for ADY because no rule was provided to such when Avalc was never Y&lt;/P&gt;</description>
      <pubDate>Wed, 08 Mar 2023 00:17:03 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Output-row-based-on-a-condition-by-SUBJID/m-p/862852#M340827</guid>
      <dc:creator>ballardw</dc:creator>
      <dc:date>2023-03-08T00:17:03Z</dc:date>
    </item>
    <item>
      <title>Re: Output row based on a condition by SUBJID</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Output-row-based-on-a-condition-by-SUBJID/m-p/862863#M340833</link>
      <description>&lt;P&gt;Fantastic code! Thank you so much.&lt;/P&gt;</description>
      <pubDate>Wed, 08 Mar 2023 05:41:24 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Output-row-based-on-a-condition-by-SUBJID/m-p/862863#M340833</guid>
      <dc:creator>JennieWalker</dc:creator>
      <dc:date>2023-03-08T05:41:24Z</dc:date>
    </item>
  </channel>
</rss>

