FOCUS AREAS

ARM SAS Documentation for Version 9

Syntax Overview | V9 ARM Log Format | SAS 9 Examples


ARM - V9 Macro Examples

%ARMPROC

Example 1 - define a permanent library to store ARMPROC output

libname user 'f:\arm\user';
%armproc(lib=user);
run;

Example 2 - define an ARM log to be read on WIN NT platform

 %armproc(log=f:\armlogs\mytest.log);
run;

%ARMJOIN

Example 1 - define a permanent library to read ARMPROC output and store ARMJOIN views

libname user 'f:\arm\user';
%armjoin(libin=user,libout=user);
run;

User specified metrics on ARMGETID, ARMSTOP, etc

Correlators

C ode fragment showing hdl1 is parent of hdl1a, hdl1a is both child of hld1 and parent of hdl2:
  %armstrt(txnidvar=txn1,shdlvar=hdl1,corr=1);
  %armstrt(txnidvar=txn2,corr=3,parntvar=hdl1,shdlvar=hdl1a);
  %armstrt(txnidvar=txn2,corr=2,parntvar=hdl1a,shdlvar=hdl2);
run;

Examples of code, log and processing

Initialize application, transaction class, start, update, stop and end application

SAS Code:
NOTE -- Statement -- %let _ARMEXEC = 1; -- is in the AUTOEXEC file.
data _null_;
  %arminit(appname='Appl 1', appuser='sasjrs');
run; 

data _null_; 
  %armgtid(txnname='Txn 1', metrNam1=smallStr,metrDef1=short); 
run; 

data _null_; 
  %armstrt(metrVal1='Start'); 
run; 

data _null_; 
  /* bufftype in ARM log is generated from data parameters entered */
  %armupdt(data='FORMAT 2 DATA');
  %armupdt(metrVal1='Update');
  %armupdt(data='FORMAT 2 DATA',metrVal1='Update'); /* generates warning message */
  %armupdt();                                       /* default no extra data     */
run; 

data _null_; 
  %armstop(status=2,metrVal1='Stop'); 
run; 

data _null_; 
  %armend; 
run; 
Resulting SAS log:
NOTE: Copyright (c) 1999-2001 by SAS Institute Inc., Cary, NC, USA.
NOTE: SAS (r) Proprietary Software Version 9.00 (TS A0)
      Licensed to SAS Institute Inc., Site 0000000001.
NOTE: This session is executing on the WIN_NT  platform.



NOTE: SAS initialization used:
      real time           2.81 seconds
      cpu time            1.92 seconds


NOTE: AUTOEXEC processing beginning; file is c:\sasv9\autoexec.sas.

NOTE: Libref ARMCAT was successfully assigned as follows:
      Engine:        V9
      Physical Name: f:\armv9\sampsio

NOTE: AUTOEXEC processing completed.

1
2    data _null_;
3      %arminit(appname='Appl 1', appuser='sasjrs');
4    run;

NOTE: DATA statement used (Total process time):
      real time           0.37 seconds
      cpu time            0.25 seconds


5
6    data _null_;
7      %armgtid(txnname='Txn 1', metrNam1=smallStr,metrDef1=short);
8    run;

NOTE: DATA statement used (Total process time):
      real time           0.36 seconds
      cpu time            0.34 seconds


9
10   data _null_;
11     %armstrt(metrVal1='Start');
12   run;

NOTE: DATA statement used (Total process time):
      real time           0.27 seconds
      cpu time            0.28 seconds


13
14   data _null_;
15     /* bufftype in ARM log is generated from data parameters entered */
16     %armupdt(data='FORMAT 2 DATA');
17     %armupdt(metrVal1='Update');
18     %armupdt(data='FORMAT 2 DATA',metrVal1='Update'); /* generates warning message */

WARNING: DATA= parameter found. User metrics ignored.
19     %armupdt();                                       /* default no extra data     */

20   run;

NOTE: DATA statement used (Total process time):
      real time           0.54 seconds
      cpu time            0.40 seconds


21
22   data _null_;
23     %armstop(status=2,metrVal1='Stop');
24   run;

NOTE: DATA statement used (Total process time):
      real time           0.25 seconds
      cpu time            0.16 seconds


25
26   data _null_;
27     %armend;
28   run;

NOTE: DATA statement used (Total process time):
      real time           0.14 seconds
      cpu time            0.12 seconds

Resulting ARM log file (input to %ARMPROC):
I,1326833654.503000,1,1.602304,1.291857,Appl 1,sasjrs
G,1326833654.894000,1,1,Txn 1,,smallStr,ShortStr
S,1326833655.194000,1,1,1,2.193153,1.371972,Start   
U,1326833655.745000,1,1,1,2.563686,1.412030,2,FORMAT 2 DATA
U,1326833655.745000,1,1,1,2.563686,1.412030,1,Update  
U,1326833655.745000,1,1,1,2.563686,1.412030,2,FORMAT 2 DATA
U,1326833655.745000,1,1,1,2.563686,1.412030,0
P,1326833656.25000,1,1,1,2.703888,1.452088,2,Stop    
E,1326833656.186000,1,2.814046,1.482131

Open code macros

SAS Code:
%let _armacro=1;  /* all ARM macros are outside of data steps */

%arminit(appname='test app',getid=yes,txnname='trans1',
         txndet='txn desc1');
%armstrt;
run;
%armupdt;
run;

data one;
do i=1 to 100;
  output;
end;
run;

%armstop;
run;
%armend;
run;
Resulting SAS log:
NOTE: Copyright (c) 1999-2001 by SAS Institute Inc., Cary, NC, USA.
NOTE: SAS (r) Proprietary Software Version 9.00 (TS A0)
      Licensed to SAS Institute Inc., Site 0000000001.
NOTE: This session is executing on the WIN_NT  platform.



NOTE: SAS initialization used:
      real time           2.61 seconds
      cpu time            1.87 seconds


NOTE: AUTOEXEC processing beginning; file is c:\sasv9\autoexec.sas.

