Newsgroups: bit.listserv.sas-l
Date:         Wed, 22 Jul 1992 11:20:00 EST
Reply-To:     Sally Muller <UNCSM1@UNC.BITNET>
From:         Sally Muller <UNCSM1@UNC.BITNET>
Subject: Re: SAS Benchmarking Programs
Comments: To: "R. Snyder" <rsnyder@lobby.ti.com>

----------------------------------------------------------------------
SUMMARY:  The ultimate benchmarking program?
E-ADDR:   uncsm1@unc.bitnet
NAME:     Sally Muller
PH/ADDR:  919-962-6501  OIT CB#3455, UNC, Chapel Hill NC 27514
----------------------------------------------------------------------
Bob Snyder who heard our local SAS users group was running
benchmarks asked:

> <stuff deleted>
> Here at Texas Instruments in Sherman, TX we are beginning to
> run SAS on a number of different platforms (HP9000/300 and
> HP9000/700 class machines). We are becomming quite interrested
> in comparing performance statistics between the machines and
> under different circumstances. I was wondering if there are any
> "standard" benchmarking programs in SAS that we might be able
> to obtain?
>
> Bob Snyder
> Texas Instruments, Inc.
> PO Box 84, M/S 860
> Sherman, TX 75090

 search of the SAS-L archives uncovered lots of valuable
tuff but we have never really agreed upon a STANDARD SAS
enchmarking program!?!  Attached below are the programs I found
osted on SAS-L, I probably missed some -- please let me know,
nd also the machines on which they were run......WHICH one????
If this sounds like another survey......you're absolutely right.

======================================================================== 44
                  PC SAS 6.02 TESTBASE Benchmark
From:    "Nelson R. Pardee" <SASMAINT@SUVM>
Nelson's (and Gary Katsanis) 1988 SUGI paper, "How Fast is the
SAS system for Personal Computers on Various PC's," is the
definitive work on benchmarking -- paper doesn't just talk about
PCs but minis and mainframes.  Nelson and Gary used the PC SAS
6.02 TESTBASE program as their benchmark. They note that although
TESTBASE was never intended for benchmarking, since it
"excercises many SAS features and PROCs; does alot of I/O; and
the CPU gets a work out" it is a good benchmark program.
Furthermore, "its standardized -- there is no question as to what
it is."  Machines:  Everex, IBM PC/AT, IBM PC/XT, Zenith Z158,
MAC IIX SOFTPC.

From:         bob parks <C27901RP@WUVMD>
Bob too advocated TESTBASE 6.02:
I was wondering what was wrong with the TESTBASE 6.02
benchmark.  It certainly was done on a number of machines  and
although I did not look at the point by point description of
the new proposal, it seemed to satisfy most of the requirements.

From:         Peter Rikard <SSTSPLR@VCUVM1>
 I ran my test SAS programs (TESTBASE that came
 with SAS 6.02, copies on request) and timed the functions from
 start to end. (SAS 6.04, 386sx 16 mhz, 8 meg memory, using
 ramdisk for work files....) Times given are total elapsed time
 measured by SAS.
 <stuff deleted>

Jim Mulherin also used TESTBASE 6.02.
========================================================================
            Evan G. Cooch and Jean Hardy Benchmark

Postings to SAS-L by Paul Marsh, and Evan indicate that Evan and Jean
Hardy developed some kind of benchmark program but I could never find
it!!!!!  Does anyone have it?

Marsh said:
1) I echo the need to include PROC SORT in the benchmark even though
the times generated may not be completely comparable across (or
even within) platforms.
2) Besides test datasets, DATA steps, and PROC steps, the platform
should request all salient system information from the benchmarker.
For instance, on IBM PCs we need to know more that the size of the
hard disk - we also need to know the interleave factor, amount of
disk cache, etc.  My guess is that what factors to include in this
part of the survey will be harder to establish that the test datasets,
etc.
3) (sorry, I thought of another thing).  I participated in the Boston
Computer Society review of PC statpaks a few years ago.  THe first
thing we did was, via e-mail, to try to establish what the 'test
script' should be.  That process took several months but was well
worth it.  The only reason that we could even complete that task
was that we agreed that the test script should only address the
very basics.  If an individual wished to augment the script to
address his/her situation, they could do so.
                                                                         91
