Your infile actually has three delimiters:
- the pipe character
- hex 08 to separate items in the long string
- hex 09 to separate events and values within an item
So you need a do loop for the items and two different splits along these separators:
data jei;
infile '$HOME/sascommunity/jei.txt' dlmstr=CRLF dlm='|' truncover;
input
status :$5.
TIMESTAMP :$20.
variablestr :$500.
n :$1.
;
length
event $50
val 8
;
do i = 1 to countw(variablestr,'08'x);
event = scan(scan(variablestr,i,'08'x),1,'09'x);
val = input(scan(scan(variablestr,i,'08'x),2,'09'x),best.);
output;
end;
drop i variablestr;
run;
proc print data=jei noobs;
run;
Partial result:
status TIMESTAMP n event val
SV 20170629002459 N NumberOfUnitsBonded 6729
SV 20170629002459 N Previous Number of Unit Bonded 6732
SV 20170629002459 N Number of Unit Bonded 6733
SV 20170629002459 N UPS 3433
SV 20170629002459 N UOL 6733
SV 20170629002501 N NumberOfUnitsBonded 6730
SV 20170629002501 N Previous Number of Unit Bonded 6733
SV 20170629002501 N Number of Unit Bonded 6734
SV 20170629002501 N UPS 3434
SV 20170629002501 N UOL 6734
STATE 20170629002501 N Alarm count per shift 0
STATE 20170629002501 N Runtime per shift 8668
STATE 20170629002501 N MTBA per shift 8668
SV 20170629002502 N NumberOfUnitsBonded 6731
SV 20170629002503 N Previous Number of Unit Bonded 6734
SV 20170629002503 N Number of Unit Bonded 6735
SV 20170629002503 N UPS 3435
SV 20170629002503 N UOL 6735
SV 20170629002504 N NumberOfUnitsBonded 6732
SV 20170629002504 N Previous Number of Unit Bonded 6735
SV 20170629002504 N Number of Unit Bonded 6736
SV 20170629002504 N UPS 3436
SV 20170629002504 N UOL 6736
STATE 20170629002505 N Alarm count per shift 0
STATE 20170629002505 N Runtime per shift 8672
STATE 20170629002505 N MTBA per shift 8672
SV 20170629002506 N NumberOfUnitsBonded 6733
SV 20170629002506 N Previous Number of Unit Bonded 6736
SV 20170629002506 N Number of Unit Bonded 6737
SV 20170629002506 N UPS 3437
SV 20170629002506 N UOL 6737
SV 20170629002508 N NumberOfUnitsBonded 6734
SV 20170629002508 N Previous Number of Unit Bonded 6737
SV 20170629002508 N Number of Unit Bonded 6738
SV 20170629002508 N UPS 3438
SV 20170629002508 N UOL 6738
To make the data more analyzable for SAS, consider to convert the timestamp value to a SAS datetime value.
... View more