<?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: Subset a data based on values of variables in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Subset-a-data-based-on-values-of-variables/m-p/491765#M129051</link>
    <description>&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;
data HAVE;
input ID	STARTDATE :mmddyy10.	DATE1 :mmddyy10.	DOSE1	DATE2 :mmddyy10.	DOSE2	DATE3 :mmddyy10. DOSE3;
format STARTDATE date: mmddyy10.;
cards;
1	10/25/2000	1/2/1999	20	11/2/2000	20	3/5/2001	50
2	5/16/2005	6/14/2001	15	7/5/2002	100	5/25/2006	10
3	1/18/2004	1/19/2004	25	2/24/2005	20	8/16/2005	25
;

data temp;
set have;
array dt(*) date1--dose3;
do n=1 by 2 to dim(dt);
if dt(n) &amp;gt;= startdate then 
do;
_n+1;
d=dt(n);
grp=cats('new_date',_n);
output;
d=dt(n+1);
grp=cats('new_dose',_n);
output;
end;
end;
_n=0;
keep id startdate d grp;
run;

proc transpose data=temp out=want(drop=_name_);
by id STARTDATE;
var d ;
id grp;
format Date: mmddyy10.;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
    <pubDate>Fri, 31 Aug 2018 21:58:41 GMT</pubDate>
    <dc:creator>novinosrin</dc:creator>
    <dc:date>2018-08-31T21:58:41Z</dc:date>
    <item>
      <title>Subset a data based on values of variables</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Subset-a-data-based-on-values-of-variables/m-p/491733#M129034</link>
      <description>&lt;P&gt;Dear All,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I have a dataset with hundreds of dates&amp;nbsp; and doses of medications. DATE1 has a corresponding DOSE1 and so on. I have passed the values of the dates into new variables&amp;nbsp;based on each person's start date. I would also like the dose values that correspond to the dates to get passed to new variables. For each person, I want the dates that occur on or after the STARTDATE to be passed into new variables called NEW_DATES1, NEW_DATES2, etc.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;HAVE&lt;/P&gt;