From:         "Evan G. Cooch" <COOCHE@QUCDN>

Further on the recent discussions conderning benchmarking SAS.
Jean Hardy and I have been corresponding, and I have sent him a
"rough draft" of the benchmarking program. To spur additional
comments from SAS-L, here is the basic logic we are considering
at present.

First, the data set. A number of individuals have commented that
the data set needs to be sufficiently large to "really test the
system". However, given what we are defining as the minimum
configuration (640K AT-class machine with 10 -> 20 Mb HD), we
couldn't make the data set too large.  The beta-stage data set
has 20,000 records, with three variables per record. This is, in
theory, not too large to be handled by the minimum configuration
noted, but is large enough to test bigger and faster hardware.
There are both string and numeric variables in the data set.

The program was (still is) the matter of some debate. In the
beta-form, it involves:

1. I/O -> reading in the data set.

2. PROC SORT -> EVERYBODY has to sort sooner or later, so including a
                PROC SORT step is, I believe, essential.

3. CPU intensive -> calls to various PROC's were needed to test the
                    number crunching power of SAS. Although there were a few
                    calls for ARIMA, IML, and other 'esoterica', the program
                    uses GLM and REG. Both of these are very commonly used,
                    and should prove sufficient for the purpose (GLM
                    especially).

4. test of SET/MERGE -> two other CPU-intensive operations, also commonly
                        used

5. final I/O -> writing out a derived data set to disk

To reiterate from previous postings, this is not a comprehensive
test of all features of SAS. It is not intended to be. It is to
provide the average end-user with a benchmark that "he/she can
relate to".

Remaining issues.

a) should there be an additional PROC call...something not
   included above, but which will provide important information?
   SASGRAPH?

b) should we specifically include a PROC that is in BASE SAS, as
   well as one from SAS STAT, sicne there are users who will have
   only BASE but not STAT? If so, which PROC (I personally lean
   towards FREQ or TABULATE)?

C) What should be reported? I envision something like...

   HARDWARE: memory
             CPU & clock
             co-processor (y/n)
             size of HD with avg. access time and controller type
             RAM/HD cache (y/n, and size)
             hardware model (Compaq, Everex, IBM 3081, HP 9000...)


   PERFORMANCE: number of CPU seconds required for each MAJOR step of
                program (SORT, GLM, MERGE, OUTPUT...), plus total time
                from invocation of SAS to final output of results.
========================================================================
              Don MacQueen Benchmark

From:         Don MacQueen <macq@MIGUEL.LLNL.GOV>

Don created this benchmark program and offered to summarize the
results for SAS-L.  He got a good response......
program:

OPTIONS FULLSTATS;
FILENAME DATF '&&TEMP' LRECL=80 BLKSIZE=9040 RECFM=FB DISP=NEW;
DATA _NULL_;
FILE DATF;
DO A='C', 'B', 'A';
DO X=1 TO 1000;
Y=4+3*RANNOR(0);
PUT A X Y;
END;
END;
RUN;

DATA T1;
INFILE DATF;
LENGTH A $ 1;
INPUT A X Y;
X2=X*X;
IA=0; IB=0; IC=0;
SELECT(A);
WHEN('A') IA=1;
WHEN('B') IB=1;
WHEN('C') IC=1;
OTHERWISE;
END;
PROC SORT DATA=T1;
BY A;
PROC MEANS; BY A;
VAR X Y;
PROC FREQ;
TABLES A;
PROC REG;
MODEL Y=X;
MODEL Y=IA IB IC X X2 /NOINT;
RUN;

From:    Phil Bardsley                               <UPHILB>

Don -
I'm doing some other benchmarks on our IBM 3090, so I decided to
add to your list with a comparison of 5.18, 6.06, and 6.07 (beta).
<stuff deleted>

