ABSTRACT. This paper will focus on two of these pieces: ODS (Output Delivery System) SASlIntrNet

Similar documents
TAKING ADVANTAGE OF THE SAS SYSTEM ON THE OS/390 PLATFORM. David Crow, SAS Institute Inc., Cary, NC

The GSLIDE Procedure. Overview. About Text Slides CHAPTER 27

Using SAS/GRAPH Software to Create Graphs on the Web Himesh Patel, SAS Institute Inc., Cary, NC Revised by David Caira, SAS Institute Inc.

Taking advantage of the SAS System on OS/390

The GANNO Procedure. Overview CHAPTER 12

OS/390 DASD I/O Drill Down Computer Performance Chart Using ODS SAS/GRAPH & MXG Software

Enterprise Client Software for the Windows Platform

Creating Population Tree Charts (Using SAS/GRAPH Software) Robert E. Allison, Jr. and Dr. Moon W. Suh College of Textiles, N. C.

ABSTRACT MORE THAN SYNTAX ORGANIZE YOUR WORK THE SAS ENTERPRISE GUIDE PROJECT. Paper 50-30

The GIMPORT Procedure

HTML for the SAS Programmer

ABC s of Graphs in Version 8 Caroline Bahler, Meridian Software, Inc.

Paper ###-YYYY. SAS Enterprise Guide: A Revolutionary Tool! Jennifer First, Systems Seminar Consultants, Madison, WI

The GREMOVE Procedure

Fly over, drill down, and explore

External Files. Definition CHAPTER 38

The G3GRID Procedure. Overview CHAPTER 30

Submitting Code in the Background Using SAS Studio

I KNOW HOW TO PROGRAM IN SAS HOW DO I NAVIGATE SAS ENTERPRISE GUIDE?

CREATING DRILL-DOWN GRAPHS USING SAS/GRAPH AND THE OUTPUT DELIVERY SYSTEM Curtis A. Smith, Defense Contract Audit Agency, La Mirada, CA.

The Evolution of a SAS/GRAPH Application Jenine Eason, AutoTrader.com, Atlanta, GA

SAS Solutions for the Web: Static and Dynamic Alternatives Matthew Grover, S-Street Consulting, Inc.

What s New in SAS Studio?

Alternative ODS HTML Statements for Running Examples in Different Operating Environments

Getting Up to Speed with PROC REPORT Kimberly LeBouton, K.J.L. Computing, Rossmoor, CA

The Domino Designer QuickStart Tutorial

Using Cross-Environment Data Access (CEDA)

Paper AD12 Using the ODS EXCEL Destination with SAS University Edition to Send Graphs to Excel

Square Peg, Square Hole Getting Tables to Fit on Slides in the ODS Destination for PowerPoint

Simple But Useful Tools for Interactive WWW Development

Experiences with SAS software and the Internet at Volvo Data.

A Dynamic Imagemap Generator Carol Martell, Highway Safety Research Center, Chapel Hill, NC

Using Graph-N-Go With ODS to Easily Present Your Data and Web-Enable Your Graphs Curtis A. Smith, Defense Contract Audit Agency, La Mirada, CA

Purpose: This chapter demonstrates how to create pie charts, and discusses some of the issues to consider when deciding whether to use a pie chart.

Creating Regional Maps with Drill-Down Capabilities Deb Cassidy Cardinal Distribution, Dublin, OH

Version 6 and Version 7: A Peaceful Co-Existence Steve Beatrous and James Holman, SAS Institute Inc., Cary, NC

Internet/Intranet, the Web & SAS

Making Presentations More Fun with DATA Step Graphics Interface (DSGI) Hui-Ping Chen, Eli Lilly and Company, Indianapolis, Indiana

SAS Data Integration Studio 3.3. User s Guide

Tips to Customize SAS/GRAPH... for Reluctant Beginners et al. Claudine Lougee, Dualenic, LLC, Glen Allen, VA

Part 1. Introduction. Chapter 1 Why Use ODS? 3. Chapter 2 ODS Basics 13

Part 1. Getting Started. Chapter 1 Creating a Simple Report 3. Chapter 2 PROC REPORT: An Introduction 13. Chapter 3 Creating Breaks 57

SAS ENTERPRISE GUIDE USER INTERFACE

Storing and Reusing Macros

Remodeling Your Office A New Look for the SAS Add-In for Microsoft Office

SOFTWARE AND HARDWARE REQUIREMENTS In order to use Design-time Controls, you must meet the following software and hardware requirements.

ODS Meets SAS/IntrNet

Exsys RuleBook Selector Tutorial. Copyright 2004 EXSYS Inc. All right reserved. Printed in the United States of America.

Using X-Particles with Team Render

Alan Davies. Scorpio Software Services Pty Ltd

APPENDIX 2 Customizing SAS/ASSIST Software

Earthwork 3D for Dummies Doing a digitized dirt takeoff calculation the swift and easy way

While You Were Sleeping - Scheduling SAS Jobs to Run Automatically Faron Kincheloe, Baylor University, Waco, TX

How Managers and Executives Can Leverage SAS Enterprise Guide

Use SAS/AF, SCL and MACRO to Build User-friendly Applications on UNIX

New SAS V8 Tricks for Old SAS V6 Dogs: Tips from the Command Line Louise Hadden, Abt Associates Inc., Cambridge, MA

Paper William E Benjamin Jr, Owl Computer Consultancy, LLC

SAS BI Dashboard 3.1. User s Guide Second Edition

Creating and Executing Stored Compiled DATA Step Programs

Building Web Applications with SAS AppDev Studio TM 3.0

Using SAS/GRAPH Software to Create Graphs on The Web Himesh Patel, SAS Institute Inc., Cary, NC

Multiple Graphical and Tabular Reports on One Page, Multiple Ways to Do It Niraj J Pandya, CT, USA

Step through Your DATA Step: Introducing the DATA Step Debugger in SAS Enterprise Guide

SAS/Warehouse Administrator Usage and Enhancements Terry Lewis, SAS Institute Inc., Cary, NC

Best Practice for Creation and Maintenance of a SAS Infrastructure

Client Side JavaScript and AJAX

A Guided Tour Through the SAS Windowing Environment Casey Cantrell, Clarion Consulting, Los Angeles, CA

Batch vs. Interactive: Why You Need Both Janet E. Stuelpner. ASG. Inc Cary. North Carolina

BI-09 Using Enterprise Guide Effectively Tom Miron, Systems Seminar Consultants, Madison, WI

A SAS Macro to Generate Caterpillar Plots. Guochen Song, i3 Statprobe, Cary, NC

COPYRIGHTED MATERIAL. Getting Started with Google Analytics. P a r t

A Generalized Macro-Based Data Reporting System to Produce Both HTML and Text Files

Splitting Axis Text. Splitting Text in Axis Tick Mark Values

Beginning Tutorials. A Beginner's Guide to Incorporating SAS Output in Microsoft Office Applications Vincent DelGobbo, SAS Institute Inc.

CSCU9B2 Practical 1: Introduction to HTML 5

SAS Studio: A New Way to Program in SAS

Part 1 Simple Arithmetic

TS-659: Exporting SAS/GRAPH Output to PDF Files from Release 8.2 and higher

WHAT IS THE CONFIGURATION TROUBLESHOOTER?

INTRODUCTION TO THE SAS ANNOTATE FACILITY

Knit Perl and SAS Software for DIY Web Applications

Using Data Transfer Services

Figure 1. Paper Ring Charts. David Corliss, Marketing Associates, Bloomfield Hills, MI

Using MACRO and SAS/GRAPH to Efficiently Assess Distributions. Paul Walker, Capital One

Creating Dynamic Web-based Reporting Dana Rafiee, Destiny Corporation, Wethersfield, CT

Lesson 3 Transcript: Part 1 of 2 - Tools & Scripting

BEGINNER PHP Table of Contents

Chapter 1 Introduction

GSLIS Technology Orientation Requirement (TOR)

Chapter 1 Introduction. Chapter Contents

SAS Web Report Studio 3.1

SAS/ASSIST Software Setup

EVENT-DRIVEN PROGRAMMING

A Quick Guide To SSI. By Andrew J. Williams. ez SEO Newsletter Up-to-date information on Affiliate Marketing and Search Engine Optimization

Chapter 7: The Internet

Paper CC16. William E Benjamin Jr, Owl Computer Consultancy LLC, Phoenix, AZ

Introduction to JavaScript and the Web

Class #7 Guidebook Page Expansion. By Ryan Stevenson

Campaign Walkthrough

ODS For Dummies. Creation of Output

Transcription:

LEVERAGING YOUR MAINFRAME INVESTMENT: WEB Enable your Mainframe Applications using New Features of Versions 7 and 8. Kevin Bestelmeyer, David Crow, and Denise Poll, SAS Institute Inc., Cary, NC ABSTRACT The Web is here. Mainframe applications that were designed as batch applications, or for display on 3270 terminals may seem a long way from being Web enabled, but in many cases, a smail effort can pay huge dividends in both the appearance and the utility of these mission-critical applications. This paper looks at some ways to use new features of SAS Versions 7 and 8 to achieve this goal. INTRODUCTION The PC arrived, and close behind was the Web. When Internet obsession becomes a frequent topic in Ann Landers, you know the world has changed! But what can you do if you have mainframe applications that were invented before the Internet? The answer, surprisingly, is quite a lot. Unlike pure client/server architecture, where it was difficult for mainframe systems to participate, OS/390 is tailor-made for Web based applications: OS/390's role in life is to handle large volumes of requests with 24x7 reliability. The applications are already there, all we have to do is hook them up. The Nashville project (SAS Versions 7 and 8) aims to do just that. The software products webeistm, webaffm, Enterprise Guide, SASlIntrNef rm, and the Output Delivery System (ODS) are all components of the Nashville project that are aimed at providing web access to SAS applications. This paper will focus on two of these pieces: ODS (Output Delivery System) SASlIntrNet ODS provides powerful facilities to tailor the output of standard SAS procs and render it into any of several formats. When coupled with ordinary batch jobs, it makes Web publishing using static HTML a snap. Version 8 can also be used to produce GIF, JPEG, Postscript and PCL output. Example 1, discussed below, shows the use ofhfml and GIF, including HfML links from a GIF graph into PROC REPORT output. However, you don't always know in advance what reports a user or customer needs to see, and a static Web page just won't do the job. Sometimes you need to create Web pages on the fly to satisfy a request. To distinguish this from static Web pages, we call this dynamic Web processing. In dynamic processing, a person at a Web browser selects processing options from various choices that are presented on a Web page. This is sent to a host server where a program produces a customized report, which is then returned to the browser for display. Example 2, discussed below, shows an example of how the SASlIntrNet software product can couple a fairly ordinary looking SAS program with a Web browser to produce some dramatic results. 15

EXAMPLE 1: STATIC WEB PAGES PRODUCED BY ODS. Take a little time to skim through Example 1 in Appendix A, and review the notes. Then once you've read this section, you should be ready to go through it in great detail. The example is fairly long, but that allows us to demonstrate a non-trivial. example of a Web page. In this example, the output is directed to 3 separate OS1390 HFS files (The 0Sl390 UNIX file system). We could have used a POSE in the classic MVS file system, but we're trying to learn new stuff, HFS is a standard part of OSl390, and it really is easy to work with. The 3 files are: reporcbody_shoesglb.html- a nice looking graph with HTML links into shoesglb_regsales.html shoesglb.gif -- the graph without the links shoesglb_regsales.html- A PROC REPORT output with HTML tags inserted We create these files by adding a few strategically placed statements in an otherwise ordinary looking SAS program. These are highlighted in bold, with a reference to a brief explanation of what each statement does follows the example. But for discussion, look at the statement: ods html path=odsout body: 'reporcbody_shoesglb.html' nogtitle; This tells SAS to produce the output in html format. The path option references a previous filename statement and tells ODS which HFS directory to use. The body option tells what file name to use when the PROC runs and produces output. Finally, nogtitle suppresses titles so the output is a little cleaner. This is all you need to produce SAS output in HTML! Everything else is much the same as you would find in any SAS program. Of course, not every program uses the same PROCs this one uses, but ODS can handle the output from other PROCs in the same way. If you have a Web server that can access HFS files, this is all you need to do to serve up some nice looking pages. If your Web server is running on another platform and cannot access the HFS files, you can move these files to the other platform in any number of ways. The simplest is probably to add an FTP step to the end of your job, or you could use the SAS FTP access method to write it to the other platform directly from SAS. But that's an example for another paper. If you find you need to do this, keep things simple until you figure out the EBCDIC->ASCII translation, and watch out for end-of-line characters. As mentioned above, you could create these output files in the classic MVS file system with a POSE. But please don't try an old-style PDS. A PDS can only have one output member open at a time, and ODS needs to have them all open at once. Unfortunately, there is no good way to detect this error, and you will simply create 3 garbage members if you do it by mistake. One final note on ODS: With Version 6, SAS Institute delivered a set of free Web publishing tools. The ODS developers did their best to make it do everything you can do with those tools, plus a lot more. We think you'll be better off using ODS, but if you put a lot of effort into using the Web publishing tools, don't worry: They will continue to work, and you already have a head start on using the Web with your mainframe applications. EXAMPLE 2: DYNAMIC WEB PROCESSING WITH SAS/lNTRNET. The second example looks more complex at fust blush, but the individual pieces are really simpler. And, like most programming, you can usually find an example that's close to what you need and hack away at it. That's certainly how we created this one. In this example, a person can go to a Web page that provides choices for how a report should be customized. After the options are selected, the Web page sends a URL back to the host. This URL has all the information that the host needs to run an application program and produce output to be displayed at the browser. This is the same kind of URL you see when you use a Web search engine. When the Web server receives this URL from the browser, it calls the SASlIntrNet Application Broker CG!, which in turn passes the request to a SASISHARE server. The server processes the request, creates the customized HTML output, and 16

sends it back to the browser via the Web server. This has a lot of moving parts, but each one is fairly simple. AppendixBl shows the rawhtml that creates the Web page that you would initially see from a browser. Appendix B2 is what it looks like in the browser. To use it, you simply click on the radio buttons to specify how you want the report customized, and then click on DISPLAY to send the URL to your host's Web server. The resulting URL will look something like this: IIsasmvs.mvs.sas.comIBRKR-binlbroker? &sumvar=returns &salesnum=500000' &_service=default &_debug=2 &_PROGRAM=pgmIib.db2demo.sas To break this down, the browser is communicating with a Web server at sasmvs.sas.com that has a CGI broker named BRKR-bin. (Hidden from view here is the fact that the broker is started with some configuration data that describes the TCPIIP socket it is to use to communicate with the SAS/SHARE application server). When the broker receives this URL, it passes it along to the application server. (Again, hidden from view here is the fact that the application server has some configuration data that tells it the name of the MVS PDS that is associated with pgmlib). The application server reads the program from the library, and runs the program using the values in sumvar, salesnum, in its processing. The program produces its output in HTML format, which is then returned to the browser by the Web Server. The db2demo program is shown in appendix B3, and you will see that it is simpler than the program in the first example. That's not surprising because the first program was a general report aimed at a large number of users, and this one is tailored for a specific request. This program also shows the simplicity of accessing DB2 data using SAS. And Version 7 made this even easier because it supports the full range of DB2 names, and accessing DB2 databases no longer requires the use of a view. If the request you are making will require a ton of processing, and take a long time to complete, you may not want to wait around while all this happens. You could use the same kind of processing to submit a batch job. Checking to see when a batch job has fmished is always troublesome, and we all have better things to do. So Version 8 has an experimental email capability. As you might expect, you can send ordinary text to announce completion, or error conditions, but you can also include attachments, such as a graph in GIF format. The experimental label on email is our way of warning you that we are still thinking about exactly how it should work, so when the production release of the email interface comes out, you may have to make changes to get it to work right. So please experiment with it, but think twice before including this in a production job. CONCLUSION The topics covered in this paper are just the beginning of what you can do with the new features in SAS. These examples have barely scratched the surface of what you can do with ODS and SASlIntrNet, and we didn't even mention the other products. We believe we have provided a set of tools that will not only allow you to take advantage of your investment in existing applications, but also to extend these applications and to develop new ones. As developers, we are really looking forward to seeing our customers use these tools for some heavy duty work. 17

APPENDIX A: EXAMPLE 1. This is an example of a SAS program that produces 3 output reports. These reports contain links among them, so that when you are looking at the summary graph, you can link to detailed information. The example is intended to be complex enough to show how a real life application report could be put out on the Web. BOLD text identifies a statement that is key to producing the Web output. Each of these references a note at the end of the example that describes a little more about the statement's purpose.. /* define destination for graphics and HTML output */ filename odsout '/u/mktdem3/public_html'; /*note 1*/ /* stops sending output to GRAPH and OUTPUT windows */ ods listing closej /* note 2 */ /* set the graphics environment */ goptions reset=global gunit=pct colors=(black blue green red) hsize=b.42 in vsize=6.31 in ftitle=zapfb ftext=swiss htitle=4 htext=2.5 device=gif transparency noborderj /*note 3*/ /* add the HTML variable to NEWSHOES */ /* this lets us have links between the web pages */ data newshoesj set sashelp.shoes; where Region in ('Canada' 'Central America/Caribbean' 'South America' 'United States'); length regdrill $40; if Region=' Canada, then /* note 4: */ regdrill=' HREF=" shoesg1 b_regsales. htmlhidx1", ; else if Region='Central America/Caribbean' then regdrill='href="shoesg1b_regsales.htmlhidx2"'j else if Region='South America' then regdrill=' HREF= II shoesg1 b_regsales. html#idx3 II, j else if Region='United States' then regdrill=' HREF=" shoesg1 b_regsales. html#idx4", ; runj /* assign the destination for the ODS graphics output *1 /* and ODS HTML files *1 ods html path=odsout I*note 5*1 body='report_body_shoesg1b.html' nogtitlej 1* define title and footnote for chart */ title1 'Total Sales for the Americas'j footnote1 h=3 j=l 'click on bars' j=r 'REPORT3D '; 1* assign a pattern color for all bars */ 1* this is just ordinary graph stuff here */ 18

pattern color=cyanj 1* define axis characteristics *1 axis1 order=(o to 7000000 by 1000000) minor=(number=1) label=nonej axis2 label=none offset=(4,4) value= ( 'Canada' 'C. Amr./Car. ' 'S. America' 'USA'); /* generate vertical bar chart */ proc gchart data=newshoes; vbar3d Region / discrete width=6 sumvar=sales runj quit; html=regdrill /* note 6 *1 coutline=black cframe=blue maxis=axis2 raxis=axis1 name='shoesg1b '; /* note 7 */ 1* open the HTML destination for the PROC REPORT output */ ods html body='shoesg1b_regsales.html' path=odsout; /* note 8 */ /* sort data set NEWSHOES in order by region */ proc sort data=newshoesj by Region Subsidiary Productj run; quit; /* clear the footnote *1 goptions reset=footnotej /* suppress the default BY-line */ option nobylinej /* print a report of shoe sales for each Region */ title 'Sales Report for #byval(region)'; proc report data=newshoes nowindowsj by Region; column Region Subsidiary Product Sales; define Region / noprint group; define Subsidiary / display group; define Product / display group; define Sales / display sum format=dollar12.j compute after Region; 19

Subsidiary='Total'; endcomp; break after Region / summarize style=rowheader page; run; /* Close the HTML destination and open the listing output */ ods html close; /* note 9 */ ods listing; /* note 10 */ NOTES ON EXAMPLE 1: 1: Set filename odsout to the HFS directory where we ~l write the data sets. 2. Close the listing output so only desired output goes to html. 3: Tell graph you will be producing graphs in OIF format. 4: HREF is a link from one html page to another. The link has the form "name#label", where: Name - is the name of the file you are linking to. Label- is a label where the browser will position 5. Assign the graphics output to the file specified by body, using the directory specified by path. 6. html=regdrill means that the variable regdrill is to be output as an htmllink. 7. The name of the output file. 8. Tells ODS to handle PROC REPORT output, and where to put it. 9. Close the HTML destination. 10. Open the listing output. 20

APPENDIXB1 This is thehtml for the Web page that kicks off the request to SASlIntrNet It almost fits nicely on a n011lull Web browser screen. <IDOCTYPE HTML PUBLIC "-/lw3ci/dtd HTML 3.2 Finall/EN"> <HTML> <HEAD> <TITLE>Display Shoe Sales by Product</TITLE> </HEAD> <BODY BGCOLOR="#FFFFFF" TEXT="#OOOOOOU LINK=OI#OOOOFF" VLINK="#8000080' ALINK="#FFOOOO01> <H1>Display Shoe Sales by Product</H1> <HR> Use this Dispatcher application to display a specified data set in an HTML-formatted table. You can select to display sales information for specified products. <p>make your selections and click on the <b>display Table</b> button.</p> <hr> <b>display Options</b> <p><i>select Sum column and Sales range.</i> </p> <p> <FORM ACTION="/BRKR-bin/broker"> <1-- Change this line for your site --> <TABLE BGCOLOR="#COCOCOOI BORDER CELLPADDING="2"> <TR BGCOLOR="339999"> <B>Select display option:</b> <ITO> <INPUT TYPE=radio NAME="sumvar" VAlUE="sales" CHECKED>Total by Sales <ITO> <ftr> <INPUT TYPE=radio NAME="sumvar" VAlUE=l returns">total by Returns <ITO> </TABLE> </p> <hr> <TABLE BGCOLOR="#COCOCO" BORDER CELLPADDING="2"> <TR BGCOLOR=u339999"> 21

<B>Select Sales range:</b> </TO> <INPUT TVPE=radio NAME="salesnum" VALUE=O CHECKEO>Sales > 0 <ITO> <INPUT TVPE=radio NAME="salesnum u VALUE=50000>Sales > 50000 </TO> <INPUT TYPE=radio NAME=lsalesnum" VALUE=100000 >Sales > 100000 </TO> <INPUT TVPE=radio NAME=lsalesnum" VALUE=500000>Sales > 500000 <ITO> <INPUT TVPE=radio NAME='salesnum" VALUE=1000000>Sales > 1000000 <ITO> </TABLE> </p> <hr> <hr> <b>service and Debug Options</b> <p><i>select the service as defined by your configuration file. This service identifies how the Application Broker communicates with the Application Server. </i></p> Select service: <SELECT NAME='_service"> <OPTION VALUE="default"> Default Service (Socket) <OPTION VALUE= II newsas II > Launch Service <OPTION VALUE="pool_1"> Pool Service </SELECT> <NOBR> Debugging level: <SELECT NAME= '_debug II > <OPTION VALUE="0"> None <OPTION VALUE="2' SELECTED> Show time 22

<OPTION VALUE=118"> Get a hex dump of the output <OPTION VALUE="25S"> Show a connection trace <OPTION VALUE="14"> Just list all services <OPTION VALUE="131"> Show fields, time, SAS Log </SELECT> </NOBR> <HR> <INPUT TYPE="HIDDEN" NAME="_PROGRAM" VALUE=lpgmlib.db2demo.sas"> <INPUT TYPE="SUBMIT" VALUE="Display Table"> </FORM> </BODY> </HTML> 23

APPENDIXB2 This is what the page looks like. Y 00 click on the radio buttons, and then click DISPLAY TABLE: Use this Dispatcher application to display a specified data set in an HTML-fonnatted table. You can select to display sales information for specified products. Make your selections and click on the Display Table button. Display Options Select Sum column and Sales range. Service and Debug Options Select the service as defined by your configuration file. This service identifies how the Application Broker communicates with the Applicationr:S;.;;e..;..rv;.;;e;;,.r.;... Select service: 1~~~I~~:~~:~~ck:t). I Debugging level: 1~~()VI~:lcIs'~Il1e,SASlclgl "=&-" 'W0 J""" '_' DISPLAY TABLE 1 ------,~-.-,'w«.,.'.' 'm ' ','._;mm', ~. ~,,." ' k"«"w o,"m" 24

APPENDIXB3 This is the program that is run after you click on the DISPLAY Button at the bottom of the page in Appendix B2: %global sumvar salesnum; libname db2demo db2 authid=mktdem3 in='database publicl', ods listing close; ods html body=_webout (dynamic) rs=none; data newshoes; set db2demo.shoes2; where Region in ('Canada' 'Central America/Caribbean' 'South America' 'United States'), run; proc sort data=newshoes; by Product; run; title 'Shoe Sales'; proc print data=newshoes; by Product; where (Sales> &salesnum); sum &sumvar; format Sales commalo.; run; ods html close, 25

REFERENCES For more information on these topics, and other stuff from SAS Institute, check out our Web site at IIwww.sas.com and especially check out the link on Web enablement at IIwww.sas.comlweb. ACKNOWLEDGMENTS We gratefully acknowledge the help of John Leveille, Ellen Kunkel, Nancy Wills, and the entire OS/390 Host Development and testing staff. Without their help this paper would not have been possible. AUTHORS Dave Crow SAS Institute Inc. SAS Campus Drive Cary NC, 27513 (919) 677-8000 dave.crow@sas.com Kevin Bestelmeyer SAS Institute Inc. SAS Campus Drive Cary NC, 27513 (919) 677-8000 kebest@wnt.sas.com Denise Poll SAS Institute Inc. SAS Campus Drive Cary NC, 27513 (919) 677-8000 Denise.PolI@sas.com SAS, SAS/SHARE, SASlIntrNet, webaf, webeis, and Enterprise Guide are registered trademarks or trademarks of SAS Institute Inc. in the USA and other countries. indicates USA Registration. Other brand and product names are registered trademarks of their respective companies. 26