<?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: Merge Several Date Ranges in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Merge-Several-Date-Ranges/m-p/711103#M218988</link>
    <description>&lt;P&gt;In my opinion, this is a PROC TRANSPOSE question.&amp;nbsp; I'm using an indexed dataset, MERGE could be used.&amp;nbsp; I also believe hash table solution is a bit overkill:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
input ID (Date_From Date_To)(:date9.);
format Date: date9.;
datalines;
1 21Feb2000 14Mar2000
1 23Jun2000 17Jul2000
1 18Oct2000 08Nov2000
2 11Mar2000 14Mar2000
2 13Jun2000 17Aug2000
2 11Oct2000 09Nov2000
3 21Feb2000 14Mar2000
3 23Jun2000 17Jul2000
3 18Oct2000 08Nov2000
;
data price (Index=(date /unique));
   do date = "01jan2000"d to "31dec2000"d;
      price = ceil(rand('uniform')*100);
      output;
   end;
   format date date9.;
run;
data temp;
  set have;
    drop Date_From	Date_To;
  do date=Date_From to Date_To;
    truth=1; /*a dummy variable*/
    set price key=date /unique;
    output;
  end;
proc sort;
	BY date price;
run;
PROC TRANSPOSE DATA=temp
	OUT=WORK.WANT(drop=_NAME_)
	PREFIX=ID
;
	BY date price;
	ID ID;
	VAR truth;
RUN;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Wed, 13 Jan 2021 14:11:00 GMT</pubDate>
    <dc:creator>PhilC</dc:creator>
    <dc:date>2021-01-13T14:11:00Z</dc:date>
    <item>
      <title>Merge Several Date Ranges</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Merge-Several-Date-Ranges/m-p/710986#M218946</link>
      <description>&lt;P&gt;Hi SAS Communities,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I have two datasets here:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;(1) Have1: Showing all the date ranges. Example:&lt;/STRONG&gt;&lt;/P&gt;
&lt;TABLE border="1" width="100%"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="33.333333333333336%" height="30px"&gt;ID&lt;/TD&gt;
&lt;TD width="33.333333333333336%" height="30px"&gt;Date_From&lt;/TD&gt;
&lt;TD width="33.333333333333336%" height="30px"&gt;Date_To&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="33.333333333333336%" height="30px"&gt;1&lt;/TD&gt;
&lt;TD width="33.333333333333336%" height="30px"&gt;21 Feb 2000&lt;/TD&gt;
&lt;TD width="33.333333333333336%" height="30px"&gt;14 Mar 2000&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="33.333333333333336%" height="30px"&gt;1&lt;/TD&gt;
&lt;TD width="33.333333333333336%" height="30px"&gt;23 Jun 2000&lt;/TD&gt;
&lt;TD width="33.333333333333336%" height="30px"&gt;17 Jul 2000&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="33.333333333333336%" height="30px"&gt;1&lt;/TD&gt;
&lt;TD width="33.333333333333336%" height="30px"&gt;18 Oct 2000&lt;/TD&gt;
&lt;TD width="33.333333333333336%" height="30px"&gt;8 Nov 2000&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="33.333333333333336%" height="30px"&gt;....&lt;/TD&gt;
&lt;TD width="33.333333333333336%" height="30px"&gt;...&lt;/TD&gt;
&lt;TD width="33.333333333333336%" height="30px"&gt;...&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="33.333333333333336%" height="30px"&gt;2&lt;/TD&gt;
&lt;TD width="33.333333333333336%" height="30px"&gt;29 Sept 2000&lt;/TD&gt;
&lt;TD width="33.333333333333336%" height="30px"&gt;01 Jan 2001&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="33.333333333333336%"&gt;...&lt;/TD&gt;
&lt;TD width="33.333333333333336%"&gt;...&lt;/TD&gt;
&lt;TD width="33.333333333333336%"&gt;...&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;(2) Have2: Listings of all dates. Example:&lt;/STRONG&gt;&lt;/P&gt;
&lt;TABLE border="1" width="306px"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="152.517px" height="30px"&gt;Date&lt;/TD&gt;
&lt;TD width="152.483px" height="30px"&gt;Price&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="152.517px" height="30px"&gt;01 Jan 2000&lt;/TD&gt;
&lt;TD width="152.483px" height="30px"&gt;x&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="152.517px" height="30px"&gt;02 Jan 2000&lt;/TD&gt;
&lt;TD width="152.483px" height="30px"&gt;x&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="152.517px" height="30px"&gt;03 Jan 2000&lt;/TD&gt;
&lt;TD width="152.483px" height="30px"&gt;x&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="152.517px" height="30px"&gt;....&lt;/TD&gt;
&lt;TD width="152.483px" height="30px"&gt;...&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="152.517px" height="30px"&gt;31 Dec 2020&lt;/TD&gt;
&lt;TD width="152.483px" height="30px"&gt;x&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I would like to have a dataset that have the following:&lt;/P&gt;
&lt;TABLE border="1" width="306px"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="150.217px" height="30px"&gt;Date&lt;/TD&gt;
&lt;TD width="74.7833px" height="30px"&gt;Price&lt;/TD&gt;
&lt;TD width="40px" height="30px"&gt;ID1&lt;/TD&gt;
&lt;TD width="40px" height="30px"&gt;ID2&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="150.217px" height="30px"&gt;01 Jan 2000&lt;/TD&gt;
&lt;TD width="74.7833px" height="30px"&gt;x&lt;/TD&gt;
&lt;TD width="40px" height="30px"&gt;0&lt;/TD&gt;
&lt;TD width="40px" height="30px"&gt;0&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="150.217px" height="29px"&gt;02 Jan 2000&lt;/TD&gt;
&lt;TD width="74.7833px" height="29px"&gt;x&lt;/TD&gt;
&lt;TD width="40px" height="29px"&gt;0&lt;/TD&gt;
&lt;TD width="40px" height="29px"&gt;0&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="150.217px" height="30px"&gt;03 Jan 2000&lt;/TD&gt;
&lt;TD width="74.7833px" height="30px"&gt;x&lt;/TD&gt;
&lt;TD width="40px" height="30px"&gt;0&lt;/TD&gt;
&lt;TD width="40px" height="30px"&gt;0&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="150.217px" height="30px"&gt;....&lt;/TD&gt;
&lt;TD width="74.7833px" height="30px"&gt;...&lt;/TD&gt;
&lt;TD width="40px" height="30px"&gt;...&lt;/TD&gt;
&lt;TD width="40px" height="30px"&gt;...&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="150.217px" height="30px"&gt;21 Feb 2000&lt;/TD&gt;
&lt;TD width="74.7833px" height="30px"&gt;x&lt;/TD&gt;
&lt;TD width="40px" height="30px"&gt;1&lt;/TD&gt;
&lt;TD width="40px" height="30px"&gt;0&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="150.217px" height="30px"&gt;22 Feb 2000&lt;/TD&gt;
&lt;TD width="74.7833px" height="30px"&gt;x&lt;/TD&gt;
&lt;TD width="40px" height="30px"&gt;1&lt;/TD&gt;
&lt;TD width="40px" height="30px"&gt;0&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="150.217px" height="30px"&gt;...&lt;/TD&gt;
&lt;TD width="74.7833px" height="30px"&gt;...&lt;/TD&gt;
&lt;TD width="40px" height="30px"&gt;...&lt;/TD&gt;
&lt;TD width="40px" height="30px"&gt;...&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="150.217px" height="30px"&gt;14 Mar 2000&lt;/TD&gt;
&lt;TD width="74.7833px" height="30px"&gt;x&lt;/TD&gt;
&lt;TD width="40px" height="30px"&gt;1&lt;/TD&gt;
&lt;TD width="40px" height="30px"&gt;0&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="150.217px" height="30px"&gt;15 Mar 2000&lt;/TD&gt;
&lt;TD width="74.7833px" height="30px"&gt;x&lt;/TD&gt;
&lt;TD width="40px" height="30px"&gt;0&lt;/TD&gt;
&lt;TD width="40px" height="30px"&gt;0&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="150.217px" height="30px"&gt;16 Mar 2000&lt;/TD&gt;
&lt;TD width="74.7833px" height="30px"&gt;x&lt;/TD&gt;
&lt;TD width="40px" height="30px"&gt;0&lt;/TD&gt;
&lt;TD width="40px" height="30px"&gt;0&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="150.217px" height="30px"&gt;...&lt;/TD&gt;
&lt;TD width="74.7833px" height="30px"&gt;...&lt;/TD&gt;
&lt;TD width="40px" height="30px"&gt;...&lt;/TD&gt;
&lt;TD width="40px" height="30px"&gt;...&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="150.217px" height="30px"&gt;31 Dec 2020&lt;/TD&gt;
&lt;TD width="74.7833px" height="30px"&gt;x&lt;/TD&gt;
&lt;TD width="40px" height="30px"&gt;0&lt;/TD&gt;
&lt;TD width="40px" height="30px"&gt;0&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;In short, the dataset above has the binary code such that the date that falls within the range will be 1, otherwise 0.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Best,&lt;/P&gt;
&lt;P&gt;David&lt;/P&gt;</description>
      <pubDate>Wed, 13 Jan 2021 04:13:17 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Merge-Several-Date-Ranges/m-p/710986#M218946</guid>
      <dc:creator>DavidLie</dc:creator>
      <dc:date>2021-01-13T04:13:17Z</dc:date>
    </item>
    <item>
      <title>Re: Merge Several Date Ranges</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Merge-Several-Date-Ranges/m-p/710992#M218949</link>
      <description>&lt;P&gt;Please post data in usable form. &lt;/P&gt;</description>
      <pubDate>Wed, 13 Jan 2021 05:31:28 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Merge-Several-Date-Ranges/m-p/710992#M218949</guid>
      <dc:creator>andreas_lds</dc:creator>
      <dc:date>2021-01-13T05:31:28Z</dc:date>
    </item>
    <item>
      <title>Re: Merge Several Date Ranges</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Merge-Several-Date-Ranges/m-p/711004#M218956</link>
      <description>&lt;P&gt;In 1st table you posted are IDs 1, 2 - are there more?&lt;/P&gt;
&lt;P&gt;Are IDs sequential (1 2 3 ...) or any numeric values?&lt;/P&gt;
&lt;P&gt;Does ID1 of table-2 relate to ID=1 of table-1, ID2 to id=2 etc? Or did you mean something else?&lt;/P&gt;</description>
      <pubDate>Wed, 13 Jan 2021 06:56:59 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Merge-Several-Date-Ranges/m-p/711004#M218956</guid>
      <dc:creator>Shmuel</dc:creator>
      <dc:date>2021-01-13T06:56:59Z</dc:date>
    </item>
    <item>
      <title>Re: Merge Several Date Ranges</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Merge-Several-Date-Ranges/m-p/711007#M218957</link>
      <description>&lt;P&gt;See if you can use this as a template.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Feel free to ask &lt;span class="lia-unicode-emoji" title=":slightly_smiling_face:"&gt;🙂&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;/* Example Data */
data have;
input ID (Date_From Date_To)(:date9.);
format Date: date9.;
datalines;
1 21Feb2000 14Mar2000
1 23Jun2000 17Jul2000
1 18Oct2000 08Nov2000
2 11Mar2000 14Mar2000
2 13Jun2000 17Aug2000
2 11Oct2000 09Nov2000
3 21Feb2000 14Mar2000
3 23Jun2000 17Jul2000
3 18Oct2000 08Nov2000
;

data price;
   do date = "01jan2000"d to "31dec2000"d;
      price = ceil(rand('uniform')*100);
      output;
   end;
   format date date9.;
run;

/* Find Largest ID */
proc sql noprint;
   select max(ID) into :m separated by ' '
   from have;
run;

%put &amp;amp;=m.;

/* Create wanted data set */
data want;

   if _N_ = 1 then do;
      dcl hash h(dataset : "have", multidata : "Y");
      h.definekey("ID");
      h.definedata(all : "Y");
      h.definedone();
   end;

   set price;
   array i id1-id&amp;amp;m.;
   if 0 then set have;

   do over i;
      do while (h.do_over(key : _I_) = 0);
         if Date_From le date le Date_To then i = 1;
      end;
   end;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Wed, 13 Jan 2021 07:30:43 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Merge-Several-Date-Ranges/m-p/711007#M218957</guid>
      <dc:creator>PeterClemmensen</dc:creator>
      <dc:date>2021-01-13T07:30:43Z</dc:date>
    </item>
    <item>
      <title>Re: Merge Several Date Ranges</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Merge-Several-Date-Ranges/m-p/711103#M218988</link>
      <description>&lt;P&gt;In my opinion, this is a PROC TRANSPOSE question.&amp;nbsp; I'm using an indexed dataset, MERGE could be used.&amp;nbsp; I also believe hash table solution is a bit overkill:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
input ID (Date_From Date_To)(:date9.);
format Date: date9.;
datalines;
1 21Feb2000 14Mar2000
1 23Jun2000 17Jul2000
1 18Oct2000 08Nov2000
2 11Mar2000 14Mar2000
2 13Jun2000 17Aug2000
2 11Oct2000 09Nov2000
3 21Feb2000 14Mar2000
3 23Jun2000 17Jul2000
3 18Oct2000 08Nov2000
;
data price (Index=(date /unique));
   do date = "01jan2000"d to "31dec2000"d;
      price = ceil(rand('uniform')*100);
      output;
   end;
   format date date9.;
run;
data temp;
  set have;
    drop Date_From	Date_To;
  do date=Date_From to Date_To;
    truth=1; /*a dummy variable*/
    set price key=date /unique;
    output;
  end;
proc sort;
	BY date price;
run;
PROC TRANSPOSE DATA=temp
	OUT=WORK.WANT(drop=_NAME_)
	PREFIX=ID
;
	BY date price;
	ID ID;
	VAR truth;
RUN;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 13 Jan 2021 14:11:00 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Merge-Several-Date-Ranges/m-p/711103#M218988</guid>
      <dc:creator>PhilC</dc:creator>
      <dc:date>2021-01-13T14:11:00Z</dc:date>
    </item>
  </channel>
</rss>