From:         Dirk Rober <FDAAA12@BLEKUL11>

 I have run the benchmarks on an IBM PS/2 Model 95 -25Mhz under
OS/2 v1.3.  The results are significant better than the old OS/2
results which were run on a 33Mhz 386.

From:         Paul Molin <PMOLIN@FRCCUB11>

This idea of SAS benchmarks is very interesting for us, since we are
investigating in this moment for a change of our computer. here is
my contribution:
<stuff deleted>
Using the option VIOBUF=512k in order to put the work sas dataset
in memory.

Machines:                                                               Reg
** PC's **
IBM 9377/90 16MB ram
IBM Model 95 25Mhz 12MB RAM                                             4.09
   512K SCSI DISK CACHE,
   1024K HPFS LAZY CACHE
   320MB Disk
   SAS 6.06.03, OS/2 EE v1.3
   Command line

IBM Model 95 25Mhz 12MB RAM                                             4.87
   512K SCSI DISK CACHE,
   1024K HPFS LAZY CACHE
   320MB Disk
   SAS 6.06.03, OS/2 EE v1.3
   Presentation Manager

Dell 310, 386/387, 16MB RAM 9 32 K RAM CACHE, EMS, 512K DISK CACHE,
8MB RAMDISK, 80MB Disk SAS 6.03, DOS 3.3
Northgate 386DX/20MHz, 387, 4MB, DOS 4.01, SAS 6.04 80MB SCSI Disk, No
EMS No Cache, No RAMDISK 1.4MB Cache, No RAMDISK Cache, 2 MB RAMDISK
Northgate 386SX/20MHz, 387SX, 40MB IDE Disk, 2MB RAM, SAS6.04, No EMS
No Cache (Average of 2 runs) 	 With 1.4MB Cache
IBM PS/2 Mod 70, 386/16, 11 60MB 28msec Disk, 1MB cache, 3 MB RAMDISK
AST 386/387 33MHz, 12MB RAM, 6.62 OS/2, HPFS file system, SAS 6.06

** WORKSTATIONS **

RS6000, 16MB RAM, AIX, SAS 6.07 (Beta)
SUN4C/65 Sparcstation 1+ Color OS 4.1, 16MB RAM, SAS 6.03, Sunview
Sparcstation SLC, 16MB, SAS 6.03, Sunview Deskset Shelltool
Sparcstation SLC, 16MB, 2 SAS 6.03, Run from command line
Sun Sparcstation IPC, 2 24MB RAM, 667MB Disk, 17ms, SunOS 4.1,
OpenWindows 2.0, SAS 6.03
The above IPC, SAS 6.07 beta

** VAXes **

VAX 6510  6.06                                                          1.03
VAX 6420, SAS 6.06
VAX 6460, SAS 6.06

** Mainframes **
IBM 3090 - MVS/ESA - 5.18                                               .15
IBM 3090 - MVS/ESA - 6.06                                               .18
IBM 3090 - MVS/ESA - 6.07(beta)                                         .10

HDS AS/EX-80 - MVS/ESA SAS5.18
IBM 3090 - SAS 5.18  VPS
(OS based on MVS)

---------------------------------------------------------
                   Miscellaneous Benchs....

