When you say 60 Min, Which 60 min do you want to consider? Is it from the first timestamp value, then look at this code:
data have;
Format DateTime DATETIME18.;
input IP DateTime DATETIME18.;
datalines;
123456 31MAR18:21:58:52
123456 31MAR18:21:57:19
123456 31MAR18:21:55:46
123456 31MAR18:23:55:46
123456 31MAR18:23:58:46
654321 31MAR18:23:44:18
654321 31MAR18:23:35:11
;
run;
/* Sort the data first */
PROC SORT DATA=have;
by IP DateTime;
run;
DATA WANT;
Format lag_Date DATETIME18.;
Retain Time;
set have;
by IP DateTime;
lag_Date=LAG(DateTime); /* Previous DateTime to Compare with current DateTime */
If first.IP then Do;
lag_Date=DateTime;
Time=0;
Count=1;
end;
else Time+INTCK('SECONDS',lag_Date,DateTime); /* Number of seconds from previous Datetime to current Datetime */
If time<=60*60 and time^=0 then count+1;
If last.IP;
Keep IP Count;
run;
else, if you want to count every hourly then use HOUR() for hour and sort the data by IP DATE and Hour and use FIRST. for these by variables for count.
data want2;
set have;
hour=hour(DateTime);
Date=datepart(Datetime);
run;
Proc sort data=want2;
by IP Date Hour;
run;
data final;
set want2;
by IP Date Hour;
if first.Hour then count=1;
else count+1;
if last.hour;
keep IP Hour Count;
run;
... View more