SaS Gurus,
I work in a mineral processing facility and I'm experimenting around with SaS Enterprise Miner to see if I can determine which sensor states and sequences lead to certain types of alarms.
I'm really after some advice as to the best preparation for the data. As a starting point, can I analyse it in its current form (see below), or do I need to convert it into timeseries data every 100 ms.
The data is stored from our sensors only when the value changes. It is stored in the following timestamped format: <Date Time>, <Variable Name>, <Variable Value>. Example Below.
TimeStamp | Variable | Value |
3/02/2014 16:02:34.1 | Position | 22.34 |
3/02/2014 16:02:34.3 | Position | 22.37 |
3/02/2014 16:03:32.7 | Speed | 83 |
3/02/2014 16:04:01.6 | Position | 22.39 |
3/02/2014 16:04:03.2 | Speed | 77 |
3/02/2014 16:07:29.0 | Position | 22.48 |
While the alarm instances are just identified by the occurrence timestamp.
TimeStamp | Alarm |
3/02/2014 16:03:23.0 | Alarm 1 |
3/02/2014 18:01:02.0 | Alarm 1 |
Any advice would be greatly appreciated.
James
Perth, Australia
Convert your measurement readings from time points to intervals. Then you can merge the alarm times with the intervals.
I changed the time of the second alarm (and the label) so that it would match a SPEED value.
data alarms ;
infile cards dsd dlm='|' truncover ;
informat timestamp anydtdtm. ;
format timestamp datetime24.2;
length alarm $20;
input timestamp alarm;
cards;
3/02/2014 16:03:23.0|Alarm 1
3/02/2014 18:01:02.0|Alarm 2
run;
data values ;
infile cards dsd dlm='|' truncover ;
informat timestamp anydtdtm. ;
format timestamp datetime24.2;
length position $20;
input timestamp position value;
cards;
3/02/2014 16:02:34.1|Position|22.34
3/02/2014 16:02:34.3|Position|22.37
3/02/2014 16:03:02.7|Speed|83
3/02/2014 16:04:01.6|Position|22.39
3/02/2014 16:04:03.2|Speed|77
3/02/2014 16:07:29.0|Position|22.48
run;
proc sort ;
by position descending timestamp ;
run;
data ranges ;
set values ;
by position descending timestamp ;
start=timestamp;
end = lag(timestamp);
if first.position then end = .;
format start end datetime24.2;
keep position value start end
run;
proc sql ;
create table want as
select a.alarm,a.timestamp as alarm_time, b.*
from alarms a left join ranges b
on a.timestamp >= b.start and (a.timestamp < b.end or b.end is null)
order by 1,2
;
quit;
proc print;
run;
Alarm 1|02MAR2014:16:03:23.00|Position|22.37|02MAR2014:16:02:34.30|02MAR2014:16:04:01.60
Alarm 1|02MAR2014:16:03:23.00|Speed|83|02MAR2014:16:03:02.70|02MAR2014:16:04:03.20
Alarm 2|02MAR2014:18:01:02.00|Position|22.48|02MAR2014:16:07:29.00|
Alarm 2|02MAR2014:18:01:02.00|Speed|77|02MAR2014:16:04:03.20|
Registration is now open for SAS Innovate 2025 , our biggest and most exciting global event of the year! Join us in Orlando, FL, May 6-9.
Sign up by Dec. 31 to get the 2024 rate of just $495.
Register now!
Use this tutorial as a handy guide to weigh the pros and cons of these commonly used machine learning algorithms.
Find more tutorials on the SAS Users YouTube channel.