<?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: Urgent help needed for this Tricky Logic based SAs in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Urgent-help-needed-for-this-Tricky-Logic-based-SAs/m-p/637816#M189633</link>
    <description>&lt;P&gt;Perfect!!!&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The code you shared works in 100 percent perfection.&lt;/P&gt;&lt;P&gt;&amp;nbsp;And I had accepted this as Solution.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Could you please help me understand how does this code work. I just tried your code blindly. And worked. But, did not understand the logicality of it. I am really not as techy as you.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Kudos to you technical skill.&lt;/P&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;</description>
    <pubDate>Mon, 06 Apr 2020 10:59:27 GMT</pubDate>
    <dc:creator>ShilpaMadhu</dc:creator>
    <dc:date>2020-04-06T10:59:27Z</dc:date>
    <item>
      <title>Urgent help needed for this Tricky Logic based SAs</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Urgent-help-needed-for-this-Tricky-Logic-based-SAs/m-p/637365#M189461</link>
      <description>&lt;P&gt;Hi All, I have been fighting with this data file..&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Problem : There are Visits and Medication number associated with PatientID. For the missing medication, there will be reCalc flag of1. So, what I need to do here is whenever there is 1 I will have to identify the just previous visit(only) for the particular PatientID and need to find how many medications were given in the previous visit(It could be 1 or 2 and N number of medications given during the visits as per the plan). Once found this as well, need to add those medications in the current visit which is flagged as 1.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;PatientID&lt;/TD&gt;&lt;TD&gt;Visit&lt;/TD&gt;&lt;TD&gt;Medication&lt;/TD&gt;&lt;TD&gt;reCalc&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;Visit1&lt;/TD&gt;&lt;TD&gt;111111&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;Visit2&lt;/TD&gt;&lt;TD&gt;222222&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;Visit2&lt;/TD&gt;&lt;TD&gt;33333&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;Visit3&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;Visit4&lt;/TD&gt;&lt;TD&gt;888888&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;…….&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;12&lt;/TD&gt;&lt;TD&gt;Visit1&lt;/TD&gt;&lt;TD&gt;34343&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;12&lt;/TD&gt;&lt;TD&gt;Visit2&lt;/TD&gt;&lt;TD&gt;12345&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;12&lt;/TD&gt;&lt;TD&gt;Visit2&lt;/TD&gt;&lt;TD&gt;67891&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;12&lt;/TD&gt;&lt;TD&gt;Visit2&lt;/TD&gt;&lt;TD&gt;54321&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;12&lt;/TD&gt;&lt;TD&gt;Visit4&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;12&lt;/TD&gt;&lt;TD&gt;Visit5&lt;/TD&gt;&lt;TD&gt;43333&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;12&lt;/TD&gt;&lt;TD&gt;Visit6&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;below is the expected output,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;PatientID&lt;/TD&gt;&lt;TD&gt;Visit&lt;/TD&gt;&lt;TD&gt;Medication&lt;/TD&gt;&lt;TD&gt;reCalc&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;Visit1&lt;/TD&gt;&lt;TD&gt;111111&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;Visit2&lt;/TD&gt;&lt;TD&gt;222222&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;Visit2&lt;/TD&gt;&lt;TD&gt;33333&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;Visit3&lt;/TD&gt;&lt;TD&gt;222222&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;Visit3&lt;/TD&gt;&lt;TD&gt;33333&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;Visit4&lt;/TD&gt;&lt;TD&gt;888888&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;…….&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;12&lt;/TD&gt;&lt;TD&gt;Visit1&lt;/TD&gt;&lt;TD&gt;34343&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;12&lt;/TD&gt;&lt;TD&gt;Visit2&lt;/TD&gt;&lt;TD&gt;12345&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;12&lt;/TD&gt;&lt;TD&gt;Visit2&lt;/TD&gt;&lt;TD&gt;67891&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;12&lt;/TD&gt;&lt;TD&gt;Visit2&lt;/TD&gt;&lt;TD&gt;54321&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;12&lt;/TD&gt;&lt;TD&gt;Visit4&lt;/TD&gt;&lt;TD&gt;12345&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;12&lt;/TD&gt;&lt;TD&gt;Visit4&lt;/TD&gt;&lt;TD&gt;67891&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;12&lt;/TD&gt;&lt;TD&gt;Visit4&lt;/TD&gt;&lt;TD&gt;54321&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;12&lt;/TD&gt;&lt;TD&gt;Visit5&lt;/TD&gt;&lt;TD&gt;43333&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;12&lt;/TD&gt;&lt;TD&gt;Visit6&lt;/TD&gt;&lt;TD&gt;43333&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;DIV class="mceNonEditable lia-copypaste-placeholder"&gt;&amp;nbsp;&lt;/DIV&gt;&lt;P&gt;Please please look into this.&lt;/P&gt;</description>
      <pubDate>Fri, 03 Apr 2020 21:49:35 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Urgent-help-needed-for-this-Tricky-Logic-based-SAs/m-p/637365#M189461</guid>
      <dc:creator>ShilpaMadhu</dc:creator>
      <dc:date>2020-04-03T21:49:35Z</dc:date>
    </item>
    <item>
      <title>Re: Urgent help needed for this Tricky Logic based SAs</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Urgent-help-needed-for-this-Tricky-Logic-based-SAs/m-p/637372#M189465</link>
      <description>&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;
