My previous post highlighted presentations at SAS Global Forum 2016 that heavily used SAS/IML software. Several of the authors clearly want to share their work with the wider SAS analytical community. They include their SAS/IML program in an appendix or mention a web site or email address from which the reader can obtain the SAS/IML functions that implement the analysis.

As of SAS/IML 14.1, there is an easy way to share SAS/IML functions with others. The IML language now supports *packages* through the PACKAGE statement. A package is a collection of files that contains source code, documentation, example programs, and sample data. Packages are distributed as ZIP files.

This article shows how to **install and use** a package. A subsequent article will discuss how to **author** a package.
For more information, see my 2016 SAS Global Forum paper, "Writing Packages: A New Way to Distribute and Use SAS/IML Programs".

The main steps to use a package are as follows:

- Download the ZIP file that contains a package.
- To install the package, use the PACKAGE INSTALL statement from within PROC IML or SAS/IML Studio.
- To learn how to use the package, read the package documentation and run some of the sample programs that the package provides.
- To use the functions in the package, use the PACKAGE LOAD statement to load the functions into your current SAS/IML session.
- To access sample data that the package provides, use the PACKAGE LIBNAME statement.

In the following sections, each step is illustrated by using the `polygon` package, which contains functions that compute geometric properties of planar polygons. You can download the package from the SAS/IML File Exchange.

### Obtain the package

The SAS/IML File Exchange is the recomended location to obtain packages. However, some authors might choose to post packages on GitHub or on their own web site.

Download the `polygon` package and save it to a location that SAS can access. This article assumes that the ZIP file is saved to the location `C:\Packages\polygon.zip` on a Windows PC.

### Install the package

To install the package, run the following statements in SAS/IML 14.1 or later:

proc iml; package install "C:\Packages\polygon.zip"; quit; |

You only need to install a package one time. You can then call it in future PROC IML sessions. The package remains installed even after you exit from SAS and reboot your computer.

### Read the documentation

The `help` directory in the ZIP file contains the full documentation for the package, often in the form of a PDF file. You can read that documentation by using a PDF reader outside of SAS. The PDF documentation might contain diagrams, equations, graphs, and other non-text information.

Authors should also provide a brief text-only version of the syntax. While running SAS, you can display the text-only version in the SAS log, as follows:

```
proc iml;
package help polygon;
``` |

For the `polygon` package, the SAS log contains the following overview of the package and the syntax for every public module.

Polygon Package Description: Computational geometry for polygons A polygon is represented as an n x 2 matrix, where the rows represent adjacent vertices for the polygon. The polygon should be "open," which means that the last row does not equal the first row. <...More text...> Module Syntax: PolyArea(P); returns the areas of simple polygons. <...documentation for nine other functions...> PolyWindingNumber(P, R); returns the winding number of the polygon R around the point R. |

The purpose of the PACKAGE HELP syntax is to remind the user of the syntax of the functions in the package while inside of SAS.

Another way to learn to use a pakage is to examine and run sample programs that the package author provides. For the `polygon` package, you can look in the `programs` directory. The file `Example.sas` demonstrates calling functions in the package.

### Load the functions

To read the functions in the package into the current IML session, use the PACKAGE LOAD statement, as follows:

package load polygon; |

The SAS log will display a NOTE for each modules that is loaded:

NOTE: Module _POLYAREA defined. NOTE: Module POLYAREA defined. <...More text...> NOTE: Module POLYSTACK defined. |

Notice that all function begin with a common prefix, in this case "POLY" (or "_POLY," for internal-only functions). This is a good programming practice because it reduces the likelihood that functions in one package conflict with functions in another package. For example, if you load two packages that each have a function named "COMPUTE" (or an equally generic name), then there will be a comflict. By using "POLY" as a prefix, there is less likely to be a name collision.

### Call the functions

After the functions are loaded, you can call them from your program. For example, the following statements define the four vertices of a rectangle and then call functions from the package to compute the perimeter, area, and whether the polygon is a convex region.

P = {0 0, 1 0, 1 2, 0 2}; /* vertices of rectangle */ Perimeter = PolyPerimeter(P); Area = PolyArea(P); IsConvex = PolyIsConvex(P); print Perimeter Area IsConvex; |

### Use sample data

Some packages include sample data sets. You can use the PACKAGE LIBNAME statement to create a SAS libref that points to the `data` subdirectory of an installed package. The following statements read in sample data for polygons that are defined in the `Simple` data set. After the vertices of the polygons are read, the PolyDraw subroutine is called to visualize the polygons in the data set.

package libname PolyData polygon; /* define libref */ use PolyData.Simple; /* sample data in package */ read all var {u v ID} into P; /* vertices; 3rd col is ID variable */ close PolyData.Simple; run PolyDraw(P); /* visualize the polygons */ |

### Display package information

You can use the PACKAGE LIST statement to print the name and version of all installed packages. You can use the PACKAGE INFO command to obtain details about a specific package. The output for these statements is not shown.

package list; /* list all installed packages */ package info polygon; /* details about polygon package */ |

### Summary

This article briefly describes how to install and use a SAS/IML package. Packages were introduced in SA/IML 14.1, which was released with SAS 9.4m3 in July 2015. This article shows how to download, install, load, and use packages that are written by others.

For additional details about packages, see Wicklin (2016). The official documentation of packages is contained in the "Packages" chapter in the *SAS/IML User's Guide*.