MICS

MICS job-step execution summary using BATPGM, from interval data

  • 1.  MICS job-step execution summary using BATPGM, from interval data

    Posted 09-23-2015 12:16 PM

     

    The MICS BATPGM file (also, it’s parallel / sibling files BAT_xx) are most often generated from SMF 30 subtype 2/3 (interval) records, with additional data-fields extracted from the SMF 30 subtype 4 and back-filled to BATPGM/BAT_xx  in the last (termination-event) interval/observation.  This situation can be verified with PROC FREQ against the MICS/SAS variable PGMINTVL, and review the MICS DICTIONARY info for PGMINTVL.

     

    This condition creates a challenge at reporting-time when there is interest with reporting at the job-step execution summary (that being one detail report/row line per completed job-step), instead of reporting the MICS BATPGM detail / SMF-interval observations, which would likely be a mix of “nn” minute (SMFPRMxx member in your PARMLIB) interval records (where PGMINTVL=’SE22’) for longer-running jobs/tasks or step-termination records (PGMINTVL=’SE23’ and PGMCOUNT=1 conditions present).

     

    The MICS/SAS reporting code below demonstrates how to create the job-step execution / completion summary observation, using key SAS variables:  JOB RDRTS PGMSSTTS – where RDRTS is job-submit timestamp, PGMSSTTS is job-step  execution start-timestamp (as compared to STARTTS which will be the interval start timestamp).

     

    Productivity-Tip:  When composing SAS batch jobstream code (or JCL jobstreams for that matter), consider activating ISPF EDIT/VIEW command “HILITE OTHER” for enhanced text/SAS statement display and interpretation on the screen - helps with desk-checking SAS code and/or JCL as well.

     

    Regards,

     

    Scott Barry

    SBBWorks, Inc.

     

     

    //STEP1 EXEC MICSSHR?

    //SYSIN DD   DATA,DLM=ZZ

    OPTIONS SOURCE SOURCE2;

      /* OPTIONS MGEN SGEN MPRINT;  */

    %LET CYCRANGE = 07-01;

    /* SAS MACRO VARS BELOW REQUIRED FOR MICS FFFSUM MACRO */

    %LET BY = JOB RDRTS PGMSSTTS;

    %LET BREAK = %SCAN(&BY,-1,%STR( )); /* capture the last BY var */

    DATA BATPGM;

      /* WHERE input-side filter code goes here, if desired */

      * WHERE PGMEXCTM GT 0;  /* could only show executed steps */

      /* USE CA-SUPPLIED MACRO FOR GENERATING SET STMT */

      SET %MFILE(F=PGM&CYCRANGE,TS=DETAIL);

    RUN;

    /* NOW SORT AND SUMMARIZE TO ONE OBS PER STEP-EXECUTION */

    PROC SORT DATA=BATPGM;

      BY &BY;

    RUN;

    %MACRO NEGATE;

      /* OPTIONAL MICS-INVOKED MACRO FOR USER VARIABLE        */

      /*   CALCULATIONS/DERIVATION. INVOKED WITHIN FFFSUM     */

      /*   MACRO JUST PRIOR TO OUTPUT.  */

      /* */

      /* CONSOLIDATE PROC-STEP AND JOB-STEP INFO INTO ONE VAR */

      LENGTH STEPINFO $17;

      STEPINFO = CATX('/',PGMPSNAM,STEPNAME);

    %MEND  NEGATE;

    DATA BATPGM;

      /* Setup SAS numeric variable length definitions larger, */

      /* also define FORMATs and LABELs if ESSENTIAL database */

      /* with DERIVE COMPUTE.  */

      %PGMLEN(TS=MONTHS);

      %PGMFMT(TS=MONTHS);

      %PGMLBL;

      SET BATPGM;

      %PGMSUM;

    RUN;

    %MACRO NEGATE; %MEND NEGATE; /* RESET MACRO CONTENT AS HABIT */

    /* */

    /* YOUR REPORTING CODE GOES HERE – sample below. */

    OPTIONS LS=MAX;

    PROC PRINT U LABEL NOOBS DATA=BATPGM;

      VAR SYSID JOB RDRTS JESJOBNO STEPINFO STEPNUM TERMCODE

          PGMTCBSU PGMSRBSU PGMSERVU PGMEDASD PGMETAPE

             PGMSYSAB PGMUSRAB PGMEXCTM PGMSSTTS ENDTS;

      TITLE 'BATCH JOB-STEP EXECUTION SUMMARY STATS';

    RUN;

    ZZ