data have;
infile cards truncover;
input PatientID	Visit $	Medication	reCalc;
cards;
1	Visit1	111111	 
1	Visit2	222222	 
1	Visit2	33333	 
1	Visit3	 .	1
1	Visit4	888888	 
12	Visit1	34343	 
12	Visit2	12345	 
12	Visit2	67891	 
12	Visit2	54321	 
12	Visit4	 .	1
12	Visit5	43333	 
12	Visit6	 .	1
;


data want;
 set have;
 by patientid visit;
 retain t;
 if last.visit and Medication then t=Medication;
 if recalc then Medication=t;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Fri, 03 Apr 2020 22:04:52 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Urgent-help-needed-for-this-Tricky-Logic-based-SAs/m-p/637372#M189465</guid>
      <dc:creator>novinosrin</dc:creator>
      <dc:date>2020-04-03T22:04:52Z</dc:date>
    </item>
    <item>
      <title>Re: Urgent help needed for this Tricky Logic based SAs</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Urgent-help-needed-for-this-Tricky-Logic-based-SAs/m-p/637468#M189472</link>
      <description>&lt;P&gt;If the current visit is a single record with recalc=1, you want to repeat the entire medication sequence for the preceding visit by the same patient.&amp;nbsp; So if the preceding visit had 3 medication records, you want to replicate them with the current visit.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;This is one of those times, when the mistakenly-abhorred use of a lag function in the IF statement is just the ticket:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
infile cards truncover;
input PatientID	Visit $	Medication	reCalc;
cards;
1	Visit1	111111	 
1	Visit2	222222	 
1	Visit2	33333	 
1	Visit3	 .	1
1	Visit4	888888	 
12	Visit1	34343	 
12	Visit2	12345	 
12	Visit2	67891	 
12	Visit2	54321	 
12	Visit4	 .	1
12	Visit5	43333	 
12	Visit6	 .	1
;
data want (drop=_:);
  set have;
  by patientid visit;

  retain _prior_visit_start;
  if first.visit then _prior_visit_start=lag(_n_);

  if recalc^=1 then output;
  else do ptr=_prior_visit_start to _n_-1;
    set have (keep=medication) point=ptr;
    output;
  end;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Assumptions:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;data sorted by patientid/visit&lt;/LI&gt;