NOTE: Libref ARMCAT was successfully assigned as follows:
      Engine:        V9
      Physical Name: f:\armv9\sampsio

NOTE: AUTOEXEC processing completed.

1    %let _armacro=1;  /* all ARM macros are outside of data steps */
2
3    %arminit(appname='test app',getid=yes,txnname='trans1',
4             txndet='txn desc1');
5    %armstrt;
6    run;
7    %armupdt;
8    run;
9
10   data one;
11   do i=1 to 100;
12     output;
13   end;
14   run;

NOTE: The data set WORK.ONE has 100 observations and 1 variables.
NOTE: DATA statement used (Total process time):
      real time           1.30 seconds
      cpu time            0.20 seconds


15
16   %armstop;
17   run;
18   %armend;
19   run;


Resulting ARM log file (input to %ARMPROC):
I,1326834273.473000,1,1.792577,1.542217,test app,*
G,1326834273.714000,1,1,trans1,txn desc1
S,1326834274.174000,1,1,1,2.343369,1.572260
U,1326834274.625000,1,1,1,2.623772,1.592289,0
E,1326834276.498000,1,3.4320,1.812606

Full program of correlated transactions, including start and stop

SAS Code:
%let _armacro = 0;

data _null_;

  /* initialize */
  rc = 0;
  appl_id=0;
  txn_id1=0;
  txn_stat=0;
  sHandle1=0;
  sHandle2=0;
  sHandle3=0;

  %arminit(appname="Appl 1");
  %armgtid(txnname="Trans 1",txndet="Transaction #1",
                   txnidvar=txn1,
                   metrnam1=1usrcnt32,metrDef1=count32,
                   metrnam2=2gag64,   metrDef2=gauge64,
                   metrnam3=3id32,    metrDef3=id32,
                   metrnam4=4id64,    metrDef4=id64);
  %armgtid(txnname="Trans 1a",txndet="Transaction 1a",txnidvar=txn2);        
  /* txn_id,correlator func, parent start handle, user metrics....*/
  %armstrt(txnidvar=txn1,shdlvar=hdl1,corr=1,
           metrval1=12,
           metrval2=34,
           metrval3=_N_, 
           metrval4=_N_);
  %armstrt(txnidvar=txn2,corr=3,parntvar=hdl1,shdlvar=hdl1a);
  %armstrt(txnidvar=txn2,corr=2,parntvar=hdl1a,shdlvar=hdl2);

  %armstop(shdlvar=hdl2,status=txn_stat);
  %armstop(shdlvar=hdl1a,status=txn_stat);
  %armstop(shdlvar=hdl1,status=txn_stat,metrval1=43,
           metrval2=21,
           metrval3=_N_, 
           metrval4=_N_);
  %armend();

run;

Resulting SAS log:
NOTE: Copyright (c) 1999-2001 by SAS Institute Inc., Cary, NC, USA.
NOTE: SAS (r) Proprietary Software Version 9.00 (TS A0)
      Licensed to SAS Institute Inc., Site 0000000001.
NOTE: This session is executing on the WIN_NT  platform.



NOTE: SAS initialization used:
      real time           22.91 seconds
      cpu time            5.37 seconds


NOTE: AUTOEXEC processing beginning; file is c:\sasv9\autoexec.sas.

NOTE: Libref ARMCAT was successfully assigned as follows:
      Engine:        V9
      Physical Name: f:\armv9\sampsio

NOTE: AUTOEXEC processing completed.

1    %let _armacro = 0;
2
3    data _null_;
4
5      /* initialize */
6      rc = 0;
7      appl_id=0;
8      txn_id1=0;
9      txn_stat=0;
10     sHandle1=0;
11     sHandle2=0;
12     sHandle3=0;
13
14     %arminit(appname="Appl 1");
15     %armgtid(txnname="Trans 1",txndet="Transaction #1",
16                      txnidvar=txn1,
17                      metrnam1=1usrcnt32,metrDef1=count32,
18                      metrnam2=2gag64,   metrDef2=gauge64,
19                      metrnam3=3id32,    metrDef3=id32,
20                      metrnam4=4id64,    metrDef4=id64);
21     %armgtid(txnname="Trans 1a",txndet="Transaction 1a",txnidvar=txn2);
22     /* txn_id,correlator func, parent start handle, user metrics....*/
23     %armstrt(txnidvar=txn1,shdlvar=hdl1,corr=1,
24              metrval1=12,
25              metrval2=34,
26              metrval3=_N_,
27              metrval4=_N_);
28     %armstrt(txnidvar=txn2,corr=3,parntvar=hdl1,shdlvar=hdl1a);
29     %armstrt(txnidvar=txn2,corr=2,parntvar=hdl1a,shdlvar=hdl2);
30
31     %armstop(shdlvar=hdl2,status=txn_stat);
32     %armstop(shdlvar=hdl1a,status=txn_stat);
33     %armstop(shdlvar=hdl1,status=txn_stat,metrval1=43,
34              metrval2=21,
35              metrval3=_N_,
36              metrval4=_N_);
37     %armend();
38
39   run;

NOTE: DATA statement used (Total process time):
      real time           3.49 seconds
      cpu time            2.02 seconds
Resulting ARM log:
I,1326893707.995000,1,3.314766,5.127372,Appl 1,*
G,1326893707.995000,1,1,Trans 1,Transaction #1,1usrcnt32,Count32,2gag64,Gauge64,3id32,Id32,4id64,Id64
G,1326893707.995000,1,2,Trans 1a,Transaction 1a
S,1326893707.995000,1,1,1,3.314766,5.127372,12,34,1,1
C,1326893707.995000,1,2,2,1,1,3.314766,5.127372
C,1326893708.5000,1,2,3,2,2,3.324780,5.127372
P,1326893708.5000,1,2,3,3.324780,5.127372,0
P,1326893708.5000,1,2,2,3.324780,5.127372,0
P,1326893708.5000,1,1,1,3.324780,5.127372,0,43,21,1,1
E,1326893708.5000,1,3.324780,5.127372

