<?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: Pick up values from multiple rows of same ID if meeting criteria in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Pick-up-values-from-multiple-rows-of-same-ID-if-meeting-criteria/m-p/852904#M337129</link>
    <description>can you create first dataset if first.id and rest dataset else if not first.id. merge those two data sets by id if diff(any of the dates) is &amp;lt;= 1)</description>
    <pubDate>Mon, 09 Jan 2023 18:50:37 GMT</pubDate>
    <dc:creator>gema</dc:creator>
    <dc:date>2023-01-09T18:50:37Z</dc:date>
    <item>
      <title>Pick up values from multiple rows of same ID if meeting criteria</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Pick-up-values-from-multiple-rows-of-same-ID-if-meeting-criteria/m-p/851262#M336440</link>
      <description>&lt;P&gt;I've a data consisting of a list of IDs, and within each ID are episode IDs (EPID) with values of start date and end date and other data&amp;nbsp;&lt;/P&gt;
&lt;P&gt;elements (e.g. days on medication and drug name). I want to consolidate episodes if consecutive records (meaning end-start of the next record is within (0,1) values - some are from the first record (start), some from the last record (End, Drug), some (DrugDays) are from sum of all episodes.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The data input lines below shows&lt;/P&gt;
&lt;P&gt;HAVE data from ID to Drug&amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Seq is to show these records should be consolidated&lt;/P&gt;
&lt;P&gt;EPID_1 to DRUG_1 are WANT value (if records have empty values they will be removed from output of course).&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I guess if I'm able to create the SEQ variable, the rest is easy. Any help is appreciated.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have; format ID EPID Start End Drugdays Drug SEQ EPID_1 Start_1 End_1 DrugDays_1 Drug_1; drop startDT EndDT StartDT_1 EndDT_1;
format start end start_1 end_1 yymmdd10.;
input ID 1 EPID 3-5 StartDT $ 7-16  EndDT $ 18-27
DrugDays 29-30 Drug $ 32 Seq 34
EPID_1 36-38  StartDT_1 $ 40-49 EndDT_1 $ 51-60
DrugDays_1 62-63 Drug_1 $ 65 ;
Start=input(StartDT,yymmdd10.);
END=input(ENDDT,yymmdd10.);
Start_1=input(StartDT_1,yymmdd10.);
END_1=input(ENDDT_1,yymmdd10.);
datalines;
1 101 2018-05-24 2018-05-31  7 A 1 101 2018-05-24 2018-10-05 30 C
1 102 2018-05-31 2018-06-08  8 B 1                               
1 103 2018-06-08 2018-10-05 15 C 1                               
2 201 2019-04-09 2019-04-11  2 A 1 201 2019-04-09 2019-04-27 15 B
2 202 2019-04-12 2019-04-17  3 C 1                               
2 203 2019-04-17 2019-04-25  5 B 1                               
2 204 2019-04-25 2019-04-27  5 B 1                               
2 205 2019-04-30 2019-05-07  6 A 2 205 2019-04-30 2019-05-10 12 C
2 206 2019-05-08 2019-05-10  6 C 2 
2 207 2019-06-15 2019-06-30  5 A 3 207 2019-06-15 2019-06-30  5 A
3 301 2021-07-14 2021-07-15  1 C 1 301 2021-07-14 2021-07-19  4 A
3 302 2021-07-15 2021-07-19  3 A 1                               
4 401 2017-11-02 2017-11-19 10 C 1 401 2017-11-02 2017-11-19 10 C
4 402 2019-07-26 2019-07-27  1 B 2 402 2019-07-26 2019-11-11 46 C
4 403 2019-07-27 2019-08-02  5 A 2                               
4 404 2019-08-02 2019-11-11 40 C 2                               
5 501 2018-04-22 2018-04-23  1 A 1 501 2018-04-22 2018-04-25  3 B
5 502 2018-04-23 2018-04-25  2 B 1                               
5 503 2019-08-08 2019-08-10  1 C 2 503 2019-08-08 2019-08-15  4 A
5 504 2019-08-10 2019-08-15  3 A 2                               
6 601 2017-02-04 2017-02-14  5 C 1 601 2017-02-04 2017-02-26 15 A
6 602 2017-02-14 2017-02-26 10 A 1                               
6 603 2019-11-24 2019-11-30  1 C 2 603 2019-11-24 2019-12-28  4 B
6 604 2019-11-30 2019-12-28  3 B 2                               
7 701 2019-10-20 2019-11-10 10 A 1 701 2019-10-20 2019-11-10 10 A
;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Wed, 28 Dec 2022 03:48:48 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Pick-up-values-from-multiple-rows-of-same-ID-if-meeting-criteria/m-p/851262#M336440</guid>
      <dc:creator>Solph</dc:creator>
      <dc:date>2022-12-28T03:48:48Z</dc:date>
    </item>
    <item>
      <title>Pick up values from multiple rows of same ID if meeting criteria</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Pick-up-values-from-multiple-rows-of-same-ID-if-meeting-criteria/m-p/851264#M336441</link>
      <description />
      <pubDate>Wed, 28 Dec 2022 03:36:46 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Pick-up-values-from-multiple-rows-of-same-ID-if-meeting-criteria/m-p/851264#M336441</guid>
      <dc:creator>Solph</dc:creator>
      <dc:date>2022-12-28T03:36:46Z</dc:date>
    </item>
    <item>
      <title>Re: Pick up values from multiple rows of same ID if meeting criteria</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Pick-up-values-from-multiple-rows-of-same-ID-if-meeting-criteria/m-p/851284#M336452</link>
      <description>&lt;P&gt;Really appreciated that you provided sample data via a fully working SAS data step and that you also show us the desired result.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Looking at your data I tried to figure out the logic how you would derive the value for SEQ and Drug_1 - but to no avail.&lt;/P&gt;
&lt;P&gt;Can you please explain the logic that leads to drug_1 being C in the first two rows below? I guess that's then what leads to SEQ having a value of 2 in the second row.&lt;BR /&gt;Can you please also explain why the third and fourth row would be excluded?&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Patrick_0-1672183227258.png" style="width: 773px;"&gt;&lt;img src="https://communities.sas.com/t5/image/serverpage/image-id/78895i819C8107BA9E0EFC/image-dimensions/773x93?v=v2" width="773" height="93" role="button" title="Patrick_0-1672183227258.png" alt="Patrick_0-1672183227258.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 27 Dec 2022 23:22:26 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Pick-up-values-from-multiple-rows-of-same-ID-if-meeting-criteria/m-p/851284#M336452</guid>
      <dc:creator>Patrick</dc:creator>
      <dc:date>2022-12-27T23:22:26Z</dc:date>
    </item>
    <item>
      <title>Re: Pick up values from multiple rows of same ID if meeting criteria</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Pick-up-values-from-multiple-rows-of-same-ID-if-meeting-criteria/m-p/851297#M336458</link>
      <description>&lt;P&gt;There was a typo in the reading data column, so it's fixed and a couple more records were added to ID=2.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Took me a while to search similar codes that work for my needs. So the code below, though not neat, works.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;proc sort data=have; by ID start; run;

data tmp; format seq_1; set have;
	by ID;
	flag1=(start-lag(end) in (0,1));
	flag2=( (start-lag(end) in (0,1)) and (lag(start)-lag2(end) in (0,1)));
	if flag1=1 and flag2=0 then flag2=1;
	if first.ID then flag1=1;
	if first.ID then flag2=1;

	if first.ID then seq_1=1;
	if lag(flag2)&amp;gt;flag2 then seq_1+1;

	drop flag1 flag2;
run;
proc sort data=tmp; by ID Seq_1 start ; run;

data first last; set tmp;
	by ID Seq_1 start;
	if first.seq_1 then output first;
	if last.seq_1 then output last;
run;
proc sql; create table want as
	select a.ID, a.EPID as EPID_1, a.Start as Start_1, b.End as End_1, c.drugdays as DrugDays_1,
	b.drug as Drug_1 
	from first as a 
	left join last as b on a.id=b.id and a.seq_1=b.seq_1
	left join (select ID, Seq_1, sum(Drugdays) as Drugdays from tmp group by ID, Seq_1) as c on a.id=c.id and a.seq_1=c.seq_1;
quit;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;To compare,&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have2; set have; if start_1&amp;gt;.; run;
proc print data=have2 noobs; run;
proc print data=want noobs; run;

proc compare base=have2 compare=want; run;
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;or the final output form WANT:&lt;/P&gt;
&lt;TABLE border="1" width="100%"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="100%" height="30px"&gt;&lt;BR /&gt;
&lt;TABLE class="table" cellspacing="0" cellpadding="0"&gt;&lt;COLGROUP&gt; &lt;COL class="data" /&gt; &lt;COL class="data" /&gt; &lt;COL class="data" /&gt; &lt;COL class="data" /&gt; &lt;COL class="data" /&gt; &lt;COL class="data" /&gt; &lt;/COLGROUP&gt;
&lt;THEAD&gt;
&lt;TR&gt;
&lt;TH class="header" scope="colgroup"&gt;ID&lt;/TH&gt;
&lt;TH class="header" scope="colgroup"&gt;EPID_1&lt;/TH&gt;
&lt;TH class="header" scope="colgroup"&gt;Start_1&lt;/TH&gt;
&lt;TH class="header" scope="colgroup"&gt;End_1&lt;/TH&gt;
&lt;TH class="header" scope="colgroup"&gt;DrugDays_1&lt;/TH&gt;
&lt;TH class="header" scope="colgroup"&gt;Drug_1&lt;/TH&gt;
&lt;/TR&gt;
&lt;/THEAD&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class="b data"&gt;2&lt;/TD&gt;
&lt;TD class="b data"&gt;201&lt;/TD&gt;
&lt;TD class="b data"&gt;2019-04-09&lt;/TD&gt;
&lt;TD class="b data"&gt;2019-04-27&lt;/TD&gt;
&lt;TD class="b data"&gt;15&lt;/TD&gt;
&lt;TD class="b data"&gt;B&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="b data"&gt;2&lt;/TD&gt;
&lt;TD class="b data"&gt;205&lt;/TD&gt;
&lt;TD class="b data"&gt;2019-04-30&lt;/TD&gt;
&lt;TD class="b data"&gt;2019-05-10&lt;/TD&gt;
&lt;TD class="b data"&gt;12&lt;/TD&gt;
&lt;TD class="b data"&gt;C&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="b data"&gt;2&lt;/TD&gt;
&lt;TD class="b data"&gt;207&lt;/TD&gt;
&lt;TD class="b data"&gt;2019-06-15&lt;/TD&gt;
&lt;TD class="b data"&gt;2019-06-30&lt;/TD&gt;
&lt;TD class="b data"&gt;5&lt;/TD&gt;
&lt;TD class="b data"&gt;A&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="b data"&gt;3&lt;/TD&gt;
&lt;TD class="b data"&gt;301&lt;/TD&gt;
&lt;TD class="b data"&gt;2021-07-14&lt;/TD&gt;
&lt;TD class="b data"&gt;2021-07-19&lt;/TD&gt;
&lt;TD class="b data"&gt;4&lt;/TD&gt;
&lt;TD class="b data"&gt;A&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="b data"&gt;4&lt;/TD&gt;
&lt;TD class="b data"&gt;401&lt;/TD&gt;
&lt;TD class="b data"&gt;2017-11-02&lt;/TD&gt;
&lt;TD class="b data"&gt;2017-11-19&lt;/TD&gt;
&lt;TD class="b data"&gt;10&lt;/TD&gt;
&lt;TD class="b data"&gt;C&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="b data"&gt;4&lt;/TD&gt;
&lt;TD class="b data"&gt;402&lt;/TD&gt;
&lt;TD class="b data"&gt;2019-07-26&lt;/TD&gt;
&lt;TD class="b data"&gt;2019-11-11&lt;/TD&gt;
&lt;TD class="b data"&gt;46&lt;/TD&gt;
&lt;TD class="b data"&gt;C&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="b data"&gt;5&lt;/TD&gt;
&lt;TD class="b data"&gt;501&lt;/TD&gt;
&lt;TD class="b data"&gt;2018-04-22&lt;/TD&gt;
&lt;TD class="b data"&gt;2018-04-25&lt;/TD&gt;
&lt;TD class="b data"&gt;3&lt;/TD&gt;
&lt;TD class="b data"&gt;B&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="b data"&gt;5&lt;/TD&gt;
&lt;TD class="b data"&gt;503&lt;/TD&gt;
&lt;TD class="b data"&gt;2019-08-08&lt;/TD&gt;
&lt;TD class="b data"&gt;2019-08-15&lt;/TD&gt;
&lt;TD class="b data"&gt;4&lt;/TD&gt;
&lt;TD class="b data"&gt;A&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="b data"&gt;6&lt;/TD&gt;
&lt;TD class="b data"&gt;601&lt;/TD&gt;
&lt;TD class="b data"&gt;2017-02-04&lt;/TD&gt;
&lt;TD class="b data"&gt;2017-02-26&lt;/TD&gt;
&lt;TD class="b data"&gt;15&lt;/TD&gt;
&lt;TD class="b data"&gt;A&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="b data"&gt;6&lt;/TD&gt;
&lt;TD class="b data"&gt;603&lt;/TD&gt;
&lt;TD class="b data"&gt;2019-11-24&lt;/TD&gt;
&lt;TD class="b data"&gt;2019-12-28&lt;/TD&gt;
&lt;TD class="b data"&gt;4&lt;/TD&gt;
&lt;TD class="b data"&gt;B&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="b data"&gt;7&lt;/TD&gt;
&lt;TD class="b data"&gt;701&lt;/TD&gt;
&lt;TD class="b data"&gt;2019-10-20&lt;/TD&gt;
&lt;TD class="b data"&gt;2019-11-10&lt;/TD&gt;
&lt;TD class="b data"&gt;10&lt;/TD&gt;
&lt;TD class="b data"&gt;A&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;</description>
      <pubDate>Wed, 28 Dec 2022 03:47:31 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Pick-up-values-from-multiple-rows-of-same-ID-if-meeting-criteria/m-p/851297#M336458</guid>
      <dc:creator>Solph</dc:creator>
      <dc:date>2022-12-28T03:47:31Z</dc:date>
    </item>
    <item>
      <title>Re: Pick up values from multiple rows of same ID if meeting criteria</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Pick-up-values-from-multiple-rows-of-same-ID-if-meeting-criteria/m-p/852904#M337129</link>
      <description>can you create first dataset if first.id and rest dataset else if not first.id. merge those two data sets by id if diff(any of the dates) is &amp;lt;= 1)</description>
      <pubDate>Mon, 09 Jan 2023 18:50:37 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Pick-up-values-from-multiple-rows-of-same-ID-if-meeting-criteria/m-p/852904#M337129</guid>
      <dc:creator>gema</dc:creator>
      <dc:date>2023-01-09T18:50:37Z</dc:date>
    </item>
  </channel>
</rss>