&lt;TABLE width="588"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="69"&gt;ID&lt;/TD&gt;
&lt;TD width="94"&gt;STARTDATE&lt;/TD&gt;
&lt;TD width="70"&gt;DATE1&lt;/TD&gt;
&lt;TD width="69"&gt;DOSE1&lt;/TD&gt;
&lt;TD width="70"&gt;DATE2&lt;/TD&gt;
&lt;TD width="76"&gt;DOSE2&lt;/TD&gt;
&lt;TD width="70"&gt;DATE3&lt;/TD&gt;
&lt;TD width="70"&gt;DOSE3&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;10/25/2000&lt;/TD&gt;
&lt;TD&gt;1/2/1999&lt;/TD&gt;
&lt;TD&gt;20&lt;/TD&gt;
&lt;TD&gt;11/2/2000&lt;/TD&gt;
&lt;TD&gt;20&lt;/TD&gt;
&lt;TD&gt;3/5/2001&lt;/TD&gt;
&lt;TD&gt;50&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;TD&gt;5/16/2005&lt;/TD&gt;
&lt;TD&gt;6/14/2001&lt;/TD&gt;
&lt;TD&gt;15&lt;/TD&gt;
&lt;TD&gt;7/5/2002&lt;/TD&gt;
&lt;TD&gt;100&lt;/TD&gt;
&lt;TD&gt;5/25/2006&lt;/TD&gt;
&lt;TD&gt;10&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;3&lt;/TD&gt;
&lt;TD&gt;1/18/2004&lt;/TD&gt;
&lt;TD&gt;1/19/2004&lt;/TD&gt;
&lt;TD&gt;25&lt;/TD&gt;
&lt;TD&gt;2/24/2005&lt;/TD&gt;
&lt;TD&gt;20&lt;/TD&gt;
&lt;TD&gt;8/16/2005&lt;/TD&gt;
&lt;TD&gt;25&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Want&lt;/P&gt;
&lt;TABLE width="694"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="69"&gt;ID&lt;/TD&gt;
&lt;TD width="94"&gt;STARTDATE&lt;/TD&gt;
&lt;TD width="88"&gt;NEW_DATE1&lt;/TD&gt;
&lt;TD width="95"&gt;NEW_DOSE1&lt;/TD&gt;
&lt;TD width="85"&gt;NEW_DATE2&lt;/TD&gt;
&lt;TD width="89"&gt;NEW_DOSE2&lt;/TD&gt;
&lt;TD width="88"&gt;NEW_DATE3&lt;/TD&gt;
&lt;TD width="86"&gt;NEW_DOSE3&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;10/25/2000&lt;/TD&gt;
&lt;TD&gt;11/2/2000&lt;/TD&gt;
&lt;TD&gt;20&lt;/TD&gt;
&lt;TD&gt;3/5/2001&lt;/TD&gt;
&lt;TD&gt;50&lt;/TD&gt;
&lt;TD&gt;.&lt;/TD&gt;
&lt;TD&gt;.&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;TD&gt;5/16/2005&lt;/TD&gt;
&lt;TD&gt;5/25/2006&lt;/TD&gt;
&lt;TD&gt;10&lt;/TD&gt;
&lt;TD&gt;.&lt;/TD&gt;
&lt;TD&gt;.&lt;/TD&gt;
&lt;TD&gt;.&lt;/TD&gt;
&lt;TD&gt;.&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;3&lt;/TD&gt;
&lt;TD&gt;1/18/2004&lt;/TD&gt;
&lt;TD&gt;1/19/2004&lt;/TD&gt;
&lt;TD&gt;25&lt;/TD&gt;
&lt;TD&gt;2/24/2005&lt;/TD&gt;
&lt;TD&gt;20&lt;/TD&gt;
&lt;TD&gt;8/16/2005&lt;/TD&gt;
&lt;TD&gt;25&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I was able to pass the old dates to the new dates, but need help with the doses:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;array dx (*) date1 - date800;&lt;/P&gt;
&lt;P&gt;array dt (*) new_date1 - new_date800&lt;BR /&gt; do j = 1 to dim(dx) UNTIL (dx(j)=. ); &lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if dx(j) &amp;gt;= startdate then do;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; do k=1 to 614-j;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;dt(k) = dx(j);&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;j= j+1;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; end;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;end;&lt;BR /&gt; end;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Thanks!&lt;/P&gt;
&lt;P&gt;Sarah&lt;/P&gt;</description>
      <pubDate>Fri, 31 Aug 2018 19:56:29 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Subset-a-data-based-on-values-of-variables/m-p/491733#M129034</guid>
      <dc:creator>sarahsasuser</dc:creator>
      <dc:date>2018-08-31T19:56:29Z</dc:date>
    </item>
    <item>
      <title>Re: Subset a data based on values of variables</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Subset-a-data-based-on-values-of-variables/m-p/491735#M129035</link>
      <description>&lt;P&gt;Transpose to a long data set, having a single variable for date and dose and a Event record.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;ID StartDate Dose EventDate Event&lt;/P&gt;