SAS I/O performance test with ARM - written by Evan Dean

SAS Code:
/********************* BASE:BIT PERFORMANCE TEST **********************

 NAME:     putc.sas
 PURPOSE:  Put statement to DUMMY with character formats
 VARIES:   format
 AUTHOR:   Jason Secosky - jaseco
 SUPPORT:  Jason Secosky - jaseco
 NOTES:    Little I/O to stress data step execution
      :    Not going through ODS
      :    Uses no column controls, and @ & + column controls
      :    Uses frequently used formats
      :    gtidset macro contained in perfauto.sas (base dvd)
 HISTORY:  07Oct99 created

 **********************************************************************//*-- gtidsetup is for tests that start more than one ARM 'application' --*/
%macro gtidset(fmt, desc, appid);

%if ("&fmt" = "")  %then
  %do;
    %armgtid(txnname='NONE', txndet='&desc', txnidvar=round1, appidvar=&appid);
    %armgtid(txnname='NONE', txndet='&desc', txnidvar=round2, appidvar=&appid);
    %armgtid(txnname='NONE', txndet='&desc', txnidvar=round3, appidvar=&appid);
  %end;
%else
  %do;
    %armgtid(txnname='&fmt', txndet='&desc', txnidvar=round1, appidvar=&appid);
    %armgtid(txnname='&fmt', txndet='&desc', txnidvar=round2, appidvar=&appid);
    %armgtid(txnname='&fmt', txndet='&desc', txnidvar=round3, appidvar=&appid);
  %end;
%mend;

/*-- Turn on ARM macros --*/
  %let _armexec = 1;
  %let _armacro = 1;
  *%filename( ARMLOG, putc, txt );
  options armloc="putc.log";
  %arminit(appname='DATASTEP;&sysscpl;&sysvlong', txnname='putc',
           getid=yes, appidvar=app);
  %arminit(appname='DATASTEP;&sysscpl;&sysvlong;ABS', txnname='putc',
           getid=yes, appidvar=appabs);
  %arminit(appname='DATASTEP;&sysscpl;&sysvlong;REL', txnname='putc',
           getid=yes, appidvar=apprel);
/*------------------------*/

%macro mvsopts;
  %if %quote(&sysscpl)=%quote(OS/390) or
                      %quote(&sysscpl)=%quote(MVS)
                   %then options stats;
%mend;
%mvsopts;

%let nsteps=3; %put **NSTEPS= &nsteps; %put **DATE= &sysdate9; %put **PUTC**;
%let nlines = 80000;

/**
 ** MACRO: LIMSETUP
 **   Host specific number of lines to output, to vary exec time.
 **/
%macro limsetup;
   %if %str(&sysscp) = %str(OS) %then
      %let nlines = 40000;
%mend;
%limsetup;

%let outfile = nul;
%let nelem = 100;
%let charsz = 20;

filename nul DUMMY;
data _null_; file &outfile; x=1; put x=; run;


/**
 ** MACRO: PUTTST
 **   Use no column controls to output data to default output device.
 **/
%macro puttst(fmt);
   %put ##FMT= &fmt;

  %gtidset(&fmt, PUTC, app);
   %do i = 1 %to &nsteps;

   %armstrt(txnidvar=round&i );
      data _null_;
         file &outfile;
         array arr{&nelem} $ &charsz;
         do i = 1 to &nelem;
            arr{i} = repeat('j', &charsz);
         end;
         do i = 1 to &nlines;
            put arr{*} &fmt;
         end;
         run;
    %armstop;
   %end;
%mend;


/**
 ** MACRO: ABSEXP
 **   Create put statement that uses @ column control.
 **/
%macro absexp(nelem, fmt);
   %local i;
   %do i = 1 %to &nelem;
      @%eval(&i*(&charsz+1)) arr{&i} &fmt
   %end;
%mend;


/**
 ** MACRO: PUTTST2
 **   Use @ column controls to output data to default output device.
 **/
%macro puttst2(fmt);
   %put ##FMTABS= &fmt;

  %gtidset(&fmt, PUTC_ABS, appabs);
  %do i = 1 %to &nsteps;

   %armstrt(txnidvar=round&i );
      data _null_;
         file &outfile;
         array arr{&nelem} $ &charsz;
         do i = 1 to &nelem;
            arr{i} = repeat('j', &charsz);
         end;
         do i = 1 to &nlines;
            put %absexp(&nelem, &fmt);
         end;
         run;
    %armstop;

   %end;
%mend;


/**
 ** MACRO: RELEXP
 **   Create put statement that uses + column control.
 **/
%macro relexp(nelem, fmt);
   %local i;
   %do i = 1 %to &nelem;
      +3 arr{&i} &fmt
   %end;
%mend;


/**
 ** MACRO: PUTTST3
 **   Use + column controls to output data to default output device.
 **/
%macro puttst3(fmt);
   %put ##FMTREL= &fmt;

  %gtidset(&fmt, PUTC_REL, apprel);
   %do i = 1 %to &nsteps;

    %armstrt(txnidvar=round&i );
      data _null_;
         file &outfile;
         array arr{&nelem} $ &charsz;
         do i = 1 to &nelem;
            arr{i} = repeat('j', &charsz);
         end;
         do i = 1 to &nlines;
            put %relexp(&nelem, &fmt);
         end;
         run;
     %armstop;

   %end;
%mend;


%puttst($);
%puttst($&charsz..);
%puttst($CHAR&charsz..);
%puttst($ASCII&charsz..);
%puttst($HEX%eval(&charsz * 2).);
%puttst($UPCASE&charsz..);

%puttst2($);
%puttst2($&charsz..);
%puttst2($CHAR&charsz..);
%puttst2($ASCII&charsz..);
%puttst2($HEX%eval(&charsz * 2).);
%puttst2($UPCASE&charsz..);

%puttst3($);
%puttst3($&charsz..);
%puttst3($CHAR&charsz..);
%puttst3($ASCII&charsz..);
%puttst3($HEX%eval(&charsz * 2).);
%puttst3($UPCASE&charsz..);

 /*-- Unarm application --*/
 %armend(appidvar=app);
 %armend(appidvar=appabs);
 %armend(appidvar=apprel);

SAS log:
NOTE: Copyright (c) 1999-2001 by SAS Institute Inc., Cary, NC, USA.
NOTE: SAS (r) Proprietary Software Version 9.00 (TS A0)
      Licensed to SAS Institute Inc., Site 0000000001.
NOTE: This session is executing on the WIN_NT  platform.



NOTE: SAS initialization used:
      real time           2.29 seconds
      cpu time            2.04 seconds


NOTE: AUTOEXEC processing beginning; file is c:\sasv9\autoexec.sas.

NOTE: Libref ARMCAT was successfully assigned as follows:
      Engine:        V9
      Physical Name: f:\armv9\sampsio

NOTE: AUTOEXEC processing completed.

1    /********************* BASE:BIT PERFORMANCE TEST **********************
2
3     NAME:     putc.sas
4     PURPOSE:  Put statement to DUMMY with character formats
5     VARIES:   format
6     AUTHOR:   Jason Secosky - jaseco
7     SUPPORT:  Jason Secosky - jaseco
8     NOTES:    Little I/O to stress data step execution
9          :    Not going through ODS
10         :    Uses no column controls, and @ & + column controls
11         :    Uses frequently used formats
12         :    gtidset macro contained in perfauto.sas (base dvd)
13    HISTORY:  07Oct99 created
14
15    **********************************************************************//*-- gtidsetup is
15 ! for tests that start more than one ARM 'application' --*/
16   %macro gtidset(fmt, desc, appid);
17
18   %if ("&fmt" = "")  %then
19     %do;
20       %armgtid(txnname='NONE', txndet='&desc', txnidvar=round1, appidvar=&appid);

21       %armgtid(txnname='NONE', txndet='&desc', txnidvar=round2, appidvar=&appid);

22       %armgtid(txnname='NONE', txndet='&desc', txnidvar=round3, appidvar=&appid);

23     %end;
24   %else
25     %do;
26       %armgtid(txnname='&fmt', txndet='&desc', txnidvar=round1, appidvar=&appid);

27       %armgtid(txnname='&fmt', txndet='&desc', txnidvar=round2, appidvar=&appid);

28       %armgtid(txnname='&fmt', txndet='&desc', txnidvar=round3, appidvar=&appid);

29     %end;
30   %mend;
31
32   /*-- Turn on ARM macros --*/
33     %let _armexec = 1;
34     %let _armacro = 1;
35     *%filename( ARMLOG, putc, txt );
36     options armloc="putc.log";
37     %arminit(appname='DATASTEP;&sysscpl;&sysvlong', txnname='putc',
38              getid=yes, appidvar=app);
39     %arminit(appname='DATASTEP;&sysscpl;&sysvlong;ABS', txnname='putc',
40              getid=yes, appidvar=appabs);
41     %arminit(appname='DATASTEP;&sysscpl;&sysvlong;REL', txnname='putc',
42              getid=yes, appidvar=apprel);
43   /*------------------------*/
44
45   %macro mvsopts;
46     %if %quote(&sysscpl)=%quote(OS/390) or
47                         %quote(&sysscpl)=%quote(MVS)
48                      %then options stats;
49   %mend;
50   %mvsopts;
51
52   %let nsteps=3; %put **NSTEPS= &nsteps; %put **DATE= &sysdate9; %put **PUTC**;

**NSTEPS= 3
**DATE= 17JAN2002
**PUTC**
53   %let nlines = 80000;
54
55   /**
56    ** MACRO: LIMSETUP
57    **   Host specific number of lines to output, to vary exec time.
58    **/
59   %macro limsetup;
60      %if %str(&sysscp) = %str(OS) %then
61         %let nlines = 40000;
62   %mend;
63   %limsetup;
64
65   %let outfile = nul;
66   %let nelem = 100;
67   %let charsz = 20;
68
69   filename nul DUMMY;
70   data _null_; file &outfile; x=1; put x=; run;

NOTE: The file NUL is:
      File Name=,
      RECFM=V,LRECL=256

NOTE: 1 record was written to the file NUL.
      The minimum record length was 3.
      The maximum record length was 3.
NOTE: DATA statement used (Total process time):
      real time           0.05 seconds
      cpu time            0.06 seconds


71
72
73   /**
74    ** MACRO: PUTTST
75    **   Use no column controls to output data to default output device.
76    **/
77   %macro puttst(fmt);
78      %put ##FMT= &fmt;
79
80     %gtidset(&fmt, PUTC, app);
81      %do i = 1 %to &nsteps;
82
83      %armstrt(txnidvar=round&i );
84         data _null_;
85            file &outfile;
86            array arr{&nelem} $ &charsz;
87            do i = 1 to &nelem;
88               arr{i} = repeat('j', &charsz);
89            end;
90            do i = 1 to &nlines;
91               put arr{*} &fmt;
92            end;
93            run;
94       %armstop;
95      %end;
96   %mend;
97
98
99   /**
100   ** MACRO: ABSEXP
101   **   Create put statement that uses @ column control.
102   **/
103  %macro absexp(nelem, fmt);
104     %local i;
105     %do i = 1 %to &nelem;
106        @%eval(&i*(&charsz+1)) arr{&i} &fmt
107     %end;
108  %mend;
109
110
111  /**
112   ** MACRO: PUTTST2
113   **   Use @ column controls to output data to default output device.
114   **/
115  %macro puttst2(fmt);
116     %put ##FMTABS= &fmt;
117
118    %gtidset(&fmt, PUTC_ABS, appabs);
119    %do i = 1 %to &nsteps;
120
121     %armstrt(txnidvar=round&i );
122        data _null_;
123           file &outfile;
124           array arr{&nelem} $ &charsz;
125           do i = 1 to &nelem;
126              arr{i} = repeat('j', &charsz);
127           end;
128           do i = 1 to &nlines;
129              put %absexp(&nelem, &fmt);
130           end;
131           run;
132      %armstop;
133
134     %end;
135  %mend;
136
137
138  /**
139   ** MACRO: RELEXP
140   **   Create put statement that uses + column control.
141   **/
142  %macro relexp(nelem, fmt);
143     %local i;
144     %do i = 1 %to &nelem;
145        +3 arr{&i} &fmt
146     %end;
147  %mend;
148
149
150  /**
151   ** MACRO: PUTTST3
152   **   Use + column controls to output data to default output device.
153   **/
154  %macro puttst3(fmt);
155     %put ##FMTREL= &fmt;
156
157    %gtidset(&fmt, PUTC_REL, apprel);
158     %do i = 1 %to &nsteps;
159
160      %armstrt(txnidvar=round&i );
161        data _null_;
162           file &outfile;
163           array arr{&nelem} $ &charsz;
164           do i = 1 to &nelem;
165              arr{i} = repeat('j', &charsz);
166           end;
167           do i = 1 to &nlines;
168              put %relexp(&nelem, &fmt);
169           end;
170           run;
171       %armstop;
172
173     %end;
174  %mend;
175
176
177  %puttst($);
##FMT= $