&lt;LI&gt;no patient has a first record with recalc=1&lt;/LI&gt;
&lt;LI&gt;any record with recalc=1 is the only record for that visit.&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;Back to the subject of a lag function inside an IF statement.&amp;nbsp; What you want is to know where in dataset HAVE is the beginning of the prior visit.&amp;nbsp;&amp;nbsp; The "if first.visit" test says to do an action only at the start of the visit.&amp;nbsp; And that action is the lag function, which really should be thought of as an "update queue" function.&amp;nbsp; So instead of looking back one observation, the lag here is looking back one "instance" - namely the prior time first.visit=1.&amp;nbsp;&amp;nbsp; Thus one keeps track of the observation number starting the prior visit.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;And of course, the end of the prior visit is simply _N_-1.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Also whenever recalc=1 just re-read only the medication sequence for the prior group outputting once per medication.&amp;nbsp; This is done via the "point=" option on the set statement.&amp;nbsp; Otherwise, if recalc^=1 simply output.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The only way this deviates from your sample want, is that it has recalc=1 in every one of the generated records for the recalc-visit, not just the last one.&amp;nbsp; That would not be hard to fix, but would detract from the central point.&lt;/P&gt;</description>
      <pubDate>Fri, 03 Apr 2020 23:11:18 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Urgent-help-needed-for-this-Tricky-Logic-based-SAs/m-p/637468#M189472</guid>
      <dc:creator>mkeintz</dc:creator>
      <dc:date>2020-04-03T23:11:18Z</dc:date>
    </item>
    <item>
      <title>Re: Urgent help needed for this Tricky Logic based SAs</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Urgent-help-needed-for-this-Tricky-Logic-based-SAs/m-p/637528#M189495</link>
      <description>&lt;P&gt;Thanks a lot for all your effort.&amp;nbsp; I added your code snippet in my code.&amp;nbsp;&lt;/P&gt;&lt;P&gt;We are almost there,,,, this code is taking most part of my datafile Except that, the below scenario has&amp;nbsp;to be covered,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;data have;&lt;BR /&gt;infile cards truncover;&lt;BR /&gt;input PatientID Visit $ Medication reCalc;&lt;BR /&gt;cards;&lt;BR /&gt;1 Visit1 111111&lt;BR /&gt;1 Visit2 222222&lt;BR /&gt;1 Visit2 33333&lt;BR /&gt;1 Visit3 . 1&lt;BR /&gt;1 Visit4 888888&lt;BR /&gt;12 Visit1 34343&lt;BR /&gt;12 Visit2&amp;nbsp; .&lt;BR /&gt;12 Visit2&amp;nbsp; .&lt;BR /&gt;12 Visit2 .&lt;BR /&gt;12 Visit4 . 1&lt;BR /&gt;12 Visit5 43333&lt;BR /&gt;12 Visit6 . 1&lt;BR /&gt;;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Please try this.&amp;nbsp; When there are many null values, it is nit considering. Please help me with this as well.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Sat, 04 Apr 2020 11:40:19 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Urgent-help-needed-for-this-Tricky-Logic-based-SAs/m-p/637528#M189495</guid>
      <dc:creator>ShilpaMadhu</dc:creator>
      <dc:date>2020-04-04T11:40:19Z</dc:date>
    </item>
    <item>
      <title>Re: Urgent help needed for this Tricky Logic based SAs</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Urgent-help-needed-for-this-Tricky-Logic-based-SAs/m-p/637613#M189519</link>
      <description>&lt;P&gt;I have told you what I understand the task to be - as a specific "business rule".&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;You have shown additional input data that my understanding does not address.&amp;nbsp; That's find, but you have NOT shown what you want the output to look like.&amp;nbsp; I am not a good mind reader.&amp;nbsp; Please show (1) what the program produced, (2) what you want it to produce, and (3) a description of the actual business rule you are attempting to implement.&lt;/P&gt;</description>
      <pubDate>Sat, 04 Apr 2020 19:32:14 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Urgent-help-needed-for-this-Tricky-Logic-based-SAs/m-p/637613#M189519</guid>
      <dc:creator>mkeintz</dc:creator>
      <dc:date>2020-04-04T19:32:14Z</dc:date>
    </item>
    <item>
      <title>Re: Urgent help needed for this Tricky Logic based SAs</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Urgent-help-needed-for-this-Tricky-Logic-based-SAs/m-p/637738#M189602</link>
      <description>&lt;P&gt;I appreciate you for your sincere effort on this tricky problem. The solution you have provided was covering my code for Patient 1 and 12. But not for 13 and 14. I have added the scenario here for reference with the desire output. Please have a look.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;data have;&lt;BR /&gt;infile cards truncover;&lt;BR /&gt;input PatientID&amp;nbsp;Visit $&amp;nbsp;Medication&amp;nbsp;reCalc;&lt;BR /&gt;cards;&lt;BR /&gt;1&amp;nbsp;Visit1&amp;nbsp;111111&amp;nbsp;&lt;BR /&gt;1&amp;nbsp;Visit2&amp;nbsp;222222&amp;nbsp;&lt;BR /&gt;1&amp;nbsp;Visit2&amp;nbsp;33333&amp;nbsp;&lt;BR /&gt;1&amp;nbsp;Visit3&amp;nbsp; .&amp;nbsp;1&lt;BR /&gt;1&amp;nbsp;Visit4&amp;nbsp;888888&amp;nbsp;&lt;BR /&gt;12&amp;nbsp;Visit1&amp;nbsp;34343&amp;nbsp;&lt;BR /&gt;12&amp;nbsp;Visit2&amp;nbsp;12345&amp;nbsp;&lt;BR /&gt;12&amp;nbsp;Visit2&amp;nbsp;67891&amp;nbsp;&lt;BR /&gt;12&amp;nbsp;Visit2&amp;nbsp;54321&amp;nbsp;&lt;BR /&gt;12&amp;nbsp;Visit4&amp;nbsp; .&amp;nbsp;1&lt;BR /&gt;12&amp;nbsp;Visit5&amp;nbsp;43333&amp;nbsp;&lt;BR /&gt;12&amp;nbsp;Visit6&amp;nbsp; .&amp;nbsp;1&lt;BR /&gt;13&amp;nbsp; Visit1&amp;nbsp; 454545&lt;BR /&gt;13&amp;nbsp; Visit1&amp;nbsp; 778788&lt;BR /&gt;13&amp;nbsp; Visit2&amp;nbsp; .&amp;nbsp;&lt;BR /&gt;13&amp;nbsp;Visit3&amp;nbsp;.&amp;nbsp;&lt;BR /&gt;13&amp;nbsp; Visit4&amp;nbsp;.&lt;BR /&gt;13&amp;nbsp; Visit5 &amp;nbsp;.&lt;BR /&gt;13&amp;nbsp; Visit6&amp;nbsp;.&lt;BR /&gt;13&amp;nbsp; Visit7&amp;nbsp; .&amp;nbsp;1&lt;BR /&gt;14&amp;nbsp;Visit1&amp;nbsp;545450&lt;BR /&gt;14&amp;nbsp; Visit1 3434454&lt;BR /&gt;14&amp;nbsp;Visit2 &amp;nbsp;. 1&lt;BR /&gt;14&amp;nbsp; Visit3&amp;nbsp;. 1&lt;/P&gt;&lt;P&gt;;&lt;BR /&gt;Run;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Desire Output :&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;PatientID&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;Visit&lt;/TD&gt;&lt;TD&gt;Medication&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;reCalc&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;BR /&gt;1&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;Visit1&lt;/TD&gt;&lt;TD&gt;111111&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;Visit2&lt;/TD&gt;&lt;TD&gt;222222&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;Visit2&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;33333&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;Visit3&lt;/TD&gt;&lt;TD&gt;222222&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;Visit3&lt;/TD&gt;&lt;TD&gt;33333&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;Visit4&lt;/TD&gt;&lt;TD&gt;888888&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;12&amp;nbsp;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;Visit1&lt;/TD&gt;&lt;TD&gt;34343&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;12&lt;/TD&gt;&lt;TD&gt;Visit2&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;12345&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;12&amp;nbsp;&amp;nbsp;&lt;BR /&gt;12&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;Visit2&lt;/TD&gt;&lt;TD&gt;67891&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;12&lt;/TD&gt;&lt;TD&gt;Visit2&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;54321&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;12&lt;/TD&gt;&lt;TD&gt;Visit4&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;12345&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;12&lt;/TD&gt;&lt;TD&gt;Visit4&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;67891&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;12&lt;/TD&gt;&lt;TD&gt;Visit4&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;54321&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;12&amp;nbsp;&amp;nbsp;&lt;BR /&gt;12&lt;/TD&gt;&lt;TD&gt;Visit5&lt;/TD&gt;&lt;TD&gt;43333&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;12&lt;/TD&gt;&lt;TD&gt;Visit6&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;43333&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;13&amp;nbsp;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;Visit1&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;454545&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;13&lt;/TD&gt;&lt;TD&gt;Visit1&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;778788&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;13&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;Visit2&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;13&lt;/TD&gt;&lt;TD&gt;Visit3&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;13&lt;/TD&gt;&lt;TD&gt;Visit4&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;13&lt;/TD&gt;&lt;TD&gt;Visit5&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;13&lt;/TD&gt;&lt;TD&gt;Visit6&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;13&lt;/TD&gt;&lt;TD&gt;Visit7&lt;/TD&gt;&lt;TD&gt;454545&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;13&lt;/TD&gt;&lt;TD&gt;Visit7&lt;/TD&gt;&lt;TD&gt;778788&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;14&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;Visit1&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;545450&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;14&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;Visit1&lt;/TD&gt;&lt;TD&gt;3434454&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;14&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;Visit2&amp;nbsp;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;545450&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;14&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;Visit2&amp;nbsp;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;3434454&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;14&lt;/TD&gt;&lt;TD&gt;Visit3&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;3434454&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;14&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;Visit2&amp;nbsp;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;3434454&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&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;</description>
      <pubDate>Sun, 05 Apr 2020 21:44:39 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Urgent-help-needed-for-this-Tricky-Logic-based-SAs/m-p/637738#M189602</guid>
      <dc:creator>ShilpaMadhu</dc:creator>
      <dc:date>2020-04-05T21:44:39Z</dc:date>
    </item>
    <item>
      <title>Re: Urgent help needed for this Tricky Logic based SAs</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Urgent-help-needed-for-this-Tricky-Logic-based-SAs/m-p/637739#M189603</link>
      <description>Adding to above, Please read the last 4 records as below, There is a typo for this patient.&lt;BR /&gt;&lt;BR /&gt;14 Visit2 545450 1&lt;BR /&gt;14 Visit2 3434454 1&lt;BR /&gt;14 Visit3 3434454 1&lt;BR /&gt;14 Visit3 3434454 1&lt;BR /&gt;</description>
      <pubDate>Sun, 05 Apr 2020 21:48:43 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Urgent-help-needed-for-this-Tricky-Logic-based-SAs/m-p/637739#M189603</guid>
      <dc:creator>ShilpaMadhu</dc:creator>
      <dc:date>2020-04-05T21:48:43Z</dc:date>
    </item>
    <item>
      <title>Re: Urgent help needed for this Tricky Logic based SAs</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Urgent-help-needed-for-this-Tricky-Logic-based-SAs/m-p/637740#M189604</link>
      <description>Again,, there was a typo. Please execuse me. Please read the last 4 records as below,&lt;BR /&gt;&lt;BR /&gt;14 Visit2 545450 1&lt;BR /&gt;14 Visit2 3434454 1&lt;BR /&gt;14 Visit3 545450 1&lt;BR /&gt;14 Visit3 3434454 1</description>
      <pubDate>Sun, 05 Apr 2020 21:50:39 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Urgent-help-needed-for-this-Tricky-Logic-based-SAs/m-p/637740#M189604</guid>
      <dc:creator>ShilpaMadhu</dc:creator>
      <dc:date>2020-04-05T21:50:39Z</dc:date>
    </item>
    <item>
      <title>Re: Urgent help needed for this Tricky Logic based SAs</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Urgent-help-needed-for-this-Tricky-Logic-based-SAs/m-p/637785#M189618</link>
      <description>&lt;P&gt;So now the business rule needs to be expanded to accommodate one or more visit records with no medications&amp;nbsp; falling between a complete visit and the recalc-visit.&amp;nbsp; So using the LAG function based on the event of first.visit=1 no longer is the rule.&amp;nbsp; It would have to be based on a more complex rule.&amp;nbsp;And using _N_-1 as the end of the prior visit is no longer accurate, meaning a separate conditional lag would be needed.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;In this case, I'd drop the use of lag and just set&amp;nbsp;&lt;EM&gt;&lt;STRONG&gt;_prior_visit_start&lt;/STRONG&gt;&lt;/EM&gt; and &lt;EM&gt;&lt;STRONG&gt;_prior_visit_end&lt;/STRONG&gt;&lt;/EM&gt; variables whenever there is a real visit in hand with real medications:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
