<?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: subtracting dates in hours by group and volumes in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/subtracting-dates-in-hours-by-group-and-volumes/m-p/651858#M195612</link>
    <description>&lt;P&gt;Untested&lt;/P&gt;
&lt;PRE&gt;data want;
   set have;
   by id;
   difference_hour = intck('hour',lag(date_time), date_time);
   difference_volume= dif(volume);
   if first.id then call missing(difference_hour, difference_volume);
run;&lt;/PRE&gt;
&lt;P&gt;assumes you date_time values are actual SAS datetimes and that the data is sorted by ID. If the ID is not actually sorted use the NOTSORTED option on the BY statement.&lt;/P&gt;
&lt;P&gt;Lag gets the value of a variable from a previous record, DIF does the difference of a variable with the previous record.&lt;/P&gt;
&lt;P&gt;The BY and First.ID sets the calculated values to missing because they would be using values from the previous ID.&lt;/P&gt;</description>
    <pubDate>Fri, 29 May 2020 19:54:21 GMT</pubDate>
    <dc:creator>ballardw</dc:creator>
    <dc:date>2020-05-29T19:54:21Z</dc:date>
    <item>
      <title>subtracting dates in hours by group and volumes</title>
      <link>https://communities.sas.com/t5/SAS-Programming/subtracting-dates-in-hours-by-group-and-volumes/m-p/651854#M195611</link>
      <description>&lt;P&gt;I have the following dataset. What I would like to do is that by ID, I would like to subtract order #2, etc from 1 as static by date_Time in hours and volumes&lt;/P&gt;
&lt;TABLE width="225"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="35"&gt;ID&lt;/TD&gt;
&lt;TD width="99"&gt;date_time&lt;/TD&gt;
&lt;TD width="51"&gt;volume&lt;/TD&gt;
&lt;TD width="40"&gt;order&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;1234&lt;/TD&gt;
&lt;TD&gt;1/2/2020 13:12&lt;/TD&gt;
&lt;TD&gt;53.1&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;1234&lt;/TD&gt;
&lt;TD&gt;1/2/2020 20:12&lt;/TD&gt;
&lt;TD&gt;32.9&lt;/TD&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;1234&lt;/TD&gt;
&lt;TD&gt;1/3/2020 9:12&lt;/TD&gt;
&lt;TD&gt;23.1&lt;/TD&gt;
&lt;TD&gt;3&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;4522&lt;/TD&gt;
&lt;TD&gt;3/2/2020 12:19&lt;/TD&gt;
&lt;TD&gt;20.5&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;4522&lt;/TD&gt;
&lt;TD&gt;3/2/2020 14:19&lt;/TD&gt;
&lt;TD&gt;24.1&lt;/TD&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Something like this:&lt;/P&gt;
&lt;TABLE width="451"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="35"&gt;ID&lt;/TD&gt;
&lt;TD width="99"&gt;date_time&lt;/TD&gt;
&lt;TD width="51"&gt;volume&lt;/TD&gt;
&lt;TD width="40"&gt;order&lt;/TD&gt;
&lt;TD width="105"&gt;difference_hour&lt;/TD&gt;
&lt;TD width="121"&gt;difference_volume&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;1234&lt;/TD&gt;
&lt;TD&gt;1/2/2020 13:12&lt;/TD&gt;
&lt;TD&gt;53.1&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;1234&lt;/TD&gt;
&lt;TD&gt;1/2/2020 20:12&lt;/TD&gt;
&lt;TD&gt;32.9&lt;/TD&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;TD&gt;7&lt;/TD&gt;
&lt;TD&gt;-20.2&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;1234&lt;/TD&gt;
&lt;TD&gt;1/3/2020 9:12&lt;/TD&gt;
&lt;TD&gt;23.1&lt;/TD&gt;
&lt;TD&gt;3&lt;/TD&gt;
&lt;TD&gt;13&lt;/TD&gt;
&lt;TD&gt;-30&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;4522&lt;/TD&gt;
&lt;TD&gt;3/2/2020 12:19&lt;/TD&gt;
&lt;TD&gt;20.5&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;4522&lt;/TD&gt;
&lt;TD&gt;3/2/2020 14:19&lt;/TD&gt;
&lt;TD&gt;24.1&lt;/TD&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;TD&gt;3.6&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 thinking to transpose the data and do one by one but it is rather very tedious&lt;/P&gt;</description>
      <pubDate>Fri, 29 May 2020 19:46:45 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/subtracting-dates-in-hours-by-group-and-volumes/m-p/651854#M195611</guid>
      <dc:creator>monday89</dc:creator>
      <dc:date>2020-05-29T19:46:45Z</dc:date>
    </item>
    <item>
      <title>Re: subtracting dates in hours by group and volumes</title>
      <link>https://communities.sas.com/t5/SAS-Programming/subtracting-dates-in-hours-by-group-and-volumes/m-p/651858#M195612</link>
      <description>&lt;P&gt;Untested&lt;/P&gt;
&lt;PRE&gt;data want;
   set have;
   by id;
   difference_hour = intck('hour',lag(date_time), date_time);
   difference_volume= dif(volume);
   if first.id then call missing(difference_hour, difference_volume);
run;&lt;/PRE&gt;
&lt;P&gt;assumes you date_time values are actual SAS datetimes and that the data is sorted by ID. If the ID is not actually sorted use the NOTSORTED option on the BY statement.&lt;/P&gt;
&lt;P&gt;Lag gets the value of a variable from a previous record, DIF does the difference of a variable with the previous record.&lt;/P&gt;
&lt;P&gt;The BY and First.ID sets the calculated values to missing because they would be using values from the previous ID.&lt;/P&gt;</description>
      <pubDate>Fri, 29 May 2020 19:54:21 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/subtracting-dates-in-hours-by-group-and-volumes/m-p/651858#M195612</guid>
      <dc:creator>ballardw</dc:creator>
      <dc:date>2020-05-29T19:54:21Z</dc:date>
    </item>
    <item>
      <title>Re: subtracting dates in hours by group and volumes</title>
      <link>https://communities.sas.com/t5/SAS-Programming/subtracting-dates-in-hours-by-group-and-volumes/m-p/651871#M195614</link>
      <description>You mentioned that you want to subtract from ORDER 1. In that case, the value of difference_hour for the last 1234 should be 20. The difference_volume seems to be as stated.</description>
      <pubDate>Fri, 29 May 2020 20:29:21 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/subtracting-dates-in-hours-by-group-and-volumes/m-p/651871#M195614</guid>
      <dc:creator>biopharma</dc:creator>
      <dc:date>2020-05-29T20:29:21Z</dc:date>
    </item>
    <item>
      <title>Re: subtracting dates in hours by group and volumes</title>
      <link>https://communities.sas.com/t5/SAS-Programming/subtracting-dates-in-hours-by-group-and-volumes/m-p/651872#M195615</link>
      <description>&lt;P&gt;Assuming that differences are calculated from ORDER = 1.&lt;/P&gt;
&lt;PRE&gt;data have ;
   input ID date:mmddyy10. time:time5. volume order ;
   format date mmddyy10. time time5. datetime datetime22. ;
   datetime = dhms(date,0,0,time) ;
   cards ;
1234 1/2/2020 13:12 53.1 1
1234 1/2/2020 20:12 32.9 2
1234 1/3/2020 9:12 23.1 3
4522 3/2/2020 12:19 20.5 1
4522 3/2/2020 14:19 24.1 2
;
run ;

data want ;
   set have ;
   by id order ;
   retain _d _v ;
   drop _: ;
   if first.id then 
      do ;
         _v = volume ;
         _d = datetime ;
      end ;
   else do ;
      difference_hours = intck("hour",datetime,_d) ;
      difference_volume = volume - _v ;
   end ;
run ;&lt;/PRE&gt;</description>
      <pubDate>Fri, 29 May 2020 20:31:14 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/subtracting-dates-in-hours-by-group-and-volumes/m-p/651872#M195615</guid>
      <dc:creator>biopharma</dc:creator>
      <dc:date>2020-05-29T20:31:14Z</dc:date>
    </item>
    <item>
      <title>Re: subtracting dates in hours by group and volumes</title>
      <link>https://communities.sas.com/t5/SAS-Programming/subtracting-dates-in-hours-by-group-and-volumes/m-p/651948#M195657</link>
      <description>&lt;P&gt;Hi&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/303622"&gt;@monday89&lt;/a&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Here is another approach using PROC SQL:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have ;
	input ID date:mmddyy10. time:time5. volume order;
	format date mmddyy10. time time5. datetime datetime22.;
	datetime = dhms(date,0,0,time);
	datalines ;
1234 1/2/2020 13:12 53.1 1
1234 1/2/2020 20:12 32.9 2
1234 1/3/2020 9:12 23.1 3
4522 3/2/2020 12:19 20.5 1
4522 3/2/2020 14:19 24.1 2
	;
run;

option missing="";
proc sql;
	create table want as
	select  a.*,
			case when intck("hour",b.datetime,a.datetime) ne 0 then intck("hour",b.datetime,a.datetime) else . end as difference_hour,
			case when (a.volume - b.volume) ne 0 then (a.volume - b.volume) else . end as difference_volume
	from have as a left join
		 (select * from have group by ID having order=min(order)) as b
		 on a.ID=b.ID
	order by id, order;
quit;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Capture d’écran 2020-05-30 à 11.04.19.png" style="width: 999px;"&gt;&lt;img src="https://communities.sas.com/t5/image/serverpage/image-id/40172iDBA0CD216110C217/image-size/large?v=v2&amp;amp;px=999" role="button" title="Capture d’écran 2020-05-30 à 11.04.19.png" alt="Capture d’écran 2020-05-30 à 11.04.19.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Sat, 30 May 2020 09:04:36 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/subtracting-dates-in-hours-by-group-and-volumes/m-p/651948#M195657</guid>
      <dc:creator>ed_sas_member</dc:creator>
      <dc:date>2020-05-30T09:04:36Z</dc:date>
    </item>
  </channel>
</rss>