NOTE: The file NUL is:
      File Name=,
      RECFM=V,LRECL=256

NOTE: 720000 records were written to the file NUL.
      The minimum record length was 83.
      The maximum record length was 251.
NOTE: DATA statement used (Total process time):
      real time           9.36 seconds
      cpu time            9.29 seconds

178  %puttst($&charsz..);
##FMT= $20.

NOTE: The file NUL is:
      File Name=,
      RECFM=V,LRECL=256

NOTE: 720000 records were written to the file NUL.
      The minimum record length was 80.
      The maximum record length was 240.
NOTE: DATA statement used (Total process time):
      real time           7.13 seconds
      cpu time            7.08 seconds

179  %puttst($CHAR&charsz..);
##FMT= $CHAR20.

NOTE: The file NUL is:
      File Name=,
      RECFM=V,LRECL=256

NOTE: 720000 records were written to the file NUL.
      The minimum record length was 80.
      The maximum record length was 240.
NOTE: DATA statement used (Total process time):
      real time           7.38 seconds
      cpu time            7.26 seconds

180  %puttst($ASCII&charsz..);
##FMT= $ASCII20.

NOTE: The file NUL is:
      File Name=,
      RECFM=V,LRECL=256

NOTE: 720000 records were written to the file NUL.
      The minimum record length was 80.
      The maximum record length was 240.
NOTE: DATA statement used (Total process time):
      real time           8.95 seconds
      cpu time            8.89 seconds

181  %puttst($HEX%eval(&charsz * 2).);
##FMT= $HEX40.

NOTE: The file NUL is:
      File Name=,
      RECFM=V,LRECL=256

NOTE: 1360000 records were written to the file NUL.
      The minimum record length was 160.
      The maximum record length was 240.
NOTE: DATA statement used (Total process time):
      real time           27.31 seconds
      cpu time            23.04 seconds

182  %puttst($UPCASE&charsz..);
##FMT= $UPCASE20.

NOTE: The file NUL is:
      File Name=,
      RECFM=V,LRECL=256

NOTE: 720000 records were written to the file NUL.
      The minimum record length was 80.
      The maximum record length was 240.
NOTE: DATA statement used (Total process time):
      real time           14.46 seconds
      cpu time            14.37 seconds

183
184  %puttst2($);
##FMTABS= $

NOTE: The file NUL is:
      File Name=,
      RECFM=V,LRECL=256

NOTE: 7200000 records were written to the file NUL.
      The minimum record length was 20.
      The maximum record length was 250.
NOTE: DATA statement used (Total process time):
      real time           37.75 seconds
      cpu time            36.69 seconds

185  %puttst2($&charsz..);
##FMTABS= $20.

NOTE: The file NUL is:
      File Name=,
      RECFM=V,LRECL=256

NOTE: 7200000 records were written to the file NUL.
      The minimum record length was 20.
      The maximum record length was 250.
NOTE: DATA statement used (Total process time):
      real time           34.28 seconds
      cpu time            33.61 seconds

186  %puttst2($CHAR&charsz..);
##FMTABS= $CHAR20.

NOTE: The file NUL is:
      File Name=,
      RECFM=V,LRECL=256

NOTE: 7200000 records were written to the file NUL.
      The minimum record length was 20.
      The maximum record length was 250.
NOTE: DATA statement used (Total process time):
      real time           33.36 seconds
      cpu time            32.75 seconds

187  %puttst2($ASCII&charsz..);
##FMTABS= $ASCII20.

NOTE: The file NUL is:
      File Name=,
      RECFM=V,LRECL=256

NOTE: 7200000 records were written to the file NUL.
      The minimum record length was 20.
      The maximum record length was 250.
NOTE: DATA statement used (Total process time):
      real time           37.61 seconds
      cpu time            37.03 seconds

188  %puttst2($HEX%eval(&charsz * 2).);
##FMTABS= $HEX40.

NOTE: The file NUL is:
      File Name=,
      RECFM=V,LRECL=256

NOTE: 7280000 records were written to the file NUL.
      The minimum record length was 40.
      The maximum record length was 249.
NOTE: DATA statement used (Total process time):
      real time           51.86 seconds
      cpu time            51.08 seconds

189  %puttst2($UPCASE&charsz..);
##FMTABS= $UPCASE20.

NOTE: The file NUL is:
      File Name=,
      RECFM=V,LRECL=256

NOTE: 7200000 records were written to the file NUL.
      The minimum record length was 20.
      The maximum record length was 250.
NOTE: DATA statement used (Total process time):
      real time           43.62 seconds
      cpu time            42.93 seconds

190
191  %puttst3($);
##FMTREL= $

NOTE: The file NUL is:
      File Name=,
      RECFM=V,LRECL=256

NOTE: 800000 records were written to the file NUL.
      The minimum record length was 236.
      The maximum record length was 239.
NOTE: DATA statement used (Total process time):
      real time           19.15 seconds
      cpu time            18.82 seconds

192  %puttst3($&charsz..);
##FMTREL= $20.

NOTE: The file NUL is:
      File Name=,
      RECFM=V,LRECL=256

NOTE: 800000 records were written to the file NUL.
      The minimum record length was 20.
      The maximum record length was 253.
NOTE: DATA statement used (Total process time):
      real time           17.75 seconds
      cpu time            17.49 seconds

193  %puttst3($CHAR&charsz..);
##FMTREL= $CHAR20.

NOTE: The file NUL is:
      File Name=,
      RECFM=V,LRECL=256

NOTE: 800000 records were written to the file NUL.
      The minimum record length was 20.
      The maximum record length was 253.
NOTE: DATA statement used (Total process time):
      real time           17.66 seconds
      cpu time            17.39 seconds

194  %puttst3($ASCII&charsz..);
##FMTREL= $ASCII20.

NOTE: The file NUL is:
      File Name=,
      RECFM=V,LRECL=256

NOTE: 800000 records were written to the file NUL.
      The minimum record length was 20.
      The maximum record length was 253.
NOTE: DATA statement used (Total process time):
      real time           20.14 seconds
      cpu time            19.79 seconds

195  %puttst3($HEX%eval(&charsz * 2).);
##FMTREL= $HEX40.

NOTE: The file NUL is:
      File Name=,
      RECFM=V,LRECL=256

NOTE: 1360000 records were written to the file NUL.
      The minimum record length was 212.
      The maximum record length was 255.
NOTE: DATA statement used (Total process time):
      real time           36.32 seconds
      cpu time            35.41 seconds

196  %puttst3($UPCASE&charsz..);
##FMTREL= $UPCASE20.

NOTE: The file NUL is:
      File Name=,
      RECFM=V,LRECL=256

NOTE: 800000 records were written to the file NUL.
      The minimum record length was 20.
      The maximum record length was 253.
NOTE: DATA statement used (Total process time):
      real time           26.28 seconds
      cpu time            25.83 seconds

197
198   /*-- Unarm application --*/
199   %armend(appidvar=app);
200   %armend(appidvar=appabs);
201   %armend(appidvar=apprel);

V9 Arm log:
I,1326895477.699000,1,1.792577,1.592289,DATASTEP;WIN_NT;9.00.00A0D011602,*
G,1326895478.60000,1,1,putc,
I,1326895478.110000,2,2.153096,1.632347,DATASTEP;WIN_NT;9.00.00A0D011602;ABS,*
G,1326895478.200000,2,2,putc,
I,1326895478.240000,3,2.283283,1.632347,DATASTEP;WIN_NT;9.00.00A0D011602;REL,*
G,1326895478.340000,3,3,putc,
G,1326895478.861000,1,4,$,PUTC
S,1326895479.532000,1,4,1,3.434939,1.752520
P,1326895489.166000,1,4,1,12.938604,1.792577,0
G,1326895489.296000,1,5,$20.,PUTC
S,1326895489.657000,1,5,2,13.429310,1.792577
P,1326895496.867000,1,5,2,20.549548,1.822620,0
G,1326895497.7000,1,6,$CHAR20.,PUTC
S,1326895497.368000,1,6,3,21.40254,1.832635
P,1326895504.929000,1,6,3,28.370795,1.832635,0
G,1326895505.59000,1,7,$ASCII20.,PUTC
S,1326895505.419000,1,7,4,28.861500,1.832635
P,1326895514.442000,1,7,4,37.794345,1.862678,0
G,1326895514.602000,1,8,$HEX40.,PUTC
S,1326895514.963000,1,8,5,38.285051,1.862678
P,1326895542.352000,1,8,5,61.378257,1.882707,0
G,1326895542.483000,1,9,$UPCASE20.,PUTC
S,1326895542.843000,1,9,6,61.868963,1.882707
P,1326895557.364000,1,9,6,76.269670,1.912750,0
G,1326895557.494000,2,10,$,PUTC_ABS
S,1326895557.895000,2,10,7,76.730332,1.942793
P,1326895595.779000,2,10,7,113.483180,1.982851,0
G,1326895595.919000,2,11,$20.,PUTC_ABS
S,1326895596.320000,2,11,8,114.3929,1.982851
P,1326895630.699000,2,11,8,147.662328,2.22908,0
G,1326895630.840000,2,12,$CHAR20.,PUTC_ABS
S,1326895631.210000,2,12,9,148.173062,2.22908
P,1326895664.678000,2,12,9,181.265,2.52952,0
G,1326895664.818000,2,13,$ASCII20.,PUTC_ABS
S,1326895665.189000,2,13,10,181.500985,2.62966
P,1326895702.903000,2,13,10,218.614352,2.72980,0
G,1326895703.43000,2,14,$HEX40.,PUTC_ABS
S,1326895703.414000,2,14,11,219.125086,2.72980
P,1326895755.369000,2,14,11,270.268627,2.93009,0
G,1326895755.519000,2,15,$UPCASE20.,PUTC_ABS
S,1326895755.889000,2,15,12,270.779361,2.103024
P,1326895799.642000,2,15,12,313.821252,2.103024,0
G,1326895799.782000,3,16,$,PUTC_REL
S,1326895800.193000,3,16,13,314.331987,2.103024
P,1326895819.441000,3,16,13,333.219145,2.123052,0
G,1326895819.591000,3,17,$20.,PUTC_REL
S,1326895819.951000,3,17,14,333.729880,2.123052
P,1326895837.787000,3,17,14,351.285123,2.143081,0
G,1326895837.927000,3,18,$CHAR20.,PUTC_REL
S,1326895838.288000,3,18,15,351.785843,2.143081
P,1326895856.63000,3,18,15,369.240942,2.163110,0
G,1326895856.204000,3,19,$ASCII20.,PUTC_REL
S,1326895856.564000,3,19,16,369.741662,2.163110
P,1326895876.813000,3,19,16,389.610232,2.183139,0
G,1326895876.953000,3,20,$HEX40.,PUTC_REL
S,1326895877.324000,3,20,17,390.100937,2.193153
P,1326895913.736000,3,20,17,425.571942,2.213182,0
G,1326895913.877000,3,21,$UPCASE20.,PUTC_REL
S,1326895914.227000,3,21,18,426.52633,2.223196
P,1326895940.615000,3,21,18,451.453142,2.253240,0
E,1326895940.855000,1,452.633401,2.253240
E,1326895940.905000,2,452.683473,2.253240
E,1326895940.945000,3,452.713516,2.263254

%ARMCONV

The code below converts the ARM log from Example 4 above: SAS Code:

%armconv(login='u:\arm\putc.log',logout='f:\arm\armlogs\putcV8.log'); run;
Resulting V8 log:
17JAN2002:14:04:37.699 ARM_INIT AppID=1 AppName=DATASTEP;WIN_NT;9.00.00A0D011602 AppUser=*
17JAN2002:14:04:38.600 ARM_GETID AppID=1 ClsID=1 TxName=putc TxDet= 
17JAN2002:14:04:38.110 ARM_INIT AppID=2 AppName=DATASTEP;WIN_NT;9.00.00A0D011602;ABS AppUser=*
17JAN2002:14:04:38.200 ARM_GETID AppID=2 ClsID=2 TxName=putc TxDet= 
17JAN2002:14:04:38.240 ARM_INIT AppID=3 AppName=DATASTEP;WIN_NT;9.00.00A0D011602;REL AppUser=*
17JAN2002:14:04:38.340 ARM_GETID AppID=3 ClsID=3 TxName=putc TxDet= 
17JAN2002:14:04:38.861 ARM_GETID AppID=1 ClsID=4 TxName=$ TxDet=PUTC
17JAN2002:14:04:39.532 ARM_START AppID=1 ClsID=4 TxSHdl=1 TxName=$ TxDet=PUTC
17JAN2002:14:04:49.166 ARM_STOP AppID=1 ClsID=4 TxSHdl=1 TxStat=0 TxElap=0:00:12.939 TxCpu=0:00:01.793
17JAN2002:14:04:49.296 ARM_GETID AppID=1 ClsID=5 TxName=$20. TxDet=PUTC
17JAN2002:14:04:49.657 ARM_START AppID=1 ClsID=5 TxSHdl=2 TxName=$20. TxDet=PUTC
17JAN2002:14:04:56.867 ARM_STOP AppID=1 ClsID=5 TxSHdl=2 TxStat=0 TxElap=0:00:20.550 TxCpu=0:00:01.823
17JAN2002:14:04:57.700 ARM_GETID AppID=1 ClsID=6 TxName=$CHAR20. TxDet=PUTC
17JAN2002:14:04:57.368 ARM_START AppID=1 ClsID=6 TxSHdl=3 TxName=$CHAR20. TxDet=PUTC
17JAN2002:14:05:04.929 ARM_STOP AppID=1 ClsID=6 TxSHdl=3 TxStat=0 TxElap=0:00:28.371 TxCpu=0:00:01.833
17JAN2002:14:05:05.590 ARM_GETID AppID=1 ClsID=7 TxName=$ASCII20. TxDet=PUTC
17JAN2002:14:05:05.419 ARM_START AppID=1 ClsID=7 TxSHdl=4 TxName=$ASCII20. TxDet=PUTC
17JAN2002:14:05:14.442 ARM_STOP AppID=1 ClsID=7 TxSHdl=4 TxStat=0 TxElap=0:00:37.794 TxCpu=0:00:01.863
17JAN2002:14:05:14.602 ARM_GETID AppID=1 ClsID=8 TxName=$HEX40. TxDet=PUTC
17JAN2002:14:05:14.963 ARM_START AppID=1 ClsID=8 TxSHdl=5 TxName=$HEX40. TxDet=PUTC
17JAN2002:14:05:42.352 ARM_STOP AppID=1 ClsID=8 TxSHdl=5 TxStat=0 TxElap=0:01:01.378 TxCpu=0:00:01.883
17JAN2002:14:05:42.483 ARM_GETID AppID=1 ClsID=9 TxName=$UPCASE20. TxDet=PUTC
17JAN2002:14:05:42.843 ARM_START AppID=1 ClsID=9 TxSHdl=6 TxName=$UPCASE20. TxDet=PUTC
17JAN2002:14:05:57.364 ARM_STOP AppID=1 ClsID=9 TxSHdl=6 TxStat=0 TxElap=0:01:16.270 TxCpu=0:00:01.913
17JAN2002:14:05:57.494 ARM_GETID AppID=2 ClsID=10 TxName=$ TxDet=PUTC_ABS
17JAN2002:14:05:57.895 ARM_START AppID=2 ClsID=10 TxSHdl=7 TxName=$ TxDet=PUTC_ABS
17JAN2002:14:06:35.779 ARM_STOP AppID=2 ClsID=10 TxSHdl=7 TxStat=0 TxElap=0:01:53.483 TxCpu=0:00:01.983
17JAN2002:14:06:35.919 ARM_GETID AppID=2 ClsID=11 TxName=$20. TxDet=PUTC_ABS
17JAN2002:14:06:36.320 ARM_START AppID=2 ClsID=11 TxSHdl=8 TxName=$20. TxDet=PUTC_ABS
17JAN2002:14:07:10.699 ARM_STOP AppID=2 ClsID=11 TxSHdl=8 TxStat=0 TxElap=0:02:27.662 TxCpu=0:00:02.229
17JAN2002:14:07:10.840 ARM_GETID AppID=2 ClsID=12 TxName=$CHAR20. TxDet=PUTC_ABS
17JAN2002:14:07:11.210 ARM_START AppID=2 ClsID=12 TxSHdl=9 TxName=$CHAR20. TxDet=PUTC_ABS
17JAN2002:14:07:44.678 ARM_STOP AppID=2 ClsID=12 TxSHdl=9 TxStat=0 TxElap=0:03:01.265 TxCpu=0:00:02.530
17JAN2002:14:07:44.818 ARM_GETID AppID=2 ClsID=13 TxName=$ASCII20. TxDet=PUTC_ABS
17JAN2002:14:07:45.189 ARM_START AppID=2 ClsID=13 TxSHdl=10 TxName=$ASCII20. TxDet=PUTC_ABS
17JAN2002:14:08:22.903 ARM_STOP AppID=2 ClsID=13 TxSHdl=10 TxStat=0 TxElap=0:03:38.614 TxCpu=0:00:02.730
17JAN2002:14:08:23.430 ARM_GETID AppID=2 ClsID=14 TxName=$HEX40. TxDet=PUTC_ABS
17JAN2002:14:08:23.414 ARM_START AppID=2 ClsID=14 TxSHdl=11 TxName=$HEX40. TxDet=PUTC_ABS
17JAN2002:14:09:15.369 ARM_STOP AppID=2 ClsID=14 TxSHdl=11 TxStat=0 TxElap=0:04:30.269 TxCpu=0:00:02.930
17JAN2002:14:09:15.519 ARM_GETID AppID=2 ClsID=15 TxName=$UPCASE20. TxDet=PUTC_ABS
17JAN2002:14:09:15.889 ARM_START AppID=2 ClsID=15 TxSHdl=12 TxName=$UPCASE20. TxDet=PUTC_ABS
17JAN2002:14:09:59.642 ARM_STOP AppID=2 ClsID=15 TxSHdl=12 TxStat=0 TxElap=0:05:13.821 TxCpu=0:00:02.103
17JAN2002:14:09:59.782 ARM_GETID AppID=3 ClsID=16 TxName=$ TxDet=PUTC_REL
17JAN2002:14:10:00.193 ARM_START AppID=3 ClsID=16 TxSHdl=13 TxName=$ TxDet=PUTC_REL
17JAN2002:14:10:19.441 ARM_STOP AppID=3 ClsID=16 TxSHdl=13 TxStat=0 TxElap=0:05:33.219 TxCpu=0:00:02.123
17JAN2002:14:10:19.591 ARM_GETID AppID=3 ClsID=17 TxName=$20. TxDet=PUTC_REL
17JAN2002:14:10:19.951 ARM_START AppID=3 ClsID=17 TxSHdl=14 TxName=$20. TxDet=PUTC_REL
17JAN2002:14:10:37.787 ARM_STOP AppID=3 ClsID=17 TxSHdl=14 TxStat=0 TxElap=0:05:51.285 TxCpu=0:00:02.143
17JAN2002:14:10:37.927 ARM_GETID AppID=3 ClsID=18 TxName=$CHAR20. TxDet=PUTC_REL
17JAN2002:14:10:38.288 ARM_START AppID=3 ClsID=18 TxSHdl=15 TxName=$CHAR20. TxDet=PUTC_REL
17JAN2002:14:10:56.630 ARM_STOP AppID=3 ClsID=18 TxSHdl=15 TxStat=0 TxElap=0:06:09.241 TxCpu=0:00:02.163
17JAN2002:14:10:56.204 ARM_GETID AppID=3 ClsID=19 TxName=$ASCII20. TxDet=PUTC_REL
17JAN2002:14:10:56.564 ARM_START AppID=3 ClsID=19 TxSHdl=16 TxName=$ASCII20. TxDet=PUTC_REL
17JAN2002:14:11:16.813 ARM_STOP AppID=3 ClsID=19 TxSHdl=16 TxStat=0 TxElap=0:06:29.610 TxCpu=0:00:02.183
17JAN2002:14:11:16.953 ARM_GETID AppID=3 ClsID=20 TxName=$HEX40. TxDet=PUTC_REL
17JAN2002:14:11:17.324 ARM_START AppID=3 ClsID=20 TxSHdl=17 TxName=$HEX40. TxDet=PUTC_REL
17JAN2002:14:11:53.736 ARM_STOP AppID=3 ClsID=20 TxSHdl=17 TxStat=0 TxElap=0:07:05.572 TxCpu=0:00:02.213
17JAN2002:14:11:53.877 ARM_GETID AppID=3 ClsID=21 TxName=$UPCASE20. TxDet=PUTC_REL
17JAN2002:14:11:54.227 ARM_START AppID=3 ClsID=21 TxSHdl=18 TxName=$UPCASE20. TxDet=PUTC_REL
17JAN2002:14:12:20.615 ARM_STOP AppID=3 ClsID=21 TxSHdl=18 TxStat=0 TxElap=0:07:31.453 TxCpu=0:00:02.253
17JAN2002:14:12:20.855 ARM_END AppID=1 AppNCls=1 AppNTxSt=18 AppNTxSp=0 AppNTxUp=0 AppNTx0=0 AppNTx1=0 AppNTx2=0 AppElap=0:07:32.633 AppCpu=0:00:02.253 AppAvgRt=0:00:25.146 AppMinTx=27777:46:39.00 AppMaxTx=0:00:00.000
17JAN2002:14:12:20.905 ARM_END AppID=2 AppNCls=1 AppNTxSt=18 AppNTxSp=0 AppNTxUp=0 AppNTx0=0 AppNTx1=0 AppNTx2=0 AppElap=0:07:32.683 AppCpu=0:00:02.253 AppAvgRt=0:00:25.149 AppMinTx=27777:46:39.00 AppMaxTx=0:00:00.000
17JAN2002:14:12:20.945 ARM_END AppID=3 AppNCls=19 AppNTxSt=18 AppNTxSp=18 AppNTxUp=0 AppNTx0=18 AppNTx1=0 AppNTx2=0 AppElap=0:07:32.714 AppCpu=0:00:02.263 AppAvgRt=0:00:25.151 AppMinTx=0:00:12.939 AppMaxTx=0:07:31.453