From: Doug Bates
Floating point benchmark which is the singular value decomposition
of an n by n orthogonal matrix.  It's the same as the benchmark I
described in S earlier (i.e. time(svd(qr.qy(qr(1:n),diag(n)))))
machines:  SparcStation 1+ (8 Mb) Decstation 3100 (8 MB) NextCube
('040, 12 Mb), Decstation 5000 model 200 (16 Mb), IBM RISC 600/320,
IMB RISC 6000/530, HP 720 (16 MB).

From: Tim Dorcey
Tim sent a very simple benchmark and then sent an improved version
which I remember but can't find....if anyone has it would most
appreciate.....

DATA _NULL_;
  RETAIN SUM 0;
  INFILE IN;
  INPUT X 8.;
  SUM = SUM + X;

machines: IBM 4381, IBM 3090-200, IBM 3090-600, IBM 3090-600J.

From: Melvin Klassen
Melvin offered results but doesn't describe benchmark program?
machines: IBM 3090-150S, with vector facility.

From:    "Judy Hallman"                              <HALLMAN>
Here are a couple of ideas for timing runs (CPU HOGS).
There are three jobs.  One Fortran job has heavy calculations.
The other moves around over a big array.
     <stuff deleted>
Basically Judy suggests finding a *VERY* large text file and
then:
//   EXEC SAS
//SYSIN DD *
DATA TEXT;
  LENGTH WORD $ 30;
  INFILE IN;
  INPUT WORD;
PROC FREQ;
  TABLES WORD;

From:   IN%"C1921E@UMSLVMA.BITNET"  "David Nasser" 18-OCT-1990 16:38:03.38
 The following is a summary of brief tests of SAS dataset access
 performed on an MVS/XA system.  The access consisted of a simple
 extraction of three observations from a SAS dataset with 1080
 observations and 1171 variables (subsetting "IF" statement for
 sequential access, simple "WHERE" statement for indexed access).
   <stuff deleted>

From:         andrew parks <OPK@NIHCU>
  Here's what I did.  I generated a bunch of random number
  variables for a bunch of observations: 55 variables over 4000
  observations.  Then I ran a little program that subsetted the
  data by observation as well as by variable, then performed
  ordinary least squares, using one variable as the dependent
  variable, and the rest, however many that is depending on the
  size of the data set, as independent variables.  I ran this for
  the several combinations of number of observations and number
  of variables.
  <stuff deleted>

From: Jeff Zax <zax@zax.Colorado.EDU>
This benchmark program generates its own data.  It ran 19 times
faster on the Sparcstation than on a Gateway 386-25 PC. This
program is very demanding in terms of CPU and disk space.  I
think it can be run without modification in both UNIX and DOS
because it doesn't refer to any external permanent files. It does
need some disk space, though, as it generates large temporary
data sets.

This is the SAS program:

* COMPARES PRE- AND POST-ERISA PENSIONS FOR RETIREES, NO WORKER HOLDINGS
* OPTIONS OBS=0;
  DATA A;

* INITIALIZE NECESSARY CONSTANTS;

ETA=.02; * ETA=.05; * ETA=.01;
STEPS=5; * STEPS=2;
MINALPHA=.001; MAXALPHA=.005; ALPHSTEP=.001; * ALPHSTEP=.004;
MINSIG=.02; MAXSIG=.06; SIGSTEP=.01; * SIGSTEP=.04;
MINSIGW=500; MAXSIGW=900; SIGWSTEP=100; * SIGWSTEP=400;
ALPHAW=3500;
RATE=.002;
RETIRE=240;
DEATH=120;
DISCOUNT=.002;
ETARATE=ETA*RATE;
ETARATSQ=ETARATE**2;
PHIOFTAU=RATE*LOG(ETARATE*.00005); * + FUNCTION OF BEQUEST INTENTIONS;
THETA1=EXP(-RETIRE*RATE);
THETA2=EXP(-DEATH*RATE);
THETA1M1=1-THETA1;
THETA3=EXP(RETIRE*RATE)-1;
THETA4=1-THETA2;

* ESTABLISH LOOPS;

DO ALPHA1=MINALPHA TO MAXALPHA BY ALPHSTEP;
  ALPH1=ALPHA1/ETARATE;
  DO ALPHA2=MINALPHA TO MAXALPHA BY ALPHSTEP;
    ALPH2=ALPHA2/ETARATE;
    DO SIGMA1=MINSIG TO MAXSIG BY SIGSTEP;
      SIGMA1SQ=SIGMA1**2; CV1=SIGMA1/ALPHA1;
      DO SIGMA2=MINSIG TO MAXSIG BY SIGSTEP;
        SIGMA2SQ=SIGMA2**2; CV2=SIGMA2/ALPHA2;
        SIG12MAX=(2/3)*SIGMA1*SIGMA2; SIG12INC=.5*SIG12MAX;
        DO SIGMA12=0, -SIG12INC TO -SIG12MAX BY -SIG12INC,
                       SIG12INC TO  SIG12MAX BY  SIG12INC;
          RHO12=SIGMA12/(SIGMA1*SIGMA2); SIG12SQ=SIGMA12**2;

          DET=1/(SIGMA1SQ*SIGMA2SQ-SIG12SQ);
          XER1=DET * (SIGMA2SQ*ALPH1-SIGMA12*ALPH2);
          XER2=DET * (SIGMA1SQ*ALPH2-SIGMA12*ALPH1);
          XPE1=ALPH1/SIGMA1SQ;
          XPE2=ALPH2/SIGMA2SQ;
*         IF XP1<0 | XP2<0 THEN GO TO NEXT;

          CV1=SIGMA1/ALPHA1;
          CV2=SIGMA2/ALPHA2;
          ZAX1 = -(RHO12**2) * (((1/CV1-1/CV2)**2)/(1-RHO12)
                + 2/(CV1*CV2))/(2*(1+RHO12));

          DO SIGMAW=MINSIGW TO MAXSIGW BY SIGWSTEP;
            SIGMAWSQ=SIGMAW**2; CVW=SIGMAW/ALPHAW;
            A = -ETARATE*ALPHAW + .5*ETARATSQ*SIGMAWSQ;
            SIG1WMAX=(2/3)*SIGMA1*SIGMAW; SIG1WINC=.5*SIG1WMAX;
            SIG2WMAX=(2/3)*SIGMA2*SIGMAW; SIG2WINC=.5*SIG2WMAX;
            DO SIGMA1W=0, -SIG1WINC TO -SIG1WMAX BY -SIG1WINC,
                           SIG1WINC TO  SIG1WMAX BY  SIG1WINC;
*           DO SIGMA1W=SIG1WINC TO SIG1WMAX BY SIG1WINC;
              RHO1W=SIGMA1W/(SIGMA1*SIGMAW);
              DO SIGMA2W=0, -SIG2WINC TO -SIG2WMAX BY -SIG2WINC,
                             SIG2WINC TO  SIG2WMAX BY  SIG2WINC;
*             DO SIGMA2W=SIG2WINC TO SIG2WMAX BY SIG2WINC;
                RHO2W=SIGMA2W/(SIGMA2*SIGMAW);
                ZAX2 = (RHO1W*RHO12-RHO2W)/CV1 + (RHO2W*RHO12-RHO1W)/CV2;
                ZAX2 = ZAX2*RHO12/(1-RHO12**2);
                ZAX2 = ETARATE*SIGMAW*ZAX2;

                ARRAY EQVAR1 (I) EQVAR11-EQVAR14;
                ARRAY EQVAR2 (I) EQVAR21-EQVAR24;
                ARRAY EQVAR3 (I) EQVAR31-EQVAR34;
                DO RETIRE=240 TO 60 BY -60;
*               DO RETIRE=50 TO 20 BY -10;
*               DO RETIRE=16 TO 4 BY -4;
*               DO RETIRE=4 TO 1 BY -1;
                  THETA3=EXP(RETIRE*RATE)-1;
                  PHI1 = ZAX1*(THETA3+THETA4);
                  PHI2 = THETA3*ZAX2;
                  I=5-RETIRE/60;
*                 I=5-(RETIRE-10)/10;
*                 I=5-RETIRE/4;
*                 I=5-RETIRE;
                  SCALE=ETARATE*THETA3*ALPHAW;
                  EQVAR1=-FUZZ(PHI1+PHI2)/SCALE;
                  END;

                DO OVER EQVAR1;
                  IF EQVAR1<-.45 THEN EQVAR2=-.5;
                  ELSE IF EQVAR1<-.40 THEN EQVAR2=-.45;
                  ELSE IF EQVAR1<-.35 THEN EQVAR2=-.40;
                  ELSE IF EQVAR1<-.30 THEN EQVAR2=-.35;
                  ELSE IF EQVAR1<-.25 THEN EQVAR2=-.30;
                  ELSE IF EQVAR1<-.20 THEN EQVAR2=-.25;
                  ELSE IF EQVAR1<-.15 THEN EQVAR2=-.20;
                  ELSE IF EQVAR1<-.10 THEN EQVAR2=-.15;
                  ELSE IF EQVAR1<-.05 THEN EQVAR2=-.10;
                  ELSE IF EQVAR1<-.0  THEN EQVAR2=-.05;
                  ELSE IF EQVAR1=.0  THEN EQVAR2=.0;
                  ELSE IF EQVAR1<=.05 THEN EQVAR2=.05;
                  ELSE IF EQVAR1<=.10 THEN EQVAR2=.10;
                  ELSE IF EQVAR1<=.15 THEN EQVAR2=.15;
                  ELSE IF EQVAR1<=.20 THEN EQVAR2=.20;
                  ELSE IF EQVAR1<=.25 THEN EQVAR2=.25;
                  ELSE IF EQVAR1<=.30 THEN EQVAR2=.30;
                  ELSE IF EQVAR1<=.35 THEN EQVAR2=.35;
                  ELSE IF EQVAR1<=.40 THEN EQVAR2=.40;
                  ELSE IF EQVAR1<=.45 THEN EQVAR2=.45;
                  ELSE EQVAR2=.50;
                  IF EQVAR1<0 THEN EQVAR3=0;
                  ELSE IF EQVAR1=0 THEN EQVAR3=1;
                  ELSE EQVAR3=2;
                  END;
                  INDEX=EQVAR31+EQVAR32*3+EQVAR33*9+EQVAR34*27;

                KEEP ALPHA1 ALPHA2 SIGMA1 SIGMA2 RHO12 SIGMAW RHO1W RHO2W
                     CV1 CV2 XER1 XER2 XPE1 XPE2
                     EQVAR11-EQVAR14 EQVAR21-EQVAR24 INDEX;

                OUTPUT;

                END; * SIGMA2W LOOP;
              END; * SIGMA1W LOOP;
            END; * SIGMAW LOOP;
*   NEXT; END; * SIGMA12 LOOP;
        END; * SIGMA2 LOOP;
      END; * SIGMA1 LOOP;
    END; * ALPH2 LOOP;
  END; * ALPH1 LOOP;
run;
PROC MEANS;
run;
PROC UNIVARIATE; VAR EQVAR11-EQVAR14 XER1 XER2 XPE1 XPE2;
run;
PROC FREQ;
  TABLES ALPHA1 ALPHA2 SIGMA1 SIGMA2 SIGMAW RHO12 RHO1W RHO2W
  EQVAR21-EQVAR24 INDEX;
run;
PROC TABULATE;
  CLASS EQVAR21;
  VAR ALPHA1 ALPHA2 SIGMA1 SIGMA2 SIGMAW RHO12 RHO1W RHO2W CV1 CV2
      XER1 XER2 XPE1 XPE2 EQVAR11;
  TABLE
     (ALPHA1 ALPHA2 SIGMA1 SIGMA2 SIGMAW RHO12 RHO1W RHO2W CV1 CV2
      XER1 XER2 XPE1 XPE2 EQVAR11),
      EQVAR21*(MEAN*F=15.6);
run;
PROC TABULATE;
  CLASS EQVAR22;
  VAR ALPHA1 ALPHA2 SIGMA1 SIGMA2 SIGMAW RHO12 RHO1W RHO2W CV1 CV2
      XER1 XER2 XPE1 XPE2 EQVAR12;
  TABLE
     (ALPHA1 ALPHA2 SIGMA1 SIGMA2 SIGMAW RHO12 RHO1W RHO2W CV1 CV2
      XER1 XER2 XPE1 XPE2 EQVAR12),
      EQVAR22*(MEAN*F=15.6);
run;
PROC TABULATE;
  CLASS EQVAR23;
  VAR ALPHA1 ALPHA2 SIGMA1 SIGMA2 SIGMAW RHO12 RHO1W RHO2W CV1 CV2
      XER1 XER2 XPE1 XPE2 EQVAR13;
  TABLE
     (ALPHA1 ALPHA2 SIGMA1 SIGMA2 SIGMAW RHO12 RHO1W RHO2W CV1 CV2
      XER1 XER2 XPE1 XPE2 EQVAR13),
      EQVAR23*(MEAN*F=15.6);
run;
PROC TABULATE;
  CLASS EQVAR24;
  VAR ALPHA1 ALPHA2 SIGMA1 SIGMA2 SIGMAW RHO12 RHO1W RHO2W CV1 CV2
      XER1 XER2 XPE1 XPE2 EQVAR14;
  TABLE
     (ALPHA1 ALPHA2 SIGMA1 SIGMA2 SIGMAW RHO12 RHO1W RHO2W CV1 CV2
      XER1 XER2 XPE1 XPE2 EQVAR14),
      EQVAR24*(MEAN*F=15.6);
run;


From:    Mike Thorn
Subject: Burroughs Wellcome Benchmarks

 These are programs developed by the MISSING LINKS Quality Circle at
 Burroughs Wellcome Co. They are benchmark testing programs to be
 run on different platforms in order to judge how effectively SAS runs
 on the respective platforms.

 Following is a list of the programs with a brief descrpition of what
 the program does, what SAS PROCs it mainly uses, and whether the
 program makes any external calls.

 -----------------------------------------------------------------------

 STATISTICAL ANALYSIS &    These programs basically manipulate and
 DATA MANIPULATION         analyze data. All use data created within
                           the program.  Some call external macros.

 Program: BENCH1   SAS     This program is a Monte Carlo simulation
                           which calculates sample size/power for
                           a CMH rank correlation statistic. The program
                           uses PROCs FREQ and PRINTTO.  There are no
                           external calls & data is created internally.

 Program: BENCH2   SAS     This program uses PROC GLM on a large
                           randomly generated data set. The data is
                           created internally.

 Program: BENCH3   SAS     This program tests data manipulation by
                           internally creating a large data set and
                           using several PROC SORTs, COMPAREs, and
                           MERGEs.

 Program: BENCHCI  SAS     This program tests treatment differences
                           in two test instruments.  Data is created
                           internally and one macro call is used.  The
                           macro (RANKSUM) generates confidence
                           intervals.  SAS PROCs used include: RANK,
                           SUMMARY, UNIVARIATE, TRANSPOSE, and DELETE.

 Program: TIME1    SAS     This program produces separate statistical
                           summaries with varying numbers of records.
                           Data is generated internally and one external
                           macro call is used.  The macro (EXSTAT)
                           produces summary statistics.  SAS PROCs used
                           include: TRANSPOSE, SORT, FREQ, FORMAT,
                           UNIVARIATE, and COMTENTS.

 Program: TIME2    SAS     This program produces a statistical summary
                           using internally generated data and one
                           macro call. The macro (FREQTAB) produces
                           frequencies.  The output is printed by
                           PROC PRINT.  SAS PROCs used include: PRINTTO,
                           SORT, FREQ, and TRANSPOSE.

 -----------------------------------------------------------------------

 GRAPHICS   Note that all these programs have been taken from the SAS
            Version 6 Sample Library.  All but one use data created
            within the program.

 Program: BENCHG1  SAS     This program uses SAS PROCs GCHART, GSLIDE,
                           and GREPLAY to produce a graphic with four
                           figures on one page. It uses internal data.

 Program: BENCHG2  SAS     This program uses SAS PROCs G3D and G3GRID
                           to produce a 3-diminsional graphic. It uses
                           internal data.

 Program: BENCHG3  SAS     This program uses the SAS PROC GMAP to
                           produce a US map graphic.  It uses the
                           MAPS.US data set provided in the SAS GRAPH
                           Data Library.

 Program: BENCHG4  SAS     This program uses the SAS PROC GPLOT to
                           produce a plot of temperature versus
                           time in three cities.  It uses internal
                           data.
Comments: Gated by NETNEWS@AUVM.AMERICAN.EDU