&lt;P&gt;1 10/25/2000 20 1/2/1999 1&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;1 10/25/2000 20&amp;nbsp;11/2/2000 2&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;1 10/25/2000 50&amp;nbsp;5/25/2006&amp;nbsp;3&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;2 5/16/2005&amp;nbsp;15 6/14/2001 1&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;...&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;....&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Now,&amp;nbsp;delete records where the event date is greater than the start date.&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Then you can recreate the EVENT variable based on your new observations&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;If you really want a wide format, then you would re-transpose it back to wide, though in general, a long format is easier to work with.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;&lt;HR /&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/42157"&gt;@sarahsasuser&lt;/a&gt;&amp;nbsp;wrote:&lt;BR /&gt;
&lt;P&gt;Dear All,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I have a dataset with hundreds of dates&amp;nbsp; and doses of medications. DATE1 has a corresponding DOSE1 and so on. I have passed the values of the dates into new variables&amp;nbsp;based on each person's start date. I would also like the dose values that correspond to the dates to get passed to new variables. For each person, I want the dates that occur on or after the STARTDATE to be passed into new variables called NEW_DATES1, NEW_DATES2, etc.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;HAVE&lt;/P&gt;
&lt;TABLE width="588"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="69"&gt;ID&lt;/TD&gt;
&lt;TD width="94"&gt;STARTDATE&lt;/TD&gt;
&lt;TD width="70"&gt;DATE1&lt;/TD&gt;
&lt;TD width="69"&gt;DOSE1&lt;/TD&gt;
&lt;TD width="70"&gt;DATE2&lt;/TD&gt;
&lt;TD width="76"&gt;DOSE2&lt;/TD&gt;
&lt;TD width="70"&gt;DATE3&lt;/TD&gt;
&lt;TD width="70"&gt;DOSE3&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;10/25/2000&lt;/TD&gt;
&lt;TD&gt;1/2/1999&lt;/TD&gt;
&lt;TD&gt;20&lt;/TD&gt;
&lt;TD&gt;11/2/2000&lt;/TD&gt;
&lt;TD&gt;20&lt;/TD&gt;
&lt;TD&gt;3/5/2001&lt;/TD&gt;
&lt;TD&gt;50&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;TD&gt;5/16/2005&lt;/TD&gt;
&lt;TD&gt;6/14/2001&lt;/TD&gt;
&lt;TD&gt;15&lt;/TD&gt;
&lt;TD&gt;7/5/2002&lt;/TD&gt;
&lt;TD&gt;100&lt;/TD&gt;
&lt;TD&gt;5/25/2006&lt;/TD&gt;
&lt;TD&gt;10&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;3&lt;/TD&gt;
&lt;TD&gt;1/18/2004&lt;/TD&gt;
&lt;TD&gt;1/19/2004&lt;/TD&gt;
&lt;TD&gt;25&lt;/TD&gt;
&lt;TD&gt;2/24/2005&lt;/TD&gt;
&lt;TD&gt;20&lt;/TD&gt;
&lt;TD&gt;8/16/2005&lt;/TD&gt;
&lt;TD&gt;25&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Want&lt;/P&gt;
&lt;TABLE width="694"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="69"&gt;ID&lt;/TD&gt;
&lt;TD width="94"&gt;STARTDATE&lt;/TD&gt;
&lt;TD width="88"&gt;NEW_DATE1&lt;/TD&gt;
&lt;TD width="95"&gt;NEW_DOSE1&lt;/TD&gt;
&lt;TD width="85"&gt;NEW_DATE2&lt;/TD&gt;
&lt;TD width="89"&gt;NEW_DOSE2&lt;/TD&gt;
&lt;TD width="88"&gt;NEW_DATE3&lt;/TD&gt;
&lt;TD width="86"&gt;NEW_DOSE3&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;10/25/2000&lt;/TD&gt;
&lt;TD&gt;11/2/2000&lt;/TD&gt;
&lt;TD&gt;20&lt;/TD&gt;
&lt;TD&gt;3/5/2001&lt;/TD&gt;
&lt;TD&gt;50&lt;/TD&gt;
&lt;TD&gt;.&lt;/TD&gt;
&lt;TD&gt;.&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;TD&gt;5/16/2005&lt;/TD&gt;
&lt;TD&gt;5/25/2006&lt;/TD&gt;
&lt;TD&gt;10&lt;/TD&gt;
&lt;TD&gt;.&lt;/TD&gt;
&lt;TD&gt;.&lt;/TD&gt;
&lt;TD&gt;.&lt;/TD&gt;
&lt;TD&gt;.&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;3&lt;/TD&gt;
&lt;TD&gt;1/18/2004&lt;/TD&gt;
&lt;TD&gt;1/19/2004&lt;/TD&gt;
&lt;TD&gt;25&lt;/TD&gt;
&lt;TD&gt;2/24/2005&lt;/TD&gt;
&lt;TD&gt;20&lt;/TD&gt;
&lt;TD&gt;8/16/2005&lt;/TD&gt;
&lt;TD&gt;25&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I was able to pass the old dates to the new dates, but need help with the doses:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;array dx (*) date1 - date800;&lt;/P&gt;
&lt;P&gt;array dt (*) new_date1 - new_date800&lt;BR /&gt; do j = 1 to dim(dx) UNTIL (dx(j)=. ); &lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if dx(j) &amp;gt;= startdate then do;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; do k=1 to 614-j;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;dt(k) = dx(j);&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;j= j+1;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; end;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;end;&lt;BR /&gt; end;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Thanks!&lt;/P&gt;
&lt;P&gt;Sarah&lt;/P&gt;
&lt;HR /&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;BR /&gt;You can do it in a single data step it's just a bit tedious and not dynamic. If your dates only go to THREE that's not an issue. Is it possible to have ties with your dates?&lt;/P&gt;</description>
      <pubDate>Fri, 31 Aug 2018 20:03:58 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Subset-a-data-based-on-values-of-variables/m-p/491735#M129035</guid>
      <dc:creator>Reeza</dc:creator>
      <dc:date>2018-08-31T20:03:58Z</dc:date>
    </item>
    <item>
      <title>Re: Subset a data based on values of variables</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Subset-a-data-based-on-values-of-variables/m-p/491760#M129046</link>
      <description>&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data HAVE;
