Using Macros to Construct Overlaid Contour Plots For Response Surface Optimization

Similar documents
SUGI 29 Posters. Paper A Group Scatter Plot with Clustering Xiaoli Hu, Wyeth Consumer Healthcare., Madison, NJ

Creating Maps in SAS/GRAPH

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

Paper CC01 Sort Your SAS Graphs and Create a Bookmarked PDF Document Using ODS PDF ABSTRACT INTRODUCTION

Teaching statistics and the SAS System

PharmaSUG 2012 Paper CC13

Contents of SAS Programming Techniques

A SAS Macro Utility to Modify and Validate RTF Outputs for Regional Analyses Jagan Mohan Achi, PPD, Austin, TX Joshua N. Winters, PPD, Rochester, NY

A Plot & a Table per Page Times Hundreds in a Single PDF file

Using SAS/SCL to Create Flexible Programs... A Super-Sized Macro Ellen Michaliszyn, College of American Pathologists, Northfield, IL

Top Award and First Place Best Presentation of Data Lan Tran-La. Scios Nova, Inc. BLOOD PRESSURE AND HEART RATE vs TIME

Developing Data-Driven SAS Programs Using Proc Contents

Data Quality Review for Missing Values and Outliers

Paper S Data Presentation 101: An Analyst s Perspective

A Juxtaposition of Tables and Graphs Using SAS /GRAPH Procedures

So Much Data, So Little Time: Splitting Datasets For More Efficient Run Times and Meeting FDA Submission Guidelines

Generating Participant Specific Figures Using SAS Graphic Procedures Carry Croghan and Marsha Morgan, EPA, Research Triangle Park, NC

Innovative Graph for Comparing Central Tendencies and Spread at a Glance

The G3GRID Procedure. Overview CHAPTER 30

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

ODS LAYOUT is Like an Onion

Using SAS Macro to Include Statistics Output in Clinical Trial Summary Table

Submitting SAS Code On The Side

PharmaSUG Paper TT11

Different Methods for Accessing Non-SAS Data to Build and Incrementally Update That Data Warehouse

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

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

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

Validation Summary using SYSINFO

PhUSE US Connect 2018 Paper CT06 A Macro Tool to Find and/or Split Variable Text String Greater Than 200 Characters for Regulatory Submission Datasets

ABSTRACT. The SAS/Graph Scatterplot Object. Introduction

Useful Tips When Deploying SAS Code in a Production Environment

CHAPTER 1 Introduction to SAS/GRAPH Software

Taming the Box Plot. Sanjiv Ramalingam, Octagon Research Solutions, Inc., Wayne, PA

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

Posters 417. NESUG '92 Proceedings. usinq Annotate Data sets to Enhance Contour Graphics output. Shi Tao Yeh, Environmental Resources Kanaqement, ~nc.

SAS/AF FRAME Entries: A Hands-on Introduction

Picturing Statistics Diana Suhr, University of Northern Colorado

The GSLIDE Procedure. Overview. About Text Slides CHAPTER 27

When Simpler is Better Visualizing Laboratory Data Using SG Procedures Wei Cheng, Isis Pharmaceuticals, Inc., Carlsbad, CA

Arthur L. Carpenter California Occidental Consultants, Oceanside, California

Report Writing, SAS/GRAPH Creation, and Output Verification using SAS/ASSIST Matthew J. Becker, ST TPROBE, inc., Ann Arbor, MI

Functions vs. Macros: A Comparison and Summary

PharmaSUG Paper AD06

Presentation Quality Graphics with SAS/GRAPH

An Introduction to SAS Macros

Chapter 13 Introduction to Graphics Using SAS/GRAPH (Self-Study)

Using Different Methods for Accessing Non-SAS Data to Build and Incrementally Update That Data Warehouse

SAS/GRAPH Introduction. Winfried Jakob, SAS Administrator Canadian Institute for Health Information

Quicker Than Merge? Kirby Cossey, Texas State Auditor s Office, Austin, Texas

Macro to compute best transform variable for the model

A Generic Solution to Running the SAS System on the Web Without SAS/Intrnet David L. Ward, InterNext, Inc., Somerset, NJ

CHAPTER 7 Examples of Combining Compute Services and Data Transfer Services

PharmaSUG 2013 CC26 Automating the Labeling of X- Axis Sanjiv Ramalingam, Vertex Pharmaceuticals, Inc., Cambridge, MA

Tired of CALL EXECUTE? Try DOSUBL

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

SAS Graphs in Small Multiples Andrea Wainwright-Zimmerman, Capital One, Richmond, VA

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

The Power of PROC SQL Techniques and SAS Dictionary Tables in Handling Data

Year 2000 Issues for SAS Users Mike Kalt, SAS Institute Inc., Cary, NC Rick Langston, SAS Institute Inc., Cary, NC

Changing Titles on Graphs With Minimal Processing

SAS Macro Dynamics: from Simple Basics to Powerful Invocations Rick Andrews, Office of Research, Development, and Information, Baltimore, MD

Creating Macro Calls using Proc Freq

Chasing the log file while running the SAS program

Error Trapping Techniques for SCL. Andrew Rosenbaum, Trilogy Consulting, Kalamazoo, MI

A SAS Macro to Create Validation Summary of Dataset Report

Missing Pages Report. David Gray, PPD, Austin, TX Zhuo Chen, PPD, Austin, TX

%Addval: A SAS Macro Which Completes the Cartesian Product of Dataset Observations for All Values of a Selected Set of Variables

Program Validation: Logging the Log

HOW TO DEVELOP A SAS/AF APPLICATION

Posters. Workarounds for SASWare Ballot Items Jack Hamilton, First Health, West Sacramento, California USA. Paper

Posters. Paper

PharmaSUG China. Systematically Reordering Axis Major Tick Values in SAS Graph Brian Shen, PPDI, ShangHai

Time Contour Plots. David J. Corliss Magnify Analytic Solutions, Detroit, MI

10 The First Steps 4 Chapter 2

Data Edit-checks Integration using ODS Tagset Niraj J. Pandya, Element Technologies Inc., NJ Vinodh Paida, Impressive Systems Inc.

Macro Method to use Google Maps and SAS to Geocode a Location by Name or Address

USING SAS PROC GREPLAY WITH ANNOTATE DATA SETS FOR EFFECTIVE MULTI-PANEL GRAPHICS Walter T. Morgan, R. J. Reynolds Tobacco Company ABSTRACT

MANAGING SAS/GRAPH DISPLAYS WITH THE GREPLAY PROCEDURE. Perry Watts IMS Health

Displaying Multiple Graphs to Quickly Assess Patient Data Trends

Document and Enhance Your SAS Code, Data Sets, and Catalogs with SAS Functions, Macros, and SAS Metadata. Louise S. Hadden. Abt Associates Inc.

FSVIEW Procedure Windows

Paper Time Contour Plots. David J. Corliss, Wayne State University / Physics and Astronomy

How to Keep Multiple Formats in One Variable after Transpose Mindy Wang

Taming a Spreadsheet Importation Monster

Correcting for natural time lag bias in non-participants in pre-post intervention evaluation studies

An Example of Using SAS/AF DATA TABLE Class In Reviewing Clinical SAS Data Sets

How to Make an Impressive Map of the United States with SAS/Graph for Beginners Sharon Avrunin-Becker, Westat, Rockville, MD

Dictionary.coumns is your friend while appending or moving data

Poster Frequencies of a Multiple Mention Question

ODS and Web Enabled Device Drivers: Displaying and Controlling Large Numbers of Graphs. Arthur L. Carpenter and Richard O. Smith Data Explorations

Running Multiple SAS/AF Applications in a Single SAS Session Mark L. Schneider, SAS Institute Inc., Cary, NC

Ditch the Data Memo: Using Macro Variables and Outer Union Corresponding in PROC SQL to Create Data Set Summary Tables Andrea Shane MDRC, Oakland, CA

A Tutorial on the SAS Macro Language

Virtual Accessing of a SAS Data Set Using OPEN, FETCH, and CLOSE Functions with %SYSFUNC and %DO Loops

%MAKE_IT_COUNT: An Example Macro for Dynamic Table Programming Britney Gilbert, Juniper Tree Consulting, Porter, Oklahoma

A Maintenance-Free Menu Driven Closure System by Stephen M. Noga, Rho, Inc.

Efficient Processing of Long Lists of Variable Names

PharmaSUG Paper TT10 Creating a Customized Graph for Adverse Event Incidence and Duration Sanjiv Ramalingam, Octagon Research Solutions Inc.

Coders' Corner. Scaling Mount GCHART: Using a MACRO to Dynamically Reset the Scale Nina L. Werner, Dean Health Plan, Inc., Madison, WI.

Transcription:

Paper 245 Using Macros to Construct Overlaid Contour Plots For Response Surface Optimization David J. Meade, Scott Lacey Advanced Micro Devices, 5204 E. Ben White Blvd., MS 608, Austin, TX 78741 ABSTRACT Contour plots are frequently used to visually illustrate the relationship between two experimental factors and one response variable. However, in practice researchers often need to know how experimental factors affect many responses simultaneously. By using SAS macros in conjunction with PROC G3GRID, PROC GCONTOUR, PROC IML, and PROC SQL contour plots can be overlaid one on top of another. The overlaid contour plot can then be used to determine how a set of responses is affected by other experimental factors. Our set of SAS macros will allow the user to fit unique models for each response, construct separate contour plots for each model, and then overlay those plots. SAS/AF, and SCL are also used to provide a friendly graphical user interface. This paper is intended for SAS users who are familiar with linear modeling techniques. Figure 2: DELTA_B vs. Time,Temp Figure 3: DELTA_C vs. Time,Temp INTRODUCTION When analyzing data researchers frequently need to find a set of operating conditions that will optimize several responses simultaneously. After identifying an optimal set of conditions, the next challenge is to visually display the results in a manner that managers or other researchers will understand the relationships that exists between experimental factors and the responses. A common practice is to construct two-dimensional contour plots for each response. For example, consider a process where three experimental factors are manipulated in order to determine an optimal set of conditions under which the process will be run in the future. These three factors are Time, Temperature, and Power. The researcher fits the regression models shown below. These plots clearly illustrate how Time and Temperature affect each of the responses individually. However, it is still difficult to visualize the effect of Time or Temperature upon all three of the response variables simultaneously. An approach that is commonly used in such cases is to overlay the individual contour plots so that all of response surfaces are illustrated on the same graph. The overlaid contour plot for the example just shown is illustrated in Figure 4. Figure 4: Overlaid Contour Plot of DELTA_A,DELTA_B, and DELTA_C PROC G3GRID and PROC GCONTOUR can then be used to construct individual contour plots for each response, see Figures 1-3. Figure 1: DELTA_A vs. Time,Temp As stated previously, the advantage of overlaying the contour plots is that you can visualize what is happening to all of the responses simultaneously for any given set of conditions. In the remaining pages, we will present a set of macros, which allow the user to overlay up to five contour plots at the same time. The macro itself uses a variety of SAS procedures including PROC IML, PROC G3GRID, PROC

GCONTOUR, PROC GREPLAY, and PROC SQL. A graphical user interface using SAS/AF and SCL is also included. SAS MACRO FOR OVERLAID CONTOUR PLOTS Constructing overlaid boxplots is a four-step process. First, the user must identify the dataset to be used as well as select which variables will be used as the X and Y axis. Second, the user provides information regarding which, if any, variables must be held constant while those used for the X and Y axis are manipulated. Third, the user selects up to five responses to model. Fourth, the user specifies which model is to be used for each of the selected responses. The main menu is set up so that the user can easily step through each of the necessary steps. window illustrated in Figure 8. Here they select the variables to be plotted on the X and Y axis. Figure 7: Select Axis Variables The Main Menu: Figure 5 illustrates the main menu system. When a button is clicked the appropriate piece of SCL code from Appendix 1 is exectuted. Figure 5: Main Menu Button 3 (Hold Constant Vars): The next step is to identify any variables that will be held constant while those selected in step 1 are manipulated. In this example, Power is being held constant at 3. See illustration in Figure 8. Figure 8: Specify Constant Value Button 1(Select Data Set): When the user clicks the first button they are taken to the window illustrated in Figure 6. Here they can select the library and data set to be used. In this example we have selected the RSM data set located in the HOME library. Figure 6: Select a Data Set Button 4(Select Response Vars): Next, we select the response variables to be used in the analysis. In this example, DELTA_A, DELTA_B, AND DELTA_C have been selected as the response variables of interest, see Figure9. Figure 9: Select Response Variables Button 2(Select Axis Vars): When the user clicks the button labeled Select Axis Vars they are taken to the

Button 5(Enter Regression Model): The next step is to define a model for each response. This set of models will be used to generate the contour plots once the main program is executed. Simply select the terms you want to include in each model. Figure 10 illustrates how a model is defined for the response DELTA_A. Models for the other response variables are fit in a similar manner. Figure 10: Define model for DELTA_A Button 6(Make Contour Plot): The final step is to execute the code that generates the overlaid contour plot. Simply click the Make Contour Plot button. The final graph is shown in Figure 12. Figure 12: Overlaid Contour Plot CONCLUSION Contour plots are frequently used to visually illustrate the relationship between two experimental factors and one response variable. However, in practice researchers often need to know how experimental factors affect many responses simultaneously. By using SAS macros in conjunction with PROC REG, PROC GCONTOUR, PROC IML and PROC SQL contour plots can be overlaid one on top of another. The overlaid contour plot can then be used to determine how a set of responses is affected by other experimental factors. APPENDIX 1 (Code for variable input and graph construction) length command templib tempdata libname dataname tmpname1 tmpname2 $8 string $17 footstr $200; length deplid indeplid constlid cvallid templid i j k q n p xct rc 8; init: control allcmds; deplid=makelist(); indeplid=makelist(0, global ); constlid=makelist(); cvallid=makelist(); reglid=makelist(); templid=makelist(); rc=curlist(templid); main: command=lastcmd(); nextcmd(); if command> then put Last command is command; select(command); when( PICKDATA ) link pickdata; when( INDEPVAR ) link indepvar; when( DEPVARS ) link depvars; when( CONSTVAR ) link constvar; when( REGMODEL ) link regmodel; when( CONTPLOT ) link contplot; when( EXIT ) _status_= H ; otherwise; term: pickdata: /* need to detect a new dataset in order to clear other settings, also */ /* save name in case user wants to cancel and keep current setting */ templib=libname; tempdata=dataname; libname=liblist( *, *, Select a Library, Y ); if libname= then do; if tempdata> then libname=tempdata; else _msg_= A library must be selected. ; dataname=dirlist(libname, DATA VIEW,1, N, *, *, Select a Dataset, Y ); if dataname= then do; if libname=templib and tempdata> then dataname=tempdata; else _msg_= A dataset must be selected. ; /* clear settings when new dataset picked */ if libname^=templib or dataname^=tempdata then do; rc=clearlist(indeplid); rc=clearlist(deplid); rc=clearlist(constlid); rc=clearlist(cvallid); rc=clearlist(reglid, Y ); indepvar: if libname= or dataname= then do; _msg_= Please select a dataset first. ; dsid=open(libname. dataname, I ); tempdata= ; tempdata=varlist(dsid, N,2, Select 2 vars., Y, Y ); rc=close(dsid); if tempdata> then indeplid=copylist(templid, N,indeplid); depvars: if libname= or dataname= then do; _msg_= Please select a dataset first. ; dsid=open(libname. dataname, I ); tempdata= ; tempdata=varlist(dsid, N,5, Select up to 5 vars., Y, Y ); rc=close(dsid); if tempdata> then deplid=copylist(templid, N,deplid); constvar: if libname= or dataname= then do; _msg_= Please select a dataset first. ; dsid=open(libname. dataname, I ); tempdata= ; tempdata=varlist(dsid, N,99, Select vars to hold constant., Y, Y ); rc=close(dsid); if tempdata= then constlid=copylist(templid, N,constlid); rc=clearlist(cvallid); j=listlen(constlid); tempdata=getitemc(constlid,i); display( constval.frame,libname,dataname,tempdata, k); if k=. then do; _msg_= Constant settings are not complete. ; rc=clearlist(cvallid); cvallid=insertn(cvallid,k,-1); regmodel: j=listlen(deplid);

if j=0 then do; _msg_= Please select reponse vars first. ; tempdata=getitemc(deplid,i); k=listlen(reglid); if i>k then do; k=makelist(); rc=insertl(reglid,k,-1); else k=getiteml(reglid,i); put regmodel before : indeplid=; putlist(indeplid, regmodel again,3); display( regmodel.frame,libname,dataname,tempdata,indeplid,constlid,k); put coutour:regmodel after ; putlist(k, factor list,3); contplot: /*need list to translate factor names into new names */ rc=clearlist(templid); /* submit macro variable assignments */ string=compress(libname. dataname); %let dataset=&string; /* independent vars */ xct=listlen(indeplid); if xct^=2 then do; _msg_= Please pick 2 independent vars. ; do i=1 to 2; tempdata=getitemc(indeplid,i); tmpname1=compress( x put(i,1.0)); tmpname2=trim(tmpname1) hold ; rc=insertc(templid,tempdata,-1,tmpname1); %let &tmpname1=&tempdata; %let &tmpname2=0; if i=1 then %let xaxis=&tempdata; else %let yaxis=&tempdata; /* constant vars */ j=listlen(constlid); footstr= ; xct=xct+1; tempdata=getitemc(constlid,i); k=getitemn(cvallid,i); if i=1 then footstr= Constants: ; footstr=trim(footstr) trim(tempdata) = compress(put(k,best10.)); tmpname1=compress( x put(xct,5.0)); tmpname2=trim(tmpname1) hold ; rc=insertc(templid,tempdata,-1,tmpname1); %let &tmpname1=&tempdata; %let &tmpname2=&k; %let numfact=&xct; %let footn=&footstr; /* fill out any remaining factors to 9 */ j=xct+1; do i=j to 9; tmpname1=compress( x put(i,5.0)); %let &tmpname1=xxx; /* response vars */ j=listlen(deplid); %let numresp=&j; tempdata=getitemc(deplid,i); tmpname1=compress( r put(i,5.0)); tmpname2=trim(tmpname1) modl ; %let &tmpname1=&tempdata; %let &tmpname2= k=getiteml(reglid,i); q=listlen(k); do n=1 to q; string=getitemc(k,n); do p=1 to xct; tmpname1=getitemc(templid,p); tmpname2=nameitem(templid,p); string=tranwrd(string,tmpname1,tmpname2); string=compress(string, * ); &string j=j+1; do i=j to 5; tmpname1=compress( r put(i,5.0)); %let &tmpname1=rrr; *j=preview ( browse ); link plotcode; plotcode: submit continue; /* Insert following code */ /* End of SCL Code */ /* This is macro code which can be used as plain SAS program */ /* If running stand alone then use following macro vars: %let x1=xxxx; %let x1hold=0; %let x2=xxxx; %let x2hold=0; %let x3=xxxx; %let x3hold=0; %let x4=xxxx; %let x4hold=0; %let x5=xxxx; %let x5hold=0; %let xaxis=xxxx; %let yaxis=xxxx; %let r1=rrr; %let r2=rrr; %let r3=rrr; %let r4=rrr; %let r5=rrr; */ %let titl =Overlayed Contour Plot; /* set values to min and max for now %let xlow = 60; %let xhi = 100; */ proc summary data=&dataset noprint min max; var &xaxis; output out=work._summary(keep=min max) min=min max=max; data _null_; set work._summary; symput( xlow,compress(put(min,best10.))); symput( xhi,compress(put(max,best10.))); /* set values to min and max for now %let ylow = 100; %let yhi = 260; */ proc summary data=&dataset noprint min max; var &yaxis; output out=work._summary(keep=min max) min=min max=max; data _null_; set work._summary; symput( ylow,compress(put(min,best10.))); symput( yhi,compress(put(max,best10.))); %let x= x; %let hold = hold; %let under = _; %let r=r; %let m=modl; data dset; set &dataset; %macro deldot; %do mi=1 %to &numfact; data dset; set work.dset; if &&x&mi<>.; % %mend deldot; %deldot; %macro deldot2; %do mi=1 %to &numresp; data dset; set work.dset; if &&r&mi<>.; % %mend deldot2; %deldot2; %macro makecol; data work.temp; set work.dset; data work.temp; set work.temp; %do ni=1 %to &numfact; %do mi=&ni %to &numfact; &x&ni&x&mi=&&x&ni*&&x&mi; &x&ni=&&x % % %mend makecol; %makecol; data work.tempval; set work.dset end=eof;

if eof then do; &r1=.; &r2=.; &r3=.; &r4=.; &r5=.; do &xaxis=&xlow to &xhi by ((&xhi-&xlow)/30); do &yaxis=&ylow to &yhi by ((&yhi-&ylow)/30); %macro makecl2a; data work.tempval; set work.tempval; %do ni=1 %to &numfact; %do mi=&ni %to &numfact; &x&ni&x&mi=&&x&ni*&&x&mi; &x&ni=&&x _&x&ni=&&x&ni&hold; % % %mend makecl2a; %makecl2a; %macro makecol2; data work.tempval; set work.tempval; %do mi=1 %to &numfact; if &&x&mi&hold<>0 then &x&mi=&&x&mi&hold; % data work.tempval; set work.tempval; %do ni=1 %to &numfact; %do mi=&ni %to &numfact; &x&ni&x&mi=&x&ni*&x&mi; % % %mend makecol2; %makecol2; %let y = y; %let outfil = outpred; %macro calcpred; %do mi = 1 %to &numresp; proc iml; use work.temp; read all var{&&r&mi&m} into x; read all var{&&r&mi} into y; n=nrow(x); x=j(n,1) x; b=inv(x *x)*(x *y); print y b; use work.tempval; read all var{&&r&mi&m} into x2; n1=nrow(x2); x2=j(n1,1) x2; &y&mi=x2*b; create &outfil&mi var{&y&mi}; app % %mend calcpred; %calcpred; data tempval; set work.tempval; order=ceil(_n_/1); data final; set work.tempval; %macro mrg; %do mi=1 %to &numresp; data &outfil&mi; set work.&outfil&mi; order=ceil(_n_/1); data final; merge final &outfil&mi; by order; data final; set work.final; &&r&mi=&y&mi; % %mend mrg; %mrg; goptions reset = all; goptions nodisplay cback=white device=xcolor rotate=landscape csymbol=black gsfname=graphout gsfmode=append htext=1 htitle=1.5; %let ofset1 = -28; %let ofset2 = -10; %let ofset3 = 8; %let ofset4 = 10; %let ofset5 = 28; %let ofset=ofset; %let line1 = 1; %let line2 = 20; %let line3 = 42; %let line4 = 8; %let line5 = 33; %let l = line; %let color1 = blue; %let color2 = red; %let color3 = green; %let color4 = black; %let color5= magenta; %let color = color; %macro makecont; %let delflag=n; data _null_; set sashelp.vscatlg(where=(libname= WORK and memname= GSEG )); symput( delflag, Y ); %if "&delflag"="y" %then %do; proc catalog c=work.gseg kill; % %do mi = 1 %to &numresp; legend across = 1 position=(bottom outside center) offset=(&&&ofset&mi,0) shape=line(2) value=(height=.5) label=("&&r&mi"); title "&titl"; footnote "&footn"; symbol1 h=2 pct line = &&&l&mi color=&&&color&mi; symbol2 h=2 pct line = &&&l&mi color =&&&color&mi; symbol3 h=2 pct line = &&&l&mi color=&&&color&mi; symbol4 h=2 pct line = &&&l&mi color=&&&color&mi; symbol5 h=2 pct line = &&&l&mi color =&&&color&mi; symbol6 h=2 pct line = &&&l&mi color =&&&color&mi; symbol7 h=2 pct line = &&&l&mi color =&&&color&mi; symbol8 h=2 pct line = &&&l&mi color=&&&color&mi; symbol9 h=2 pct line = &&&l&mi color=&&&color&mi; symbol10 h=2 pct line = &&&l&mi color=&&&color&mi; symbol11 h=2 pct line = &&&l&mi color=&&&color&mi; proc g3grid data=work.final out=work.agrid; grid &yaxis*&xaxis=&&&r&mi/ naxis1=30 naxis2 =30 ; proc gcontour data=work.agrid; plot &yaxis*&xaxis=&&&r&mi/ nolegend autolabel=(tolangle=30 check=20); % %mend makecont; %makecont; goptions display; proc greplay nofs igout=work.gseg tc=sashelp.templt template=whole; treplay 1:1 1:2 1:3 1:4 1:5; APPENDIX 2 (Code for input of variables held constant) entry libname dataname sasname $8 k 8; init: control always; notify( TEXTLAB, _set_text_, Specify a constant value for trim(sasname). ); submit continue; proc sort data=&libname.&dataname(keep=&sasname) nodupkey out=work._const_; by &sasname; notify( DATATAB, _set_dataset_, WORK._CONST_ ); main: term: datatab: notify( DATATAB, _get_column_value_,sasname,k); notify( TEXTENT, _set_value_,k); put Datatab: k=; textent: notify( TEXTENT, _get_value_,k); put Textent: k=; APPENDIX 3 (Code for definition of regression models) entry libname dataname sasname $8 indeplid constlid listid 8; length factor $17 tempname $8 i j k rc boxlid 8; init: notify( TEXTLAB1, _set_text_, Specify the factors influencing trim(sasname). ); notify( LISTBOX, _set_title_,sasname); /* get list id for the list of items in the list box */ notify( LISTBOX, _get_value_,i); boxlid=getiteml(i,3); rc=clearlist(listid); j=listlen(indeplid);

put regmodel init: indeplid= j=; data work._indep_; length name $8 number 8; tempname=getitemc(indeplid,i); name="&tempname"; number=&i; k=j; j=listlen(constlid); k=k+1; tempname=getitemc(constlid,i); name="&tempname"; number=&k; submit continue; data work._factor_(keep=factor); set work._indep_; length factor $17; factor=name; proc sql; create table work._quadra_ as select a.name, b.name as name2 from work._indep_ a, work._indep_ b where a.number <= b.number; data work._quadra_(keep=factor); set work._quadra_; length factor $17; factor=compress(name * name2); proc append data=work._quadra_ base=work._factor_; notify( DATATAB, _set_dataset_, WORK._FACTOR_ ); main: term: rc=copylist(boxlid, N,listid); datatab: notify( DATATAB, _get_column_text_, FACTOR,facto r); rc=searchc(boxlid,factor); if rc=0 then notify( LISTBOX, _add_,factor,- 1); listbox: notify( LISTBOX, _selected_,1,rc); if rc>0 then notify( LISTBOX, _delete_,rc); ACKNOWLEDGMENTS SAS AND SAS/AF are registered trademarks or trademarks of SAS Institute Inc. in the USA and other countries. indicates USA registration. CONTACT INFORMATION David J. Meade 5204 E. Ben White Blvd. Mail Stop 613 Austin, TX 78741 USA Email: david.meade@amd.com Scott Lacey 5204 E. Ben White Blvd. Mail Stop 613 Austin, TX 78741 USA Email: scott.lacey@amd.com