infile cards truncover;
input PatientID	Visit $	Medication	reCalc;
cards;
1 Visit1 111111 
1 Visit2 222222 
1 Visit2 33333 
1 Visit3  . 1
1 Visit4 888888 
12 Visit1 34343 
12 Visit2 12345 
12 Visit2 67891 
12 Visit2 54321 
12 Visit4  . 1
12 Visit5 43333 
12 Visit6  . 1
13  Visit1  454545
13  Visit1  778788
13  Visit2  . 
13 Visit3 . 
13  Visit4 .
13  Visit5  .
13  Visit6 .
13  Visit7  . 1
14 Visit1 545450
14  Visit1 3434454
14 Visit2  . 1
14  Visit3 . 1
;
data want (drop=_:);
  set have;
  by patientid visit;

  retain _prior_visit_start  _prior_visit_end;
  if first.visit and medication^=. then _prior_visit_start=_n_;
  if last.visit and medication^=. then _prior_visit_end=_n_;

  if recalc^=1 then output;
  else do ptr=_prior_visit_start to _prior_visit_end;
    set have (keep=medication) point=ptr;
    output;
  end;
run;
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Remember, this program&amp;nbsp;assumes that each ID has at least one "real" visit sometime before any visits with recalc=1.&amp;nbsp;&amp;nbsp;&amp;nbsp; If that were not the case, then a recalc record from one id could end up with visit data from the preceding id. &amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Editted explanatory note:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;How this works:&lt;/P&gt;
&lt;P&gt;The program reads the incoming data, expecting it to be sorted by patientid/visit (the BY statement).&amp;nbsp; When the first record for a visit is found (first.visit=1) which is also a record with a valid medication&amp;nbsp; (medication^=.) then you are at the start of a visit whose data may be needed later on.&amp;nbsp; So for that record save the record's position in the entire dataset (_prior_visit_start=_N_).&amp;nbsp; Now _N_ is not always the actual position in the dataset, but it is in this simple data step. &amp;nbsp; Do the same for the last record for any such visit (_prior_visit_end=_N_).&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The two variables used to record the record position are "retained", so SAS will not default to automatically resetting them to missing values in each iteration of the data step.&amp;nbsp; Which makes them available to guide the re-reading of data when needed.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Now if the incoming record doesn't have recalc=1, there is no need to fetch data from a prior visit, so just output.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;But if recalc=1 then re-read each record ("do ptr=_prior_visit_start to _prior_visit_end") in the most recent visit that had actual medications, and re-output each of them.&amp;nbsp; This is done by using another SET statement with the "point=ptr" option.&amp;nbsp; But also note this extra SET statement only reads the medication variable&amp;nbsp; ("(keep=medication)"), so it doesn't overwrite the current visit number with the prior visit number, .. or any other variables that might be in the data.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 06 Apr 2020 17:59:32 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Urgent-help-needed-for-this-Tricky-Logic-based-SAs/m-p/637785#M189618</guid>
      <dc:creator>mkeintz</dc:creator>
      <dc:date>2020-04-06T17:59:32Z</dc:date>
    </item>
    <item>
      <title>Re: Urgent help needed for this Tricky Logic based SAs</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Urgent-help-needed-for-this-Tricky-Logic-based-SAs/m-p/637816#M189633</link>
      <description>&lt;P&gt;Perfect!!!&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The code you shared works in 100 percent perfection.&lt;/P&gt;&lt;P&gt;&amp;nbsp;And I had accepted this as Solution.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Could you please help me understand how does this code work. I just tried your code blindly. And worked. But, did not understand the logicality of it. I am really not as techy as you.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Kudos to you technical skill.&lt;/P&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;</description>
      <pubDate>Mon, 06 Apr 2020 10:59:27 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Urgent-help-needed-for-this-Tricky-Logic-based-SAs/m-p/637816#M189633</guid>
      <dc:creator>ShilpaMadhu</dc:creator>
      <dc:date>2020-04-06T10:59:27Z</dc:date>
    </item>
  </channel>
</rss>