input ID	STARTDATE :mmddyy10.	DATE1 :mmddyy10.	DOSE1	DATE2 :mmddyy10.	DOSE2	DATE3 :mmddyy10. DOSE3;
format date: mmddyy10.;
cards;
1	10/25/2000	1/2/1999	20	11/2/2000	20	3/5/2001	50
2	5/16/2005	6/14/2001	15	7/5/2002	100	5/25/2006	10
3	1/18/2004	1/19/2004	25	2/24/2005	20	8/16/2005	25
;

data want;
set have;
n=1;
array dt(*) date1-date3;
array new_dt (*) new_date1 - new_date3;
array dx(*) dose1-dose3;
array new_dx(*) newdose1-newdose3;

do j=1 to dim(dx);
if dt(j) &amp;gt;= startdate then 
do;
	new_dt(n)=dt(j);
	new_dx(n)=dx(j);
	n+1;
end;
end;
format new_date: mmddyy10.;
drop n j;
run;
&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Fri, 31 Aug 2018 21:27:30 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Subset-a-data-based-on-values-of-variables/m-p/491760#M129046</guid>
      <dc:creator>novinosrin</dc:creator>
      <dc:date>2018-08-31T21:27:30Z</dc:date>
    </item>
    <item>
      <title>Re: Subset a data based on values of variables</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Subset-a-data-based-on-values-of-variables/m-p/491765#M129051</link>
      <description>&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;
data HAVE;
input ID	STARTDATE :mmddyy10.	DATE1 :mmddyy10.	DOSE1	DATE2 :mmddyy10.	DOSE2	DATE3 :mmddyy10. DOSE3;
format STARTDATE date: mmddyy10.;
cards;
1	10/25/2000	1/2/1999	20	11/2/2000	20	3/5/2001	50
2	5/16/2005	6/14/2001	15	7/5/2002	100	5/25/2006	10
3	1/18/2004	1/19/2004	25	2/24/2005	20	8/16/2005	25
;

data temp;
set have;
array dt(*) date1--dose3;
do n=1 by 2 to dim(dt);
if dt(n) &amp;gt;= startdate then 
do;
_n+1;
d=dt(n);
grp=cats('new_date',_n);
output;
d=dt(n+1);
grp=cats('new_dose',_n);
output;
end;
end;
_n=0;
keep id startdate d grp;
run;

proc transpose data=temp out=want(drop=_name_);
by id STARTDATE;
var d ;
id grp;
format Date: mmddyy10.;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Fri, 31 Aug 2018 21:58:41 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Subset-a-data-based-on-values-of-variables/m-p/491765#M129051</guid>
      <dc:creator>novinosrin</dc:creator>
      <dc:date>2018-08-31T21:58:41Z</dc:date>
    </item>
  </channel>
</rss>

