Let us now consider the SAS code that generates
JSL for the
Distribution Analysis process. This code is located in the
ProcessLibrary folder in your JMP installation directory.
The code used to generate the JSL is found towards the end of the
SAS code.
This section of the Distribution Analysis SAS code begins (
Figure ) by invoking the
%CheckLabel macro in a loop across all specified
variables in the
Vars macro. This creates new macro variables that contain the SAS labels for these variables, and these variables are then referenced in subsequent PUT statements.
The code then defines the file in which to place the JSL code via a
%PrepOutFile macro, which issues a FILENAME statement corresponding to the
.jsl file to be created, referenceable with the
DataDistributionScript macro variable (
Figure ).
The principal part of the code (partially shown below) is contained within a DATA _NULL_ block, which contains a series of PUT statements to push individual lines of JSL code to the previously created file. This approach allows you to exploit the power of the SAS macro language to automatically create all of the displays and analyses that you want in JMP. You can also use looping and macro referencing to make your code generic enough to run on any data set of a similar structure.
In this example, the first JSL line
“//!" (line 4 of the code illustrated above) instructs JMP to automatically run the script. Following the initial setup of tabbed windows, if the user has requested overlaid kernel density estimates, an
Open statement tells JMP to open the densities SAS data set as a JMP table. (This SAS data set was created in an earlier part of the code using PROC KDE.). The next
JSL commands color and label the rows in the resulting JMP table. Then the JMP Parallel Plot platform is called to show the colored densities. A double macro reference
&&_&j is used in a loop to dereference macro variables _1, _2, _3, … which correspond to density values along the x axis. A similar pattern is followed in subsequent PUT statements for the
box plots and
distribution analyses (code not shown) as shown in the previous JMP displays.
Probably the most difficult aspect of writing code such as this involves appropriate punctuation, especially when generating JSL code that contains special characters such as quotation marks. You should review the documentation for the PUT statement in Base SAS software and the Macro Quoting documentation in SAS Macro Language to make sure you are setting up your code correctly. Of course studying and working from examples like this one is also an effective way to start creating your own code.
The SAS macro language can sometimes generate unusual error messages when quotation marks are unbalanced or misaligned. If you encounter such messages, it can be helpful to adopt a divide-and-conquer strategy for your code by commenting out parts of the code using
/* */ blocks and making sure that each uncommented part works correctly before putting the parts back together.
Both the parallel plot and distribution code involve loops through different sets of variables. The parallel plot variables come from the density estimation process and this data set is transposed so that each curve is a selectable row in the plot. The variables in the distribution analysis are just the originally specified variables, although, as mentioned earlier, their labels are used rather than the variable names themselves. The labels are inserted in the
JSL code with the
&&Label&j macro specification.
The SAS code finishes with instructions to run the process and include specific output files in the output folder (below).
The generated .jsl file is included in the SAS package via the
%PackageInsertFile macro. JMP Life Sciences recognizes the
.jsl suffix in the package and automatically launches the
JSL code after the
SAS job finishes.