You can use PROC SGPLOT, BY variables, and a SG annotation data set together to put separate annotation into each BY group. However, you need two more steps to make it happen. This post shows all of the steps necessary to put different annotations into each graph when you have a BY variable.

# Author

The LOESS statement in PROC SGPLOT finds a fit function while making no assumptions about the parametric form of the regression function.

You can use penalized B-splines display a smooth curve through a set of data. The PBSPLINE statement fits spline models, displays the fit function(s), and optionally displays the data values.

The REG statement fits linear regression models, displays the fit functions, and optionally displays the data values. You can fit a line or a polynomial curve. You can fit a single function or when you have a group variable, fit multiple functions.

This post provides examples of DRAW statement syntax and links to the documentation.

DRAW statements provide to GTL what SG annotation provides to the SG procedures--a way to add text, shapes, lines, and arrows to graphs.

PROC SGPLOT looks at the PROC statements, it looks at the data, and it writes a template that might depend on the data. If you want to understand how the graph is created, you need to look at the PROC SGPLOT code, the graph template and data objects that it constructs, and the final graph.

Usually, you use axis tables when there is a clear link between the rows of the axis table and the graph. I'll show how to use an axis table to create a table that is independent of the graph. This post also uses discrete attribute maps.

This post shows you how to run PROC SGPLOT, create smooth curves by using penalized B-splines, use ODS OUTPUT to create an output data set from PROC SGPLOT, and process it to display drop lines.

This post shows ways to display the upper or lower triangle of a correlation matrix. You can also use colors to show the magnitude of the correlations.

The POSITION= option in the TEXT statement provides you with a way to position text in a variety of locations relative to a point. You can use this option to fine tune label placement in a plot primarily created by using the SCATTER statement and the DATALABEL= option.

This post shows you how to animate text to create a message that appears one character at a time.

We'll take a deeper dive into understanding item stores--the files in which compiled templates are stored--and ways in which you can access them. At the end, I will show you one of my new examples: displaying percentages in the Kaplan-Meier failure plot.

You can modify all of the components of the graphs that analytical procedures produce: the data object, graph template, and the dynamic variables. This post takes a closer look at dynamic variables (which you can see by using PROC DOCUMENT) and data objects and explores graphs that are constructed from more than one data object.

Curve labels in series plots can be positioned inside or outside the graph. Date variables can be specified as TYPE=LINEAR with a date format or more commonly as TYPE=DATE. Sometimes external curve labels might appear below or above the graph, particularly with TYPE=DATE axes. This post shows you ways to move them to the right of the graph.

I hope everyone has noticed some new shortcuts in Graphically Speaking. As you scroll down and look to the right, there are shortcuts for Sanjay's getting started and clinical graphs posts and one for my advanced blogs. When Sanjay asked me to make an icon for my advanced blogs, at

Axis tables can use the SUM= option to summarize data and display means, medians, sums, and percentages. They can instead be used to display data, text, and statistics without any summarization.

This post provides a general macro that enables you to easily display special characters (Unicode) in axis table columns.

In PROC GLM and most other procedures that compute LS-means, mean comparisons are now displayed graphically. This makes comparisons between a large number of groups easier to interpret.

This post shows how to use PROC SGPLOT together with PROC TRANSREG to fit monotonically increasing or decreasing functions through a scatter plot.

You can use SG Annotation (and its GTL equivalent) to display one graph inside another.

This post shows a variety of techniques including how to use PROC TEMPLATE and the SOURCE statement, PROC SGPLOT with multiple Y-axis tables, create comparable axes in two side-by-side graphs, create a broken axis, write and use a table template that wraps text, and find and display examples of certain statements in graph templates and fonts in style templates.

This example shows how to create two coordinated range attribute maps and use them in creating an animated gif of the eclipse.

PROC SGPLOT displays titles inside the graph. If you want to display a title inside the graph and a different title outside the graph, you can use the ODS LAYOUT or the GTL. The ODS LAYOUT gives you precise control over your output and enables you to display multiple graphs and tables in each page.

SG annotation is a powerful technique for adding text, lines, arrows, shapes, and images to graphs. This post provides a macro that can help you when you make a mistake in writing the annotations.

In this post, I will review some of graphs from previous posts while concentrating on just the axes, grid lines, and reference lines. They might not be the most exciting parts of a graph, but there are multiple options that when properly used can turn a good graph into a great graph.

When displaying maps, geometric shapes (such as circles), or results of certain analyses, it is important to equate axes. This post illustrates options in PROC SGPLOT that enable you to equate axes.

This post presents some basic aspects of ODS Graphics: enabling, selecting, and displaying graphs.

You can use a range attribute map to control the mapping of values in a continuous variable to colors. This post shows you how to use PROC SGPLOT to display multiple plots in the same graph and use range attribute maps.

A vector plot draws a line from one point in a graph to another point. In this post, I will show you how to create short vectors instead of vectors that emanate from the origin. I also show how to modify the positions of the vector labels.