This could be a common scenario for unix admins. For each user process, we have separate daily log files identified by date and PID. In common with many busy systems, the PID is reused every 1-2 months. I am trying to create a unique ID for each file created by the user process and a sequence number.
For future proofing, I want to avoid proc sql monotonic() and data step lag() . I think retain will still be supported in Viya.
datepid (=(startdt * 1e5) + pid) is unique and initflag, endflag are usually reliable. We are trying to assign sessid and fileseq.
Below is what we want for pid = 58123 . This pattern could occur every 1-2 months for any PID. datepid startdt pid initflag endflag sessid logfileseq 2020102058123 20201020 58123 Y 2020102158123 1 2020102158123 20201021 58123 2020102158123 2 2020102258123 20201022 58123 Y 2020102158123 3 2020110558123 20201105 58123 Y Y 2020110558123 1 2021010258123 20210102 58123 Y 2021010258123 1 2021010858123 20210108 58123 Y 2021010258123 2 If PID was unique, this would work:
proc sort data = logfiles ;
by pid ;
data logfileseq ;
set logflles ;
by pid ;
retain sessid ;
if first.pid then do ;
logfileseq =1 ;
sessid = datepid ;
end ;
else logfileseq +1 ;
run ;
In case InitFlag and EndFlag are missing, I would like to include that max(startdt) - min(startdt) < 25 by pid is usually the same sessid.
Ideally, we would use ANSI SQL but logfileseq is a challenge.
... View more