<?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 Create a variable using date ranges within date ranges in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Create-a-variable-using-date-ranges-within-date-ranges/m-p/698268#M213529</link>
    <description>&lt;P&gt;I'm trying to create a new variable that shows what proportion of follow-up time for each participant was during a rainy season, but I'm not sure how to do it.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Below is an example of my data.&amp;nbsp;&lt;/P&gt;&lt;P&gt;FUStart= Start of follow-up&lt;/P&gt;&lt;P&gt;FUEnd=End of follow-up&lt;/P&gt;&lt;P&gt;The next 4 columns show the dates for the start and end of the rainy seasons that occurred over the course of follow-up. I know how to calculate the length of follow-up, but I don't know how to structure an if/then statement to determine how much of the rainy season fell in that period.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;In short, how do I use these dates to count the number of follow-up days that were in a rainy season?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks in advance for any thoughts!&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;PID&lt;/TD&gt;&lt;TD&gt;FUStart&lt;/TD&gt;&lt;TD&gt;FUEnd&lt;/TD&gt;&lt;TD&gt;Rain1Start&lt;/TD&gt;&lt;TD&gt;Rain1End&lt;/TD&gt;&lt;TD&gt;Rain2Start&lt;/TD&gt;&lt;TD&gt;Rain2End&lt;/TD&gt;&lt;TD&gt;RainyDaysFU&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;01/27/18&lt;/TD&gt;&lt;TD&gt;05/10/19&lt;/TD&gt;&lt;TD&gt;11/01/17&lt;/TD&gt;&lt;TD&gt;04/30/18&lt;/TD&gt;&lt;TD&gt;11/01/18&lt;/TD&gt;&lt;TD&gt;04/30/19&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;01/12/18&lt;/TD&gt;&lt;TD&gt;05/08/19&lt;/TD&gt;&lt;TD&gt;11/01/17&lt;/TD&gt;&lt;TD&gt;04/30/18&lt;/TD&gt;&lt;TD&gt;11/01/18&lt;/TD&gt;&lt;TD&gt;04/30/19&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;09/26/17&lt;/TD&gt;&lt;TD&gt;01/30/18&lt;/TD&gt;&lt;TD&gt;11/01/17&lt;/TD&gt;&lt;TD&gt;04/30/18&lt;/TD&gt;&lt;TD&gt;11/01/18&lt;/TD&gt;&lt;TD&gt;04/30/19&lt;/TD&gt;&lt;TD&gt;?&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;12/10/17&lt;/TD&gt;&lt;TD&gt;01/23/18&lt;/TD&gt;&lt;TD&gt;11/01/17&lt;/TD&gt;&lt;TD&gt;04/30/18&lt;/TD&gt;&lt;TD&gt;11/01/18&lt;/TD&gt;&lt;TD&gt;04/30/19&lt;/TD&gt;&lt;TD&gt;?&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;07/16/17&lt;/TD&gt;&lt;TD&gt;01/30/18&lt;/TD&gt;&lt;TD&gt;11/01/17&lt;/TD&gt;&lt;TD&gt;04/30/18&lt;/TD&gt;&lt;TD&gt;11/01/18&lt;/TD&gt;&lt;TD&gt;04/30/19&lt;/TD&gt;&lt;TD&gt;?&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;6&lt;/TD&gt;&lt;TD&gt;05/03/18&lt;/TD&gt;&lt;TD&gt;05/17/19&lt;/TD&gt;&lt;TD&gt;11/01/17&lt;/TD&gt;&lt;TD&gt;04/30/18&lt;/TD&gt;&lt;TD&gt;11/01/18&lt;/TD&gt;&lt;TD&gt;04/30/19&lt;/TD&gt;&lt;TD&gt;?&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;7&lt;/TD&gt;&lt;TD&gt;08/11/18&lt;/TD&gt;&lt;TD&gt;05/13/19&lt;/TD&gt;&lt;TD&gt;11/01/17&lt;/TD&gt;&lt;TD&gt;04/30/18&lt;/TD&gt;&lt;TD&gt;11/01/18&lt;/TD&gt;&lt;TD&gt;04/30/19&lt;/TD&gt;&lt;TD&gt;?&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;</description>
    <pubDate>Thu, 12 Nov 2020 01:52:34 GMT</pubDate>
    <dc:creator>EpiNovice</dc:creator>
    <dc:date>2020-11-12T01:52:34Z</dc:date>
    <item>
      <title>Create a variable using date ranges within date ranges</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Create-a-variable-using-date-ranges-within-date-ranges/m-p/698268#M213529</link>
      <description>&lt;P&gt;I'm trying to create a new variable that shows what proportion of follow-up time for each participant was during a rainy season, but I'm not sure how to do it.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Below is an example of my data.&amp;nbsp;&lt;/P&gt;&lt;P&gt;FUStart= Start of follow-up&lt;/P&gt;&lt;P&gt;FUEnd=End of follow-up&lt;/P&gt;&lt;P&gt;The next 4 columns show the dates for the start and end of the rainy seasons that occurred over the course of follow-up. I know how to calculate the length of follow-up, but I don't know how to structure an if/then statement to determine how much of the rainy season fell in that period.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;In short, how do I use these dates to count the number of follow-up days that were in a rainy season?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks in advance for any thoughts!&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;PID&lt;/TD&gt;&lt;TD&gt;FUStart&lt;/TD&gt;&lt;TD&gt;FUEnd&lt;/TD&gt;&lt;TD&gt;Rain1Start&lt;/TD&gt;&lt;TD&gt;Rain1End&lt;/TD&gt;&lt;TD&gt;Rain2Start&lt;/TD&gt;&lt;TD&gt;Rain2End&lt;/TD&gt;&lt;TD&gt;RainyDaysFU&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;01/27/18&lt;/TD&gt;&lt;TD&gt;05/10/19&lt;/TD&gt;&lt;TD&gt;11/01/17&lt;/TD&gt;&lt;TD&gt;04/30/18&lt;/TD&gt;&lt;TD&gt;11/01/18&lt;/TD&gt;&lt;TD&gt;04/30/19&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;01/12/18&lt;/TD&gt;&lt;TD&gt;05/08/19&lt;/TD&gt;&lt;TD&gt;11/01/17&lt;/TD&gt;&lt;TD&gt;04/30/18&lt;/TD&gt;&lt;TD&gt;11/01/18&lt;/TD&gt;&lt;TD&gt;04/30/19&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;09/26/17&lt;/TD&gt;&lt;TD&gt;01/30/18&lt;/TD&gt;&lt;TD&gt;11/01/17&lt;/TD&gt;&lt;TD&gt;04/30/18&lt;/TD&gt;&lt;TD&gt;11/01/18&lt;/TD&gt;&lt;TD&gt;04/30/19&lt;/TD&gt;&lt;TD&gt;?&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;12/10/17&lt;/TD&gt;&lt;TD&gt;01/23/18&lt;/TD&gt;&lt;TD&gt;11/01/17&lt;/TD&gt;&lt;TD&gt;04/30/18&lt;/TD&gt;&lt;TD&gt;11/01/18&lt;/TD&gt;&lt;TD&gt;04/30/19&lt;/TD&gt;&lt;TD&gt;?&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;07/16/17&lt;/TD&gt;&lt;TD&gt;01/30/18&lt;/TD&gt;&lt;TD&gt;11/01/17&lt;/TD&gt;&lt;TD&gt;04/30/18&lt;/TD&gt;&lt;TD&gt;11/01/18&lt;/TD&gt;&lt;TD&gt;04/30/19&lt;/TD&gt;&lt;TD&gt;?&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;6&lt;/TD&gt;&lt;TD&gt;05/03/18&lt;/TD&gt;&lt;TD&gt;05/17/19&lt;/TD&gt;&lt;TD&gt;11/01/17&lt;/TD&gt;&lt;TD&gt;04/30/18&lt;/TD&gt;&lt;TD&gt;11/01/18&lt;/TD&gt;&lt;TD&gt;04/30/19&lt;/TD&gt;&lt;TD&gt;?&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;7&lt;/TD&gt;&lt;TD&gt;08/11/18&lt;/TD&gt;&lt;TD&gt;05/13/19&lt;/TD&gt;&lt;TD&gt;11/01/17&lt;/TD&gt;&lt;TD&gt;04/30/18&lt;/TD&gt;&lt;TD&gt;11/01/18&lt;/TD&gt;&lt;TD&gt;04/30/19&lt;/TD&gt;&lt;TD&gt;?&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;</description>
      <pubDate>Thu, 12 Nov 2020 01:52:34 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Create-a-variable-using-date-ranges-within-date-ranges/m-p/698268#M213529</guid>
      <dc:creator>EpiNovice</dc:creator>
      <dc:date>2020-11-12T01:52:34Z</dc:date>
    </item>
    <item>
      <title>Re: Create a variable using date ranges within date ranges</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Create-a-variable-using-date-ranges-within-date-ranges/m-p/698289#M213535</link>
      <description>&lt;P&gt;A crude way:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data WANT;
  retain FUSTART '27JAN2018'D FUEND '10MAY2019'D RAIN1START '01NOV2017'D RAIN1END '30APR2018'D RAIN2START '01NOV2018'D RAIN2END '30APR2019'D;
  do DT=min(FUSTART, RAIN1START, RAIN2START) to max(FUEND, RAIN1END, RAIN2END);
    TALLY=0;
    if DT&amp;gt;=FUSTART    then TALLY+ 1;
    if DT&amp;gt;=RAIN1START then TALLY+ 1;
    if DT&amp;gt;=RAIN2START then TALLY+ 1;
    if DT&amp;gt; FUEND      then TALLY+-1;
    if DT&amp;gt; RAIN1END   then TALLY+-1;
    if DT&amp;gt; RAIN2END   then TALLY+-1;
    if TALLY=2 then RAINYDAYS+1;           
  end;
  put RAINYDAYS=;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;RAINYDAYS=275&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 12 Nov 2020 03:52:24 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Create-a-variable-using-date-ranges-within-date-ranges/m-p/698289#M213535</guid>
      <dc:creator>ChrisNZ</dc:creator>
      <dc:date>2020-11-12T03:52:24Z</dc:date>
    </item>
    <item>
      <title>Re: Create a variable using date ranges within date ranges</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Create-a-variable-using-date-ranges-within-date-ranges/m-p/698292#M213537</link>
      <description>&lt;P&gt;Because the rainy seasons appear to be constant over the entire dataset, you can make an array, indexed by date, with the lower bound of the array set to at least one day prior to the earliest date in any of your date fields (rainy season or fustart) and set the upper bound is at least equivalent to the latest date in any of your date fields (i.e. rain1end rain2end or the highest encountered fuend).&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;In that array, you can assign a value of&amp;nbsp; 0 to all dates prior to 01nov2017.&amp;nbsp; Then assign 1 to the element corresponding to 01nov2017, 2 to 02nov2017, etc. incrementing by one for each rainy day, but not for other days.&amp;nbsp; Of course this means that the array values for 30apr2018 through 30oct2018 all have the same value, because only 30apr2018 is a rainy day.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Once you've done that, then simply subtract the array value to the FUEND minus the array value for the day prior to FUSTART:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want (drop=_:);
  set have;

  array rainy_day_index {%sysevalf('01jan2017'd):%sysevalf('30dec2019'd)} _temporary_;

  if _n_=1 then do;
    do _rdate='01nov2017'd to '30apr2018'd,'01nov2018'd to '30apr2019'd;
      _index+1;
      rainy_day_index{_rdate}=_index;
	end;
	do _date=lbound(rainy_day_index) to hbound(rainy_day_index);
	  if _date&amp;lt;'01nov2017'd then rainy_day_index{_date}=0;
	  else if rainy_day_index{_date}=. then rainy_day_index{_date}=rainy_day_index{_date-1};
	end;
  end;

  /** Run this once to see what the rainy_day_index array looks like 
  if _n_=1 then do _date=lbound(rainy_day_index) to hbound(rainy_day_index);
    put _date=date9.  rainy_day_index{_date} z4.;
  end;
  **/

  n_rainy_days=rainy_day_index{fuend} - rainy_day_index{fustart-1};
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;The "if _N_=1 do group just sets up the array rainy_day_index at the start of the data step.&amp;nbsp; As a "_temporary_" array its value will be retained for all subsequent observations.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;To get a better idea of the array contents, de-comment the indicated section once.&lt;/P&gt;</description>
      <pubDate>Thu, 12 Nov 2020 04:18:46 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Create-a-variable-using-date-ranges-within-date-ranges/m-p/698292#M213537</guid>
      <dc:creator>mkeintz</dc:creator>
      <dc:date>2020-11-12T04:18:46Z</dc:date>
    </item>
  </channel>
</rss>

