BookmarkSubscribeRSS Feed
statadm
Fluorite | Level 6
I'm trying to exclude negative time differences only when the time goes from somewhere in the 23:00 hour to the 00:00 hour. I can't seem to get this code right. Unfortunately, I do not have dates associated with the times or that would solve everything. Here is the code I'm working with:


DO I=1 TO 72;
IF DECONSET{I} NE . AND (DECONSET{I+1}-DECONSET{I}<=0) AND (DECONSET{I+1}-DECONSET{I} NE .) THEN PUT READER= CUSTOMID= DECONSET{I}= DECONSET{I+1}=;
END;

I don't want this code to output the times that go from 23:00 to 00:00. I tried writing in the code to exclude differences less than -83000 when '23:00't<=DECONSET{I}<='23:59't , but that didn't seem to work.

Thanks in advance for your help!


Message was edited by: statadm

Message was edited by: statadm Message was edited by: statadm
6 REPLIES 6
statadm
Fluorite | Level 6
skip Message was edited by: statadm
sbb
Lapis Lazuli | Level 10 sbb
Lapis Lazuli | Level 10
Read this prior post with guidelines for special character conditions.

Scott Barry
SBBWorks, Inc.

http://support.sas.com/forums/thread.jspa?messageID=27609
statadm
Fluorite | Level 6
Thanks Scott, I figured it was something like that. It is working now.
statadm
Fluorite | Level 6
Does anyone have any idea how I can add something to my code to exclude times that go over the midnight hour?
Peter_C
Rhodochrosite | Level 12
> I'm trying to exclude negative time differences only
> when the time goes from somewhere in the 23:00 hour
> to the 00:00 hour. I can't seem to get this code
> right. Unfortunately, I do not have dates associated
> with the times or that would solve everything. Here
> is the code I'm working with:
>
>
> DO I=1 TO 72;
> IF DECONSET{I} NE . AND
> (DECONSET{I+1}-DECONSET{I} le 0) AND
> (DECONSET{I+1}-DECONSET{I} NE .) THEN PUT READER=
> CUSTOMID= DECONSET{I}= DECONSET{I+1}=;
> END;
>
> I don't want this code to output the times that go
> from 23:00 to 00:00. I tried writing in the code to
> exclude differences less than -83000 when
> '23:00't le DECONSET{I} le '23:59't , but that
> didn't seem to work.
>
> Thanks in advance for your help!
are we to assume your array DECONSET contains up to 72 times that represent consecutive events and you want to treat over midnight in a proper way so that if difference is negative and prior time is after 11pm then adapt the negative difference into a proper duration over midnight?
Instead of testing deconset(i) and using deconset(i+1) I would suggest testing deconset(i+1)
something like[pre]array interval(2:72) ;* to keep the calculations;
do i=2 to 72 ;
if missing(deconset(i-1)) then continue ;
if missing(deconset(i)) then continue ; * testing both allows occasional gaps;
inter = deconset(i) - deconset(i-1) ;
if inter LT 0 then do ;
if deconset(i) GE '23:0:0't then
inter = inter + '24:0:0't ;
if interval LT 0 then do ;
inter = . ;
put ( deconset(i-1) deconset(i) )(=) ' still negative interval' ;
end ;
interval(i) = inter ;
end ; [/pre] is that helpful?

That measures interval between consecutive pairs which are both non-missing..
An alternative model might measure between the latest and previous non-missing value.

peterC
statadm
Fluorite | Level 6
Thanks Peter, I will give this code a try.

hackathon24-white-horiz.png

The 2025 SAS Hackathon has begun!

It's finally time to hack! Remember to visit the SAS Hacker's Hub regularly for news and updates.

Latest Updates

How to Concatenate Values

Learn how use the CAT functions in SAS to join values from multiple variables into a single value.

Find more tutorials on the SAS Users YouTube channel.

SAS Training: Just a Click Away

 Ready to level-up your skills? Choose your own adventure.

Browse our catalog!

Discussion stats
  • 6 replies
  • 2326 views
  • 0 likes
  • 3 in conversation