Using SAS to Create Graphs with Pop-up Functions Shiqun (Stan) Li, Minimax Information Services, NJ Wei Zhou, Lilly USA LLC, IN



Similar documents
Pop-Ups, Drill-Downs, and Animation Mike Zdeb, School of Public Health, Rensselaer, NY

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

Let SAS Write Your SAS/GRAPH Programs for You Max Cherny, GlaxoSmithKline, Collegeville, PA

Tips and Tricks: Using SAS/GRAPH Effectively A. Darrell Massengill, SAS Institute, Cary, NC

Data Visualization with SAS/Graph

StARScope: A Web-based SAS Prototype for Clinical Data Visualization

Beginning Tutorials. BT005 MAPS MADE EASY USING SAS Mike Zdeb, School of Public Health

PharmaSUG Paper DV05

Visualizing Key Performance Indicators using the GKPI Procedure Brian Varney, COMSYS, a Manpower Company, Portage, MI

SAS Mapping: Technologies, Techniques, Tips and Tricks Darrell Massengill

Paper KEYWORDS PROC TRANSPOSE, PROC CORR, PROC MEANS, PROC GPLOT, Macro Language, Mean, Standard Deviation, Vertical Reference.

Scatter Chart. Segmented Bar Chart. Overlay Chart

Internet/Intranet, the Web & SAS. II006 Building a Web Based EIS for Data Analysis Ed Confer, KGC Programming Solutions, Potomac Falls, VA

OVERVIEW OF THE ENTERPRISE GUIDE INTERFACE

Creating Maps with SAS/GRAPH - Drill Downs, Pop-Ups, and Animation Mike Zdeb, University@Albany School of Public Health, Rensselaer, NY

CC03 PRODUCING SIMPLE AND QUICK GRAPHS WITH PROC GPLOT

Using Pharmacovigilance Reporting System to Generate Ad-hoc Reports

Multiple Graphs on One Page (Step-by-step approach) Yogesh Pande, Schering-Plough Corporation, Summit NJ

SAS CLINICAL TRAINING

Release 2.1 of SAS Add-In for Microsoft Office Bringing Microsoft PowerPoint into the Mix ABSTRACT INTRODUCTION Data Access

Develop highly interactive web charts with SAS

SAS Add in to MS Office A Tutorial Angela Hall, Zencos Consulting, Cary, NC

SAS Mapping: Technologies, Techniques, Tips and Tricks

Sales Territory and Target Visualization with SAS. Yu(Daniel) Wang, Experis

Web Reporting by Combining the Best of HTML and SAS

Export Customized Graphs Directly into Microsoft Word Using Dynamic Data Exchange

The Basics of Creating Graphs with SAS/GRAPH Software Jeff Cartier, SAS Institute Inc., Cary, NC

How to Change the Template and Table of Contents for SAS Web Applications Veronica Y. Rath, INDUS Corporation, Vienna, VA

Creating HTML Output with Output Delivery System

Introduction to SAS Business Intelligence/Enterprise Guide Alex Dmitrienko, Ph.D., Eli Lilly and Company, Indianapolis, IN

WHO WE ARE. INTRODUCTION Throughout the year, numerous official data files and hard copy

Graphing in SAS Software

Histogram of Numeric Data Distribution from the UNIVARIATE Procedure

SAS Add-In 2.1 for Microsoft Office: Getting Started with Data Analysis

Developing an On-Demand Web Report Platform Using Stored Processes and SAS Web Application Server

SAS ODS. Greg Jenkins

Seamless Dynamic Web Reporting with SAS D.J. Penix, Pinnacle Solutions, Indianapolis, IN

Using PROC RANK and PROC UNIVARIATE to Rank or Decile Variables

SAS Macros as File Management Utility Programs

Doing More with SAS/GRAPH GMAP: A New Look at an Old Procedure Barbara B. Okerson, Virginia Health Quality Center, Glen Allen, VA

Analyze the Stock Market Using the SAS System Luis Soriano, Qualex Consulting Services, Inc. Martinsville, VA

How to Create a Custom TracDat Report With the Ad Hoc Reporting Tool

Post Processing Macro in Clinical Data Reporting Niraj J. Pandya

Hands-On Workshops HW003

And Now, Presenting...

GeoGebra Statistics and Probability

From The Little SAS Book, Fifth Edition. Full book available for purchase here.

InfoView User s Guide. BusinessObjects Enterprise XI Release 2

In this topic we discuss a number of design decisions you can make to help ensure your course is accessible to all users.

ABSTRACT INTRODUCTION %CODE MACRO DEFINITION

Embedded Special Characters Kiran Karidi, Mahipal Vanam, and Sridhar Dodlapati

SAS Portfolio Analysis - Serving the Kitchen Sink Haftan Eckholdt, DayTrends, Brooklyn, NY

LEGEND OPTIONS USING MULTIPLE PLOT STATEMENTS IN PROC GPLOT

Eliminating Tedium by Building Applications that Use SQL Generated SAS Code Segments

PharmaSUG Paper AD11

OS/390 SAS/MXG Computer Performance Reports in HTML Format

Data Presentation. Paper Using SAS Macros to Create Automated Excel Reports Containing Tables, Charts and Graphs

We begin by defining a few user-supplied parameters, to make the code transferable between various projects.

Integrating SAS with JMP to Build an Interactive Application

AN ANIMATED GUIDE: SENDING SAS FILE TO EXCEL

SAS BI Dashboard 4.4. User's Guide Second Edition. SAS Documentation

Abstract. Introduction. Web Technology and Thin Clients. What s New in Java Version 1.1

SAS Enterprise Guide in Pharmaceutical Applications: Automated Analysis and Reporting Alex Dmitrienko, Ph.D., Eli Lilly and Company, Indianapolis, IN

STATGRAPHICS Online. Statistical Analysis and Data Visualization System. Revised 6/21/2012. Copyright 2012 by StatPoint Technologies, Inc.

Introduction to SPSS 16.0

SAS ODS HTML + PROC Report = Fantastic Output Girish K. Narayandas, OptumInsight, Eden Prairie, MN

Hypercosm. Studio.

Let There Be Highlights: Data-driven Cell, Row and Column Highlights in %TAB2HTM and %DS2HTM Output. Matthew Flynn and Ray Pass

BusinessObjects Enterprise InfoView User's Guide

Abstract. Introduction. System Requirement. GUI Design. Paper AD

A Method for Cleaning Clinical Trial Analysis Data Sets

BIRT: A Field Guide to Reporting

Paper Hot Links: Creating Embedded URLs using ODS Jonathan Squire, C 2 RA (Cambridge Clinical Research Associates), Andover, MA

Importing Excel File using Microsoft Access in SAS Ajay Gupta, PPD Inc, Morrisville, NC

Take a Whirlwind Tour Around SAS 9.2 Justin Choy, SAS Institute Inc., Cary, NC

Dynamic Dashboards Using Base-SAS Software

An macro: Exploring metadata EG and user credentials in Linux to automate notifications Jason Baucom, Ateb Inc.

Scatter Plots with Error Bars

Transcription:

Paper CC12 Using SAS to Create Graphs with Pop-up Functions Shiqun (Stan) Li, Minimax Information Services, NJ Wei Zhou, Lilly USA LLC, IN ABSTRACT In addition to the static graph features, SAS provides another strong capability to create dynamic graph displays for information visualization. In this presentation, we will demonstrate a SAS component that can generate a SAS graph with pop-up and drill-down functions. In a pop-up graph, when the mouse is moved over different regions or points of such a graph, additional information will appear in a pop-up box. A drill-down graph is often used to link different graph area with different new graphs or tables. This type of SAS graph outputs are quite suitable for a web-based presentation. The topic is prepared for an intermediate and advanced audience. Key Words: SAS/graph, information visualization, pop-up, drill-down, html, Javameta, web-based analysis INTRODUCTION There are many papers discussing about SAS graphs. Most articles present techniques on creating static SAS graphs. However in many situations, we are interested not only in displaying the data in a graph, but also in showing the further information associated with the points, lines or areas in the graph. For instance, in a regression plot, we may want to move the mouse over to an outlier and find out more detail information about this outlier point. POP-UP AND DRILL-DOWN Pop-up and drill-down are nice features for data exploration. To create a dynamic SAS graph for a web browser, there are three things needed to be set up: 1. Specify what to pop-up and/or where to be linked to; 2. Associate the pop-up tips with the graph areas 3. Use SAS HTML option and graph device drivers for displaying the graph in a browser. 1. Define a pop-up and drill-down 1) Pop-up The contents in a pop-up window can be defined in a data step using data tips. It is just like create a text string beginning with a tag key word TIP or ALT. The format of this string is: TIP=[ the contents to be displayed ] or ALT= the contents to be displayed A simple statement for specifying a pop-up string is like: popup=compbl('tip=[' quote("pid: " put(patid,$28.)) ']'); or tips=compbl('alt=' quote( 'PID:' put(patid, $28.)) ); In the example above, the text string <PID: xxxxx> will show up in the pop-up window when the cursor is moved to the corresponding graph region/point. 2) Drill-down A drill-down has two basic parts: the pop-up contents and the links. It can be defined in the similar way to that of a pop-up. In addition to the pop-up information, a href tag is used to link to another source. The format of a drill down string looks like: ALT= Click Here href= level2.html Here, the href tag can be an internet address, like: PopLink =compbl('tip="click for more detail" href=' quote( http://www.sas.com )); 1

Or it can be a file located in your computer: PopLink =compbl( 'TIP="Click for more detail" href=' quote('file:///h:\examples\reg_model.html')); The file to be linked to can be a html file, a pdf file, a Word document or a picture like a jpg or gif file. A pop-up and drill-down can also be defined in an annotate data set. This gives us many flexibilities in programming. In an annotate data set, we need to create a variable HTML as following: Length html $50; Html='Alt="SAS Company" href="http://www.sas.com" '; %label(x, y, "SAS", Blue,0,0,2,simplex,2); This will generate the word <SAS> in (x, y) position. When the cursor is moved over the word <SAS>, a pop-up <SAS Company> will be displayed and it will direct to SAS web: http://www.sas.com if we click at it. 2. Associate the pop-ups with the graph areas After the data tips are defined in the dataset, the pop-ups can be associated with the SAS graph simply by adding html=popup in the graph options, like this: plot (pred L95m u95m)* weeks /overlay html=popup; If variable HTML is created in an annotate data set, ANNOTATE option should be used in SAS/Graph procedures. 3. Displaying the graph in a web browser Pop-up and drill-down usually require a graph device driver like ACTIVEX, JAVA, or JAVAMETA and ODS HTML. There are several papers [1,2,3] that discuss about this in details. Below is an example to save a dynamic SAS graph to a HTML file. This applet graph can then be opened in a web browser. goptions reset=all device=javameta ftext='helveticabold' htext=5 gunit=pct colors=(black); ods listing close; ods html file='c:\examples\popup\popup_example.html' attributes=(codebase="c:\program Files\SAS\shared\applets" ZoomControlEnabled="false"); The CODEBASE= C:\Program Files\SAS\shared\applets specifies a local directory. To enable the pop-up functions, the html file pop-up_example.html can only be displayed in a computer with SAS installed in the same directory. However, after a file is produced, it is often going to be passed from hand to hand. SAS system may be installed in a different directory for a different computer, or there may not have SAS system in the machines used for presentation. To avoid this problem, CODEBASE parameter can be changed to a location that can be reached from internet. For test purpose, we choose: codebase=http://www.albany.edu/~msz03/test/sasappl This APPLET is stored on the web space managed by Mike Zdeb of SUNY at Albany[1]. If a computer cannot access to the internet and does not have SAS system installed, you could still use it to display a SAS output with pop-up properties. You should copy the whole applets directory (C:\Program Files\SAS\shared\applets), as well as the html file Popup_Example.html, to that computer. EXAMPLE Here we will present a real world case of using a dynamic SAS graph. In this example, we have data from a study with 4 arms of treatments (Placebo, Treat A, Treat B and Treat C). We are interested in the relationship between the reduction of primary respond and some baseline variables. Therefore, we create the scatter plots with the regression line as well as the 95% confidence lines. 2

In this graph, when we move the mouse to points on the scatter plots, additional patient information (like patient ID, age, BMI etc) will be displayed. If we move the mouse to the regression line, it will show the fitted model. This move-over or pop-up function can only display in HTML web-based format. If you want to move a SAS output with pop-up/drill-down properties to Powerpoint slides, you will need to do some Add-ins in your Powerpoint software. To learn how to insert a web page with JAVE applets etc to a Powerpoint presentation, please refer to this LiveWeb [6] for detailed instructions. A screen from the web is showed below. The SAS code that generates the graph is attached in the appendix. The SAS program was run in SAS version 8. In this plot, there are two features: 1) If we move the cursor to the point of a patient, as we can see from the pop-up window, the patient ID, treatment arm and some other additional patient information will be popped-up. 2) If we point to the regression line, the regression model will be displayed. And if we click at this line, it will bring us to a new web page showing us the details of the model. This plot only shows the result of Treat A. Quite often, projects require to show all the 4 treatment arms in one single page, in a 2 by 2 template. Our first try was to use GREPLAY. Unfortunately, GREPLAY did not work for us. It loses the all the pop-up and drill-down functions. We also tried ODS LAYOUT on SAS version 9. It seems ODS LAYOUT will lose the pop-up and drill-down capability too. Fortunately, it is very easy to re-arrange the layout of the html graphs, with a little help of some HTML skills. We first generate all the 4 graphs in one html file, then modify this html file with the following SAS code. This will rearrange the 4 graphs into a 2X2 graphs on a single page. data _null_; infile 'C:\Examples\PopUp\Treat4x1.html'; file 'C:\Examples\PopUp\Treat2x2.html'; input; IF upcase(_infile_)=:"<applet" then do; count+1; 3

if count=1 then do; put '<p color=blue><font size="5"> Study XYZ: Change from Baseline <font size=".5">'/ '<br color=black><font size="3"> (Mouse over to the points for patient information or click at regression line for model outputs)<font size="3">' / '<br>'/; put "<table><tr><td>" / "<!--- define a 2 by 2 table --->"//; if count=2 or count=4 then put "</td><td>" //; if count=3 then put "</td></tr><tr><td>"//; END; IF _infile_=:'<p style="page-break-after:' then delete; put _infile_; IF upcase(_infile_)=:"</applet" and count=4 then do; put "</td></tr></table>" / "<!--- End of table -->"//; The 2X2 graph display is shown below. This applet graph will preserve all the pop-up and drill-down functions. CONCLUSION Dynamic SAS graphs are excellent techniques for data visualization and data exploration, especially for webbased presentations. With a little HTML knowledge, it is possible to create a information-rich, visual-pleasing SAS graph. 4

REFERENCES 1. Mike Zdeb, Pop-Ups, Drill-Downs, and Animation, SUGI 29 http://www2.sas.com/proceedings/sugi29/090-29.pdf 2. Curtis Smith, Creating Drill-Down Graphs Using SAS/Graph and the Output Delivery System, SUGI 28, http://www2.sas.com/proceedings/sugi28/149-28.pdf 3. Himesh Patel, Using SAS/GRAPH Software to Create Graphs on the Web, http://www.ats.ucla.edu/stat/sas/library/sas_graphs_on_web.pdf 4. A. Darrell Massengill, Tips and Tricks: Using SAS/GRAPH Effectively, SUGI 30, http://www2.sas.com/proceedings/sugi30/090-30.pdf 5. Shi-Tao Yeh, Interactive Graphs from the SAS System, NESUG 18, http://www.nesug.org/proceedings/nesug05/dp/dp7.pdf 6. LiveWeb insert and view web pages real-time, http://skp.mvps.org/liveweb.htm TRADEMARKS SAS and all other SAS Institute Inc. product or service names are registered trademarks or trademarks of SAS Institute Inc. in USA and other countries. indicates USA registration. Other brand and product names are trademarks of their respective companies. CONTACT INFORMATION Your comments and questions are valued and encouraged. Contact the authors at: Shiqun (Stan) Li Minimax Information Services 49 Hendrickson Dr. Belle Mead, NJ 08502 (908) 240-8229 shiqun@gmail.com Wei Zhou Lilly USA LLC Drop Code: 4133 Indianapolis, IN (317) 651-0044 zhou_wei_wz@lilly.com APPENDIX SAS sample codes generate the dynamic graph: *** 1) To create a mock-up data set; data example; length treat $10 gender $8 ; do patid=1 to 200; baseline=10*ranuni(0); change=-int(patid/50)*baseline+2+4*rannor(0); if patid<=50 then treat="placebo"; else if patid<=100 then treat="treat A"; else if patid<=150 then treat="treat B"; else if patid<=200 then treat="treat C"; if ranuni(0)<.51 then gender="female"; else gender="male"; age=18+ranuni(0)*(80-18); *** 18 to 80 years old; BMI=26+3*rannor(0); 5

*** 2)To find the regression model and set up the pop-ups, drill-downs; *** Preparing for the html graphs; %macro bytreat(treat=, trt=); data test; set example; where treat="&treat."; *** subsetting; *** get the range for x-axis; proc sql noprint; select min(baseline), max(baseline) into :min_bl, :max_bl from test; quit; %let step=%sysevalf((&max_bl. - &min_bl.)/100); *** get the model estimates; *** save the model details for 2 nd level drill-down; ods listing close; ods output "Parameter Estimates"=model(keep=variable estimate); ods html path="c:\examples\popup\pt_info" body="reg_model&trt..html"; title "Regression Model (&Treat.)"; proc reg data=test ; model change=baseline; quit; title; ods output close; ods html close; ods listing; proc transpose data=model out=model1(drop=_:); id variable; *** create a base for graph; data base; do baseline=&min_bl. to max(10, &max_bl.) by &step.; data _null_; set model1(rename=(baseline=coeff_bl)); *** model; if coeff_bl<0 then s1=""; else s1="+"; call symput("model", compbl("change=" put(intercept,8.3) put(s1, $1.) put(coeff_bl,8.3) "*(Baseline)") ); %put &model.; data testb; set test(in=indat) base(in=inbase); if InDat then base=0; if InBase then base=1; proc sort data=testb; by baseline; proc reg data=testb noprint; model change=baseline/clm; 6

OUTPUT OUT=pred_dat PREDICTED=pred_ L95M=L95m_ U95M=U95m_ ; quit; data toplot&trt. ; set pred_dat; length popup $200; if base=0 then do; *** individual patient information for pop-ups; popup=compbl('tip=[' quote("pid: " put(patid, 8.) "," "Treat: " put(treat,$10.)) quote(" ") quote("baseline Information: ") quote("age:" put(age,3.) ', ' put(gender,$8.)) quote('baseline X: ' put(baseline, 4.1) ', BMI: ' put(bmi, 5.1)) ']' ); if base=1 then do; *** model pop-up and drill down to model details; change=.; pred =pred_; popup='tip=["regression Model:"' quote("&model.") ']' 'href=' quote("pt_info/reg_model&trt..html"); pred=.; l95m=l95m_; popup=compbl('tip=["lower Bound of the 95% Confidence Interval"]'); l95m=.; u95m=u95m_; popup=compbl('tip=["upper Bound of the 95% Confidence Interval"]'); keep change pred L95m u95m baseline popup ; %mend bytreat; %bytreat(treat=%str(treat A), Trt=A); *** set graphics options (specify the JAVAMETA device driver); goptions reset=all device=javameta ftext='helveticabold' htext=5 gunit=pct colors=(black); ods listing close; ods html path='c:\examples\popup\' body='treata.html' attributes=(codebase="http://www.albany.edu/~msz03/test/sasappl" ZoomControlEnabled="false" Width="700" Height="500"); axis1 label=none ; axis2 label=none order=(-20 to 20 by 5) ; symbol1 h=2 v=dot c=black i=none l=1; symbol2 h=1 f=simplex v='.' c=blue i=j l=1; symbol3 h=1 f=simplex v='.' c=green i=j l=2; symbol4 h=1 f=simplex v='.' c=red i=j l=2; title h=6 "Treat A"; proc gplot data=toplota; plot (change pred L95m u95m) * baseline /vaxis=axis2 haxis=axis1 overlay html=popup ; quit; ods html close; ods listing; 7