<?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: Select (conditional) latest date using array in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Select-conditional-latest-date-using-array/m-p/490165#M128168</link>
    <description>&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
infile cards truncover;
input (ID        treatment1 treatment2 treatment3 treatment4 treatment5) ($) (date1   date2    date3    date4    date5) (:date9.);
format date: date9.;
cards;
John           A              B                   B              B               A            01Jan2018    15Jan2018   16Jan2018   17Jan2018    01Feb2018
David          A              A                   B             B                A            01Jan2018   15Mar2018 05Jan2018   05Jan2018      15Feb2018
;

data want;
set have;
array j(*) treatment:;
array t(*) date:;
do _n_=dim(j) to 1 by -1;
if j(_n_) ne 'A' then call missing(j(_n_),t(_n_));
end;
latest_date=max(of t(*));
format latest_date date9.;
keep id latest_Date;
run;
&lt;/CODE&gt;&lt;/PRE&gt;</description>
    <pubDate>Mon, 27 Aug 2018 16:57:35 GMT</pubDate>
    <dc:creator>novinosrin</dc:creator>
    <dc:date>2018-08-27T16:57:35Z</dc:date>
    <item>
      <title>Select (conditional) latest date using array</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Select-conditional-latest-date-using-array/m-p/490132#M128144</link>
      <description>&lt;P&gt;Hello,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I'm working with a wide dataset. Each row represents a person and includes treatment records as well as corresponding dates in which treatments are performed. My data essentially looks like this:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;ID&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; treatment1 treatment2 treatment3 treatment4 treatment5&amp;nbsp; date1&amp;nbsp;&amp;nbsp; date2&amp;nbsp;&amp;nbsp;&amp;nbsp; date3&amp;nbsp;&amp;nbsp;&amp;nbsp; date4&amp;nbsp;&amp;nbsp;&amp;nbsp; date5&lt;/P&gt;&lt;P&gt;John&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; A&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; B&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; B&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; B&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; A&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Jan1&amp;nbsp;&amp;nbsp;&amp;nbsp; Jan15&amp;nbsp;&amp;nbsp; Jan16&amp;nbsp;&amp;nbsp; Jan17&amp;nbsp;&amp;nbsp;&amp;nbsp; Feb1&lt;/P&gt;&lt;P&gt;David&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; A&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; A&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; B&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; B&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; A&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Jan1&amp;nbsp;&amp;nbsp; March15 Jan5 &amp;nbsp; Jan5 &amp;nbsp; &amp;nbsp;&amp;nbsp; Feb15&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;What I need to do is for each person is to select the latest date in which he received treatment A (date5 for John and date2 for David in this case). I thought a simple array with a do-loop would do the trick but I realized that the dates1-5 are not necessarily recorded in chronological order. Any help would be greatly appreciated!&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks!&lt;/P&gt;</description>
      <pubDate>Mon, 27 Aug 2018 15:44:57 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Select-conditional-latest-date-using-array/m-p/490132#M128144</guid>
      <dc:creator>Jhan1</dc:creator>
      <dc:date>2018-08-27T15:44:57Z</dc:date>
    </item>
    <item>
      <title>Re: Select (conditional) latest date using array</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Select-conditional-latest-date-using-array/m-p/490135#M128146</link>
      <description>&lt;BLOCKQUOTE&gt;&lt;HR /&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/228657"&gt;@Jhan1&lt;/a&gt;&amp;nbsp;wrote:&lt;/P&gt;
&lt;P&gt;Hello,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I'm working with a wide dataset. Each row represents a person and includes treatment records as well as corresponding dates in which treatments are performed. &lt;U&gt;&lt;STRONG&gt;My data essentially looks like this:&lt;/STRONG&gt;&lt;/U&gt;&lt;/P&gt;
&lt;P&gt;&lt;U&gt;perhaps--&amp;gt;&lt;/U&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;data want;&lt;/P&gt;
&lt;P&gt;set have;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;EM&gt;latest_date=max(of date:&amp;nbsp; );&lt;/EM&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;format latest_date your_format;&lt;/P&gt;
&lt;P&gt;run;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 27 Aug 2018 15:52:49 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Select-conditional-latest-date-using-array/m-p/490135#M128146</guid>
      <dc:creator>novinosrin</dc:creator>
      <dc:date>2018-08-27T15:52:49Z</dc:date>
    </item>
    <item>
      <title>Re: Select (conditional) latest date using array</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Select-conditional-latest-date-using-array/m-p/490145#M128154</link>
      <description>&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/138205"&gt;@novinosrin&lt;/a&gt;&amp;nbsp;only for treatment A though.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;It's probably easiest to transpose it to a long format. Then you can sort and get it pretty quickly.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 27 Aug 2018 16:09:31 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Select-conditional-latest-date-using-array/m-p/490145#M128154</guid>
      <dc:creator>Reeza</dc:creator>
      <dc:date>2018-08-27T16:09:31Z</dc:date>
    </item>
    <item>
      <title>Re: Select (conditional) latest date using array</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Select-conditional-latest-date-using-array/m-p/490155#M128160</link>
      <description>&lt;P&gt;Thank you&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/13879"&gt;@Reeza&lt;/a&gt;&amp;nbsp;let me go back to starb and ask for refund&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 27 Aug 2018 16:23:33 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Select-conditional-latest-date-using-array/m-p/490155#M128160</guid>
      <dc:creator>novinosrin</dc:creator>
      <dc:date>2018-08-27T16:23:33Z</dc:date>
    </item>
    <item>
      <title>Re: Select (conditional) latest date using array</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Select-conditional-latest-date-using-array/m-p/490165#M128168</link>
      <description>&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
infile cards truncover;
input (ID        treatment1 treatment2 treatment3 treatment4 treatment5) ($) (date1   date2    date3    date4    date5) (:date9.);
format date: date9.;
cards;
John           A              B                   B              B               A            01Jan2018    15Jan2018   16Jan2018   17Jan2018    01Feb2018
David          A              A                   B             B                A            01Jan2018   15Mar2018 05Jan2018   05Jan2018      15Feb2018
;

data want;
set have;
array j(*) treatment:;
array t(*) date:;
do _n_=dim(j) to 1 by -1;
if j(_n_) ne 'A' then call missing(j(_n_),t(_n_));
end;
latest_date=max(of t(*));
format latest_date date9.;
keep id latest_Date;
run;
&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Mon, 27 Aug 2018 16:57:35 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Select-conditional-latest-date-using-array/m-p/490165#M128168</guid>
      <dc:creator>novinosrin</dc:creator>
      <dc:date>2018-08-27T16:57:35Z</dc:date>
    </item>
    <item>
      <title>Re: Select (conditional) latest date using array</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Select-conditional-latest-date-using-array/m-p/490176#M128175</link>
      <description>&lt;P&gt;Its easy to solve this problem for specific hard coded treatment using array. But for a generic solution I will suggest to use proc transpose. Something like this should work:&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;Data Have;
	infile cards truncover;
	input (ID Treatment1 Treatment2 Treatment3 Treatment4 Treatment5) ($) (Date1 Date2 Date3 Date4 Date5) (:date9.);
	format date: date9.;
	cards;
John A B B B A '01Jan2018'd '15Jan2018'd '16Jan2018'd '17Jan2018'd '01Feb2018'd
David A A B B A '01Jan2018'd '15Mar2018'd '05Jan2018'd '05Jan2018'd '05Feb2018'd
;
run;

proc sort data=Have;
	by ID;
run;

proc transpose data=Have out=Treatments(Drop=_Name_ Rename=(Treatment1=Treatment)) Prefix=Treatment;
	by ID;
	Var Treatment:;
run;

proc transpose data=Have out=Dates(Drop=_Name_ rename=(Date1=Date)) Prefix=Date;
	by ID;
	Var Date:;
run;

Data Have_Transposed;
	merge Treatments Dates;
	by ID;
run;

proc sql;
	Select ID, Treatment,max(Date) as Max_Date format date9. from Have_Transposed 
		group by ID, Treatment;
quit;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Mon, 27 Aug 2018 17:06:13 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Select-conditional-latest-date-using-array/m-p/490176#M128175</guid>
      <dc:creator>AlokR</dc:creator>
      <dc:date>2018-08-27T17:06:13Z</dc:date>
    </item>
    <item>
      <title>Re: Select (conditional) latest date using array</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Select-conditional-latest-date-using-array/m-p/490179#M128178</link>
      <description>&lt;P&gt;Great solution. Super fast performance!!!&lt;/P&gt;</description>
      <pubDate>Mon, 27 Aug 2018 17:12:25 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Select-conditional-latest-date-using-array/m-p/490179#M128178</guid>
      <dc:creator>CharlotteCain</dc:creator>
      <dc:date>2018-08-27T17:12:25Z</dc:date>
    </item>
    <item>
      <title>Re: Select (conditional) latest date using array</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Select-conditional-latest-date-using-array/m-p/490184#M128180</link>
      <description>&lt;P&gt;Further improvised:&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 (ID        treatment1 treatment2 treatment3 treatment4 treatment5) ($) (date1   date2    date3    date4    date5) (:date9.);
format date: date9.;
cards;
John           A              B                   B              B               A            01Jan2018    15Jan2018   16Jan2018   17Jan2018    01Feb2018
David          A              A                   B             B                A            01Jan2018   15Mar2018 05Jan2018   05Jan2018      15Feb2018
;

data want;
set have;
array j(*) treatment:;
array t(*) date:;
do _n_=dim(j) to 1 by -1;
if j(_n_)= 'A' then latest_date=max(latest_date,t(_n_));
end;
format latest_date date9.;
keep id latest_Date;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Mon, 27 Aug 2018 17:21:00 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Select-conditional-latest-date-using-array/m-p/490184#M128180</guid>
      <dc:creator>novinosrin</dc:creator>
      <dc:date>2018-08-27T17:21:00Z</dc:date>
    </item>
    <item>
      <title>Re: Select (conditional) latest date using array</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Select-conditional-latest-date-using-array/m-p/490237#M128204</link>
      <description>&lt;P&gt;Some generic fun for finding latest_Date for all treatments:&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 (ID        treatment1 treatment2 treatment3 treatment4 treatment5) ($) (date1   date2    date3    date4    date5) (:date9.);
format date: date9.;
cards;
John           A              B                   B              B               A            01Jan2018    15Jan2018   16Jan2018   17Jan2018    01Feb2018
David          A              A                   B             B                A            01Jan2018   15Mar2018 08Jan2018   05Jan2018      15Feb2018
;

data want;
if _n_=1 then do;
if 0 then set have;
length treat $8 dt 8;
format dt latest_date date9.;
dcl hash H (ordered: "A",multidata:'y') ;
   h.definekey  ("treat") ;
   h.definedata ("treat","dt") ;
   h.definedone () ;
   call missing(treat,dt);
end;
set have ;
array j(*) treatment1-treatment5;
array t(*) date1-date5;
do i=1 to dim(t);
	rc=h.add(key:j(i),data:j(i),data:t(i));
end; 
do i=1 to dim(j);
	rc=h.check(key:j(i));
	if rc=0 then do;
	do _iorc_=h.find(key:j(i)) by 0 while(_iorc_=0);
	latest_date=max(latest_date,dt);
	_iorc_=h.find_next();
	end;
	output;
	h.remove(key:j(i));
	call missing(latest_date,dt);
	end;
end;
keep id treat latest_date;
run;
&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Mon, 27 Aug 2018 19:49:51 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Select-conditional-latest-date-using-array/m-p/490237#M128204</guid>
      <dc:creator>novinosrin</dc:creator>
      <dc:date>2018-08-27T19:49:51Z</dc:date>
    </item>
    <item>
      <title>Re: Select (conditional) latest date using array</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Select-conditional-latest-date-using-array/m-p/490243#M128208</link>
      <description>&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
infile cards truncover;
input (ID        treatment1 treatment2 treatment3 treatment4 treatment5) ($) (date1   date2    date3    date4    date5) (:date9.);
format date: date9.;
cards;
John           A              B                   B              B               A            01Jan2018    15Jan2018   16Jan2018   17Jan2018    01Feb2018
David          A              A                   B             B                A            01Jan2018   15Mar2018 08Jan2018   05Jan2018      15Feb2018
;

data temp;
set have;
array j(*) treatment1-treatment5;
array t(*) date1-date5;
do i=1 to dim(t);
treatment=j(i);
dt=t(i);
output;
end;
keep id treatment dt;
format dt date9.;
run;

proc sql;
create table want as
select id,treatment,max(dt) as latest_date format=date9.
from temp
group by id,treatment;
quit;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Mon, 27 Aug 2018 20:00:53 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Select-conditional-latest-date-using-array/m-p/490243#M128208</guid>
      <dc:creator>novinosrin</dc:creator>
      <dc:date>2018-08-27T20:00:53Z</dc:date>
    </item>
    <item>
      <title>Re: Select (conditional) latest date using array</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Select-conditional-latest-date-using-array/m-p/491840#M129103</link>
      <description>&lt;P&gt;Just wanted say thank-you for your input!&lt;/P&gt;&lt;P&gt;I've tried different ways you've suggested and others (including transposing the data) - this suggestion fit my data the best...I had other criteria I had to consider and working with a very large dataset and wanted to avoid transposing data if I could although that was an excellent suggestion as well.&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks to others who responded - it was first time posting on this community and I'm glad I chose to!&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Sat, 01 Sep 2018 18:19:57 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Select-conditional-latest-date-using-array/m-p/491840#M129103</guid>
      <dc:creator>Jhan1</dc:creator>
      <dc:date>2018-09-01T18:19:57Z</dc:date>
    </item>
  </channel>
</rss>

