<?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 date correction in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/date-correction/m-p/527319#M143741</link>
    <description>&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;I have the following data&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;Start_Date&lt;/TD&gt;&lt;TD&gt;End_Date&lt;/TD&gt;&lt;TD&gt;Price&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;01-Jan-18&lt;/TD&gt;&lt;TD&gt;05-Jan-18&lt;/TD&gt;&lt;TD&gt;15&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;03-Jan-18&lt;/TD&gt;&lt;TD&gt;09-Jan-18&lt;/TD&gt;&lt;TD&gt;14&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;07-Jan-18&lt;/TD&gt;&lt;TD&gt;10-Jan-18&lt;/TD&gt;&lt;TD&gt;12&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;02-Jan-18&lt;/TD&gt;&lt;TD&gt;07-Jan-18&lt;/TD&gt;&lt;TD&gt;18&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;amp; I am looking for following output&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;Start_Date&lt;/TD&gt;&lt;TD&gt;End_Date&lt;/TD&gt;&lt;TD&gt;Price&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;01-Jan-18&lt;/TD&gt;&lt;TD&gt;02-Jan-18&lt;/TD&gt;&lt;TD&gt;15&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;03-Jan-18&lt;/TD&gt;&lt;TD&gt;06-Jan-18&lt;/TD&gt;&lt;TD&gt;14&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;07-Jan-18&lt;/TD&gt;&lt;TD&gt;10-Jan-18&lt;/TD&gt;&lt;TD&gt;12&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;How I find the price is based on what is the lowest price available in the first table.&lt;/P&gt;&lt;P&gt;1) 15 is lowest price is for 01-Jan &amp;amp; 2nd Jan.&lt;/P&gt;&lt;P&gt;2) In the same way,&amp;nbsp;14 is lowest price for 03rdJan&amp;nbsp;to 06-Jan&lt;/P&gt;&lt;P&gt;3) 18 -is never the lowest price so it didn't come in the output data.&amp;nbsp;&lt;/P&gt;&lt;P&gt;***Our output data start date is 01-Jan-2018&amp;nbsp;and end date is 10-Jan-2018.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;This is a very huge data originally so I&amp;nbsp;need the most optimized&amp;nbsp;SAS program which completes this job&lt;/P&gt;</description>
    <pubDate>Tue, 15 Jan 2019 14:50:09 GMT</pubDate>
    <dc:creator>Srigyan</dc:creator>
    <dc:date>2019-01-15T14:50:09Z</dc:date>
    <item>
      <title>date correction</title>
      <link>https://communities.sas.com/t5/SAS-Programming/date-correction/m-p/527319#M143741</link>
      <description>&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;I have the following data&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;Start_Date&lt;/TD&gt;&lt;TD&gt;End_Date&lt;/TD&gt;&lt;TD&gt;Price&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;01-Jan-18&lt;/TD&gt;&lt;TD&gt;05-Jan-18&lt;/TD&gt;&lt;TD&gt;15&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;03-Jan-18&lt;/TD&gt;&lt;TD&gt;09-Jan-18&lt;/TD&gt;&lt;TD&gt;14&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;07-Jan-18&lt;/TD&gt;&lt;TD&gt;10-Jan-18&lt;/TD&gt;&lt;TD&gt;12&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;02-Jan-18&lt;/TD&gt;&lt;TD&gt;07-Jan-18&lt;/TD&gt;&lt;TD&gt;18&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;amp; I am looking for following output&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;Start_Date&lt;/TD&gt;&lt;TD&gt;End_Date&lt;/TD&gt;&lt;TD&gt;Price&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;01-Jan-18&lt;/TD&gt;&lt;TD&gt;02-Jan-18&lt;/TD&gt;&lt;TD&gt;15&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;03-Jan-18&lt;/TD&gt;&lt;TD&gt;06-Jan-18&lt;/TD&gt;&lt;TD&gt;14&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;07-Jan-18&lt;/TD&gt;&lt;TD&gt;10-Jan-18&lt;/TD&gt;&lt;TD&gt;12&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;How I find the price is based on what is the lowest price available in the first table.&lt;/P&gt;&lt;P&gt;1) 15 is lowest price is for 01-Jan &amp;amp; 2nd Jan.&lt;/P&gt;&lt;P&gt;2) In the same way,&amp;nbsp;14 is lowest price for 03rdJan&amp;nbsp;to 06-Jan&lt;/P&gt;&lt;P&gt;3) 18 -is never the lowest price so it didn't come in the output data.&amp;nbsp;&lt;/P&gt;&lt;P&gt;***Our output data start date is 01-Jan-2018&amp;nbsp;and end date is 10-Jan-2018.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;This is a very huge data originally so I&amp;nbsp;need the most optimized&amp;nbsp;SAS program which completes this job&lt;/P&gt;</description>
      <pubDate>Tue, 15 Jan 2019 14:50:09 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/date-correction/m-p/527319#M143741</guid>
      <dc:creator>Srigyan</dc:creator>
      <dc:date>2019-01-15T14:50:09Z</dc:date>
    </item>
    <item>
      <title>Re: date correction</title>
      <link>https://communities.sas.com/t5/SAS-Programming/date-correction/m-p/527329#M143745</link>
      <description>&lt;P&gt;Here's one approach:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;data all;&lt;/P&gt;
&lt;P&gt;set have;&lt;/P&gt;
&lt;P&gt;do date = start_date to end_date;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp;output;&lt;/P&gt;
&lt;P&gt;end;&lt;/P&gt;
&lt;P&gt;keep date price;&lt;/P&gt;
&lt;P&gt;run;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;proc summary data=all nway;&lt;/P&gt;
&lt;P&gt;var price;&lt;/P&gt;
&lt;P&gt;class date;&lt;/P&gt;
&lt;P&gt;output out=minimums (keep=price date) min=;&lt;/P&gt;
&lt;P&gt;run;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;data want;&lt;/P&gt;
&lt;P&gt;set minimums;&lt;/P&gt;
&lt;P&gt;by price notsorted;&lt;/P&gt;
&lt;P&gt;retain start_date;&lt;/P&gt;
&lt;P&gt;if first.price then start_date = date;&lt;/P&gt;
&lt;P&gt;if last.price;&lt;/P&gt;
&lt;P&gt;end_date = date;&lt;/P&gt;
&lt;P&gt;drop date;&lt;/P&gt;
&lt;P&gt;run;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;It's untested code, but looks right.&lt;/P&gt;</description>
      <pubDate>Tue, 15 Jan 2019 15:22:17 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/date-correction/m-p/527329#M143745</guid>
      <dc:creator>Astounding</dc:creator>
      <dc:date>2019-01-15T15:22:17Z</dc:date>
    </item>
    <item>
      <title>Re: date correction</title>
      <link>https://communities.sas.com/t5/SAS-Programming/date-correction/m-p/527339#M143752</link>
      <description>&lt;P&gt;This is working great, however As I mentioned this is for huge database, the following program&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;data all;&lt;BR /&gt;format date date9.;&lt;BR /&gt;set sample;&lt;BR /&gt;do date=Start_Date to End_Date;&lt;BR /&gt;output;&lt;BR /&gt;end;&lt;BR /&gt;keep date price;&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;creates one record for each day and each price.I need to calculate this 5 years for more than a billion records.&amp;nbsp;&lt;/P&gt;&lt;P&gt;Just don't want to create one record for each date, and each price. Can we optimize this process?&lt;/P&gt;&lt;DIV class="ginger-module-correctionBubble-onboarding"&gt;&lt;DIV class="ginger-module-correctionBubble-onboarding-bubble ginger-module-correctionBubble-onboarding-top"&gt;To approve a single suggestion, mouse over it and click "✔"&lt;/DIV&gt;&lt;DIV class="ginger-module-correctionBubble-onboarding-bubble ginger-module-correctionBubble-onboarding-bottom"&gt;Click the bubble to approve all of its suggestions.&lt;/DIV&gt;&lt;/DIV&gt;</description>
      <pubDate>Tue, 15 Jan 2019 15:36:33 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/date-correction/m-p/527339#M143752</guid>
      <dc:creator>Srigyan</dc:creator>
      <dc:date>2019-01-15T15:36:33Z</dc:date>
    </item>
    <item>
      <title>Re: date correction</title>
      <link>https://communities.sas.com/t5/SAS-Programming/date-correction/m-p/527353#M143758</link>
      <description>&lt;P&gt;&amp;nbsp;Sorry, I didn't appreciate the size of the data so I tried to use a clearer approach.&amp;nbsp; Here's another way to get summarized data.&amp;nbsp; I'm going to assume you know the minimum and maximum dates and can plug them into this step, but if that needs to be automated it can be:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;data minimums;&lt;/P&gt;
&lt;P&gt;set have;&lt;/P&gt;
&lt;P&gt;array prices ("01jan2010"d : "31dec2018"d);&lt;/P&gt;
&lt;P&gt;do until (done);&lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp;set have end=done;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp;do k=start_date to end_date;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; prices{k} = min(prices{k}, price);&lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp;end;&lt;/P&gt;
&lt;P&gt;end;&lt;/P&gt;
&lt;P&gt;do date="01jan2010"d to "31dec2018"d;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp;price = prices{k};&lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp;output;&lt;/P&gt;
&lt;P&gt;end;&lt;/P&gt;
&lt;P&gt;keep date price;&lt;/P&gt;
&lt;P&gt;run;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;This might still take a while to process 5B records.&amp;nbsp; But direct access to an array element should even be faster than hashing.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Then run the final DATA step as is (by price notsorted).&lt;/P&gt;</description>
      <pubDate>Tue, 15 Jan 2019 16:01:40 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/date-correction/m-p/527353#M143758</guid>
      <dc:creator>Astounding</dc:creator>
      <dc:date>2019-01-15T16:01:40Z</dc:date>
    </item>
    <item>
      <title>Re: date correction</title>
      <link>https://communities.sas.com/t5/SAS-Programming/date-correction/m-p/527666#M143908</link>
      <description>&lt;P&gt;Hope your computer have a big memory .&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
infile cards expandtabs truncover;
input Start_Date :date9. End_Date :date9. Price;
format  Start_Date End_Date :date9.;
cards;
01-Jan-18	05-Jan-18	15
03-Jan-18	09-Jan-18	14
07-Jan-18	10-Jan-18	12
02-Jan-18	07-Jan-18	18
;
run;
data _null_;
 if _n_=1 then do;
   declare hash h(hashexp:20,ordered:'y');
   h.definekey('date');
   h.definedata('date','p');
   h.definedone();
 end;
set have end=last;
do date=Start_Date to End_Date ;
  if h.find()=0 then do;p=min(p,price);h.replace(); end;
   else do;p=price;h.add(); end;
end;
if last then h.output(dataset:'want');
format date date9.;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Wed, 16 Jan 2019 09:31:43 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/date-correction/m-p/527666#M143908</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2019-01-16T09:31:43Z</dc:date>
    </item>
  </channel>
</rss>

