Base SAS 9.3 Utilities: Reference
Base SAS 9.3 Utilities: Reference
3 Utilities:
Reference
SAS Documentation
The correct bibliographic citation for this manual is as follows: SAS Institute Inc. 2011. Base SAS 9.3 Utilities: Reference. Cary, NC: SAS
Institute Inc.
Base SAS 9.3 Utilities: Reference
Copyright 2011, SAS Institute Inc., Cary, NC, USA
ISBN 9781607649052 (electronic book)
ISBN 9781607649052
All rights reserved. Produced in the United States of America.
For a hardcopy book: No part of this publication may be reproduced, stored in a retrieval system, or transmitted, in any form or by any means,
electronic, mechanical, photocopying, or otherwise, without the prior written permission of the publisher, SAS Institute Inc.
For a Web download or e-book:Your use of this publication shall be governed by the terms established by the vendor at the time you acquire this
publication.
The scanning, uploading, and distribution of this book via the Internet or any other means without the permission of the publisher is illegal and
punishable by law. Please purchase only authorized electronic editions and do not participate in or encourage electronic piracy of copyrighted
materials. Your support of others' rights is appreciated.
U.S. Government Restricted Rights Notice: Use, duplication, or disclosure of this software and related documentation by the U.S. government is
subject to the Agreement with SAS Institute and the restrictions set forth in FAR 52.22719 Commercial Computer Software-Restricted Rights
(June 1987).
SAS Institute Inc., SAS Campus Drive, Cary, North Carolina 27513.
ISBN 9781607649052
1st printing, July 2011
ISBN 9781607649052
1st printing, July 2011
SAS Publishing provides a complete selection of books and electronic products to help customers use SAS software to its fullest potential. For
more information about our e-books, e-learning products, CDs, and hard-copy books, visit the SAS Publishing Web site at
support.sas.com/publishing or call 1-800-727-3228.
SAS and all other SAS Institute Inc. product or service names are registered trademarks or trademarks of SAS Institute Inc. in the USA and other
countries. indicates USA registration.
Other brand and product names are registered trademarks or trademarks of their respective companies.
Contents
Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
iv Contents
v
Syntax Components
The components of the syntax for most language elements include a keyword and
arguments. For some language elements, only a keyword is necessary. For other
language elements, the keyword is followed by an equal sign (=).
keyword
specifies the name of the SAS language element that you use when you write your
program. Keyword is a literal that is usually the first word in the syntax. In a CALL
routine, the first two words are keywords.
In the following examples of SAS syntax, the keywords are the first words in the
syntax:
CHAR (string, position)
CALL RANBIN (seed, n, p, x);
ALTER (alter-password)
BEST w.
REMOVE <data-set-name>
In the following example, the first two words of the CALL routine are the keywords:
CALL RANBIN(seed, n, p, x)
The syntax of some SAS statements consists of a single keyword without arguments:
DO;
... SAS code ...
vi About This Book
END;
Some system options require that one of two keyword values be specified:
DUPLEX | NODUPLEX
argument
specifies a numeric or character constant, variable, or expression. Arguments follow
the keyword or an equal sign after the keyword. The arguments are used by SAS to
process the language element. Arguments can be required or optional. In the syntax,
optional arguments are enclosed between angle brackets.
In the following example, string and position follow the keyword CHAR. These
arguments are required arguments for the CHAR function:
CHAR (string, position)
Each argument has a value. In the following example of SAS code, the argument
string has a value of 'summer', and the argument position has a value of
4:x=char('summer', 4);
In the following example, string and substring are required arguments, while
modifiers and startpos are optional.
FIND(string, substring <,modifiers> <,startpos>
Note: In most cases, example code in SAS documentation is written in lowercase with a
monospace font. You can use uppercase, lowercase, or mixed case in the code that
you write.
Style Conventions
The style conventions that are used in documenting SAS syntax include uppercase bold,
uppercase, and italic:
UPPERCASE BOLD
identifies SAS keywords such as the names of functions or statements. In the
following example, the keyword ERROR is written in uppercase bold:
ERROR<message>;
UPPERCASE
identifies arguments that are literals.
In the following example of the CMPMODEL= system option, the literals include
BOTH, CATALOG, and XML:
CMPMODEL = BOTH | CATALOG | XML
italics
identifies arguments or values that you supply. Items in italics represent user-
supplied values that are either one of the following:
nonliteral arguments In the following example of the LINK statement, the
argument label is a user-supplied value and is therefore written in italics:
LINK label;
nonliteral values that are assigned to an argument
In the following example of the FORMAT statement, the argument DEFAULT is
assigned the variable default-format:
FORMAT = variable-1 <, ..., variable-nformat><DEFAULT = default-format>;
Syntax Conventions for the SAS Language vii
Items in italics can also be the generic name for a list of arguments from which you
can choose (for example, attribute-list). If more than one of an item in italics can be
used, the items are expressed as item-1, ..., item-n.
Special Characters
The syntax of SAS language elements can contain the following special characters:
=
an equal sign identifies a value for a literal in some language elements such as
system options.
In the following example of the MAPS system option, the equal sign sets the value
of MAPS:
MAPS = location-of-maps
<>
angle brackets identify optional arguments. Any argument that is not enclosed in
angle brackets is required.
In the following example of the CAT function, at least one item is required:
CAT (item-1 <, ..., item-n>)
|
a vertical bar indicates that you can choose one value from a group of values. Values
that are separated by the vertical bar are mutually exclusive.
In the following example of the CMPMODEL= system option, you can choose only
one of the arguments:
CMPMODEL = BOTH | CATALOG | XML
...
an ellipsis indicates that the argument or group of arguments following the ellipsis
can be repeated. If the ellipsis and the following argument are enclosed in angle
brackets, then the argument is optional.
In the following example of the CAT function, the ellipsis indicates that you can
have multiple optional items:
CAT (item-1 <, ..., item-n>)
'value' or value
indicates that an argument enclosed in single or double quotation marks must have a
value that is also enclosed in single or double quotation marks.
In the following example of the FOOTNOTE statement, the argument text is
enclosed in quotation marks:
FOOTNOTE <n> <ods-format-options 'text' | text>;
;
a semicolon indicates the end of a statement or CALL routine.
In the following example each statement ends with a semicolon: data namegame;
length color name $8; color = 'black'; name = 'jack'; game =
trim(color) || name; run;
viii About This Book
Prior to SAS 9.3, this document was part of SAS Language Reference: Dictionary.
Starting with SAS 9.3, SAS Language Reference: Dictionary has been divided into seven
documents:
SAS Data Set Options: Reference
SAS Formats and Informats: Reference
SAS Functions and CALL Routines: Reference
SAS Statements: Reference
SAS System Options: Reference
SAS Component Objects: Reference (contains the documentation for the Hash Object
and the Java Object)
Base SAS Utilities: Reference (contains the documentation for the SAS DATA step
debugger and the SAS Utility macro %DS2CSV)
x Base SAS Utilities
xi
Recommended Reading
Part 1
Macro Utilities
Chapter 1
Dictionary of Utilities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2
3
Chapter 1
Dictionary of Utilities
Dictionary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
%DS2CSV Macro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Dictionary
%DS2CSV Macro
Converts SAS data sets to comma-separated value (CSV) files.
Restriction: This macro cannot be used in a DATA step. Run the macro only in open code.
Syntax
%DS2CSV(argument-1=value-1, argument-2=value-2 <,argument-n=value-n>)
csvfref=fileref
specifies the SAS fileref that points to the location of the CSV file where the
formatted output is to be written. If the file that you specify does not exist, then it is
created for you.
Note: Do not use the CSVFREF argument if you use the CSVFILE argument.
openmode=REPLACE|APPEND
indicates whether the new CSV output overwrites the information that is currently in
the specified file or if the new output is appended to the end of the existing file. The
default value is REPLACE. If you do not want to replace the current contents, then
specify OPENMODE=APPEND to add your new CSV-formatted output to the end
of an existing file.
Note: OPENMODE=APPEND is not valid if you are writing your resulting output
to a partitioned data set (PDS) on z/OS.
4 Chapter 1 Dictionary of Utilities
contdisp=Y | N
indicates whether to write a content disposition header. This header is written by
default.
Restriction: This argument is valid only when RUNMODE=S.
Note: If you specify CONTDISP=N, then the SAVEFILE argument is ignored.
mimehdr1=MIME/HTTP-header
specifies the text that is to be used for the first MIME or HTTP header that is written.
This header is written after the content type and disposition headers. By default,
nothing is written for this header.
Restriction: This argument is valid only when RUNMODE=S.
mimehdr2=MIME/HTTP-header
specifies the text that is to be used for the second MIME or HTTP header that is
written. This header is written after the content type and disposition headers. By
default, nothing is written for this header.
Restriction: This argument is valid only when RUNMODE=S.
mimehdr3=MIME/HTTP-header
specifies the text that is to be used for the third MIME or HTTP header that is written
when RUNMODE=S is specified. This header is written after the content type and
disposition headers. By default, nothing is written for this header.
Restriction: This argument is valid only when RUNMODE=S.
mimehdr4=MIME/HTTP-header
specifies the text that is to be used for the fourth MIME or HTTP header that is
written. This header is written after the content type and disposition headers. By
default, nothing is written for this header.
Restriction: This argument is valid only when RUNMODE=S.
mimehdr5=MIME/HTTP-header
specifies the text that is to be used for the fifth MIME or HTTP header that is
written. This header is written after the content type and disposition headers. By
default, nothing is written for this header.
runmode=S | B
specifies whether you are running the %DS2CSV macro in batch or server mode.
The default setting for this argument is RUNMODE=S.
Server mode (RUNMODE=S) is used with Application Dispatcher programs and
streaming output stored processes. Server mode causes DS2CSV to generate
appropriate MIME or HTTP headers. For more information about Application
Dispatcher, refer to the Application Dispatcher documentation at http://
support.sas.com/rnd/web/intrnet/dispatch.html.
Batch mode (RUNMODE=B) means that you are submitting the DS2CSV macro
in the SAS Program Editor or that you included it in a SAS program.
Note: No HTTP headers are written when you specify batch mode.
%DS2CSV Macro 5
Restriction: RUNMODE=S is valid only when used within the SAS/IntrNet and
Stored Process servers.
savefile=filename
specifies the filename to display in the Web browser's Save As dialog box. The
default value is the name of the data set plus .csv.
Restriction: This argument is valid only when RUNMODE=S.
Note: This argument is ignored if CONTDISP=N is specified.
pw=password
specifies the password that is needed to access a password-protected data set. This
argument is required if the data set has a READ or PW password. (You do not need
to specify this argument if the data set has only WRITE or ALTER passwords.)
sepchar=separator-character
specifies the character that is used for the separator character. Specify the two-
character hexadecimal code for the character or omit this argument to get the default
setting. The default settings are 2C for ASCII systems and 6B for EBCDIC systems.
(These settings represent commas (,) on their respective systems.)
var=var1 var2 ...
specifies the variables that are to be included in the CSV file and the order in which
they should be included. To include all of the variables in the data set, do not specify
this argument. If you want to include only a subset of the variables, then list each
variable name and use single blank spaces to separate the variables. Do not use a
comma in the list of variable names.
Restriction: A range of values is not valid. For example, var1var4.
where=where-expression
specifies a valid WHERE clause that selects observations from the SAS data set.
Using this argument subsets your data based on the criteria that you supply for
where-expression.
6 Chapter 1 Dictionary of Utilities
Details
The DS2CSV macro converts SAS data sets to comma-separated value (CSV) files. You
can specify the hexadecimal code for the separator character if you want to create some
other type of output file (for example, a tab-separated value file).
Example
The following example uses the %DS2CSV macro to convert the SASHELP.RETAIL
data set to a comma-separated value file:
%ds2csv (data=sashelp.retail, runmode=b, csvfile=c:\temp\retail.csv);
7
Part 2
Chapter 2
Using the DATA Step Debugger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Chapter 3
Dictionary of DATA Step Debugger Commands . . . . . . . . . . . . . . . . . . . 25
8
9
Chapter 2
Using the DATA Step Debugger
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
What Is Debugging? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
What Is the DATA Step Debugger ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
Basic Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
How a Debugger Session Works . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
Using the Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Entering Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Working with Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Assigning Commands to Function Keys . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Using the Macro Facility with the Debugger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
Using Macros as Debugging Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
Creating Customized Debugging Commands with Macros . . . . . . . . . . . . . . . . . . . 12
Debugging a DATA Step Generated by a Macro . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
Example 1: Debugging a Simple DATA Step When Output Is Missing . . . . . . . . . 13
Example 2: Working with Formats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
Example 3: Debugging DO Loops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Example 4: Examining Formatted Values of Variables . . . . . . . . . . . . . . . . . . . . . . 24
Introduction
What Is Debugging?
Debugging is the process of removing logic errors from a program. Unlike syntax errors,
logic errors do not stop a program from running. Instead, they cause the program to
produce unexpected results. For example, if you create a DATA step that keeps track of
inventory, and your program shows that you are out of stock but your warehouse is full,
you have a logic error in your program.
To debug a DATA step, you could do any of the following tasks:
copy a few lines of the step into another DATA step, execute it, and print the results
of those statements.
insert PUT statements at selected places in the DATA step, submit the step, and
examine the values that are displayed in the SAS log.
use the DATA step debugger.
10 Chapter 2 Using the DATA Step Debugger
While the SAS log can help you identify data errors, the DATA step debugger offers you
an easier, interactive way to identify logic errors, and sometimes data errors, in DATA
steps.
Basic Usage
You can debug only one DATA step at a time. You can use the debugger only with a
DATA step, and not with a PROC step.
Entering Commands
For a list of command and their descriptions, see DATA Step Debugger Commands by
Category on page 25..
Enter DATA step debugger commands on the debugger command line. Follow these
rules when you enter a command:
A command can occupy only one line (except for a DO group).
A DO group can extend over more than one line.
To enter multiple commands, separate the commands with semicolons:
examine _all_; set letter='bill'; examine letter
To issue the commands, invoke macro EC from the DEBUGGER LOG command line:
%ec
The DEBUGGER LOG displays the value of COST, executes the next five statements,
and then displays the value of DURATION.
Note: Defining a macro on the DEBUGGER LOG command line enables you to use the
macro only during the current debugging session, because the macro is not
permanently stored. To create a permanently stored macro, use the Program Editor.
6. When you locate the logic error, correct the portion of the macro that generated that
statement or statements.
Examples
Discovering a Problem
This program creates information about a travel tour group. The data files contain two
types of records. One type contains the tour code, and the other type contains customer
information. The program creates a report listing tour number, name, age, and gender for
each customer.
/* first execution */
data tours (drop=type);
input @1 type $ @;
if type='H' then do;
input @3 Tour $20.;
return;
end;
else if type='P' then do;
input @3 Name $10. Age 2. +1 Sex $1.;
output;
end;
datalines;
H Tour 101
P Mary E 21 F
P George S 45 M
P Susan K 3 F
H Tour 102
P Adelle S 79 M
P Walter P 55 M
P Fran I 63 F
;
The program executes without error, but the output is unexpected. The output does not
contain values for the variable Tour. Viewing the SAS log will not help you debug the
program because the data are valid and no errors appear in the log. To help identify the
logic error, run the DATA step again using the DATA step debugger.
Note: Most debugger commands have abbreviations, and you can assign commands to
function keys. The examples in this section, however, show the full command.For a
list of all commands, see DATA Step Debugger Commands by Category on page
25.
When you press ENTER, the following display appears:
Examples 15
The values of all variables appear in the DEBUGGER LOG window. SAS has compiled,
but not yet executed, the INPUT statement.
Use the STEP command to execute the DATA step statements one at a time. By default,
the STEP command is assigned to the ENTER key. Press ENTER repeatedly to step
through the first iteration of the DATA step, and stop when the RETURN statement in
the program is highlighted in the DEBUGGER SOURCE window.
Because Tour information was missing in the program output, enter the EXAMINE
command to view the value of the variable Tour for the first iteration of the DATA step.
examine tour
The variable Tour contains the value Tour 101, showing you that Tour was read. The
first iteration of the DATA step worked as intended. Press ENTER to reach the top of
the DATA step.
16 Chapter 2 Using the DATA Step Debugger
When you press ENTER, an exclamation point appears at line 9 in the DEBUGGER
SOURCE window to mark the breakpoint:
Execute the GO command to continue DATA step execution until it reaches the
breakpoint (in this case, line 9):
go
SAS suspended execution just before the ELSE statement in line 7. Examine the values
of all the variables to see their status at this point.
examine _all_
You expect to see a value for Tour, but it does not appear. The program data vector gets
reset to missing values at the beginning of each iteration and therefore does not retain the
value of Tour. To solve the logic problem, you need to include a RETAIN statement in
the SAS program.
The debugging windows disappear, and the original SAS session resumes.
run;
proc print;
title 'Tour List';
run;
18 Chapter 2 Using the DATA Step Debugger
The value of Duration for the tour to Venezuela shows a negative number, -290 days. To
help identify the error, run the DATA step again using the DATA step debugger. SAS
displays the following debugger windows:
At the DEBUGGER LOG command line, issue the EXAMINE command to display the
values of all variables in the program data vector before execution begins:
examine _all_
Initial values of all variables appear in the DEBUGGER LOG window. SAS has not yet
executed the INPUT statement.
Press ENTER to issue the STEP command. SAS executes the INPUT statement, and the
assignment statement is now highlighted.
Issue the EXAMINE command to display the current value of all variables:
examine _all_
20 Chapter 2 Using the DATA Step Debugger
Because a problem exists with the Venezuela tour, suspend execution before the
assignment statement when the value of Country equals Venezuela. Set a breakpoint to
do this:
break 4 when country='Venezuela'
SAS stops execution when the country name is Venezuela. You can examine Start and
End tour dates for the Venezuela trip. Because the assignment statement is highlighted
(indicating that SAS has not yet executed that statement), there will be no value for
Duration.
Execute the EXAMINE command to view the value of the variables after execution:
examine _all_
To view formatted SAS dates, issue the EXAMINE command using the DATEw.
format:
examine start date7. end date7.
Because the tour ends on November 18, 20120, and not on January 18, 2012, there is an
error in the variable End. Examine the source data in the program and notice that the
value for End has a typographical error. By using the SET command, you can
22 Chapter 2 Using the DATA Step Debugger
temporarily set the value of End to November 18 to see whether you get the anticipated
result. Issue the SET command using the DDMMMYYw. format:
set end='18nov00'd
Press ENTER to issue the STEP command and execute the assignment statement.
Issue the EXAMINE command to view the tour date and Duration fields:
examine start date7. end date7. duration
data tours;
length Country $ 10;
input Country $10. Start : mmddyy. End : mmddyy.;
duration=end-start;
datalines;
Italy 033012 041312
Brazil 021912 022812
Japan 052212 061512
Venezuela 110312 111812
Australia 122112 011513
;
To set a breakpoint at the assignment statement (line 4 in this example) after every five
iterations of the DO loop, issue this command:
break 4 after 5
When you issue the GO commands, the debugger suspends execution when i has the
values of 5, 10, 15, and 20 in the DO loop iteration.
In an iterative DO loop, select a value for the AFTER option that can be divided evenly
into the number of iterations of the loop. For example, in this DATA step, 5 can be
evenly divided into 20. When the DO loop iterates the second time, i again has the
values of 5, 10, 15, and 20.
If you do not select a value that can be evenly divided (such as 3 in this example), the
AFTER option causes the debugger to suspend execution when i has the values of 3, 6,
9, 12, 15, and 18. When the DO loop iterates the second time, i has the values of 1, 4, 7,
10, 13, and 16.
24 Chapter 2 Using the DATA Step Debugger
When the value of BEGIN is 033012, the debugger displays the following:
Sun, Mar 30, 2012
To debug a DATA step that applies the format SIZE. to the variable STOCKNUM, use
the format with EXAMINE:
examine stocknum size.
For example, when the value of STOCKNUM is 7, the debugger displays the following:
STOCKNUM = medium
25
Chapter 3
Dictionary of DATA Step
Debugger Commands
STEP (p. 37) Executes statements one at a time in the active program.
Controlling the HELP (p. 33) Displays information about debugger commands.
Windows
SWAP (p. 38) Switches control between the SOURCE window and the LOG
window.
Manipulating CALCULATE (p. 28) Evaluates a debugger expression and displays the result.
DATA Step
Variables DESCRIBE (p. 30) Displays the attributes of one or more variables.
26 Chapter 3 Dictionary of DATA Step Debugger Commands
LIST (p. 35) Displays all occurrences of the item that is listed in the argument.
TRACE (p. 38) Controls whether the debugger displays a continuous record of the
DATA step execution.
WATCH (p. 39) Suspends execution when the value of a specified variable
changes.
Tailoring the ENTER (p. 31) Assigns one or more debugger commands to the ENTER key.
Debugger
Dictionary
BREAK
Suspends program execution at an executable statement.
Category: Manipulating Debugging Requests
Alias: B
Syntax
BREAK location <AFTER count> <WHEN expression> <DO group>
Required Argument
location
specifies where to set a breakpoint. Location must be one of these:
label
a statement label. The breakpoint is set at the statement that follows the label.
line-number
the number of a program line at which to set a breakpoint.
*
the current line.
BREAK 27
Optional Arguments
AFTER count
honors the breakpoint each time the statement has been executed count times. The
counting is continuous. That is, when the AFTER option applies to a statement inside
a DO loop, the count continues from one iteration of the loop to the next. The
debugger does not reset the count value to 1 at the beginning of each iteration.
If a BREAK command contains both AFTER and WHEN, AFTER is evaluated first.
If the AFTER count is satisfied, the WHEN expression is evaluated.
Tip: The AFTER option is useful in debugging DO loops.
WHEN expression
honors a breakpoint when the expression is true.
DO group
is one or more debugger commands enclosed by a DO and an END statement. The
syntax of the DO group is the following:
DO; command-1<;command-n;> END;
command
specifies a debugger command. Separate multiple commands by semicolons.
A DO group can span more than one line and can contain IF-THEN/ELSE
statements, as shown:
IF expression THEN command; <ELSE command;>
IF expression THEN DO group; <ELSE DO group;>
IF evaluates an expression. When the condition is true, the debugger command or
DO group in the THEN clause executes. An optional ELSE command gives an
alternative action if the condition is not true. You can use these arguments with IF:
expression
specifies a debugger expression. A non-zero, nonmissing result causes the
expression to be true. A result of zero or missing causes the expression to be
false.
command
specifies a single debugger command.
DO group
specifies a DO group.
Details
The BREAK command suspends execution of the DATA step at a specified statement.
Executing the BREAK command is called setting a breakpoint.
When the debugger detects a breakpoint, it does the following:
checks the AFTER count value, if present, and suspends execution if count
breakpoint activations have been reached
evaluates the WHEN expression, if present, and suspends execution if the condition
that is evaluated is true
suspends execution if neither an AFTER nor a WHEN clause is present
displays the line number at which execution is suspended
executes any commands that are present in a DO group
returns control to the user with a > prompt
28 Chapter 3 Dictionary of DATA Step Debugger Commands
If a breakpoint is set at a source line that contains more than one statement, the
breakpoint applies to each statement on the source line. If a breakpoint is set at a line
that contains a macro invocation, the debugger breaks at each statement generated by the
macro.
Example
Set a breakpoint at line 5 in the current program:
b 5
Set a breakpoint at line 45 that will be honored after every third execution of line 45:
b 45 after 3
Set a breakpoint at line 45 that will be honored after every third execution of that line
only when the values of both DIVISOR and DIVIDEND are 0:
b 45 after 3
when (divisor=0 and dividend=0)
Set a breakpoint at line 45 of the program and examine the values of variables
NAME and AGE:
b 45 do; ex name age; end;
Set a breakpoint at line 15 of the program. If the value of DIVISOR is greater than 3,
execute STEP. Otherwise, display the value of DIVIDEND.
b 15 do; if divisor>3 then st;
else ex dividend; end;
See Also
Commands:
DELETE on page 29
WATCH on page 39
CALCULATE
Evaluates a debugger expression and displays the result.
Category: Manipulating DATA Step Variables
Syntax
CALC expression
Required Argument
expression
specifies any debugger expression.
Restriction: Debugger expressions cannot contain functions.
DELETE 29
Details
The CALCULATE command evaluates debugger expressions and displays the result.
The result must be numeric.
Example
Add 1.1, 1.2, 3.4 and multiply the result by 0.5:
calc (1.1+1.2+3.4)*0.5
Calculate the values of the variable SALE minus the variable DOWNPAY and then
multiply the result by the value of the variable RATE. Divide that value by 12 and
add 50:
calc (((sale-downpay)*rate)/12)+50
See Also
Working with Expressions on page 11
DELETE
Deletes breakpoints or the watch status of variables in the DATA step.
Category: Manipulating Debugging Requests
Alias: D
Syntax
DELETE BREAK location
DELETE WATCH variable(s) | _ALL_
Required Arguments
BREAK
deletes breakpoints.
Alias: B
location
specifies a breakpoint location to be deleted. location can have one of these values:
_ALL_
all current breakpoints in the DATA step.
label
the statement after a statement label.
line-number
the number of a program line.
*
the breakpoint from the current line.
30 Chapter 3 Dictionary of DATA Step Debugger Commands
WATCH
deletes watched status of variables.
Alias: W
variable(s)
names one or more watched variables for which the watch status is deleted.
_ALL_
specifies that the watch status is deleted for all watched variables.
Example
Delete the breakpoint at the statement label
eoflabel
:
d b eoflabel
Delete the watch status from the variable ABC in the current DATA step:
d w abc
See Also
Commands:
BREAK on page 26
WATCH on page 39
DESCRIBE
Displays the attributes of one or more variables.
Category: Manipulating DATA Step Variables
Alias: DESC
Syntax
DESCRIBE variable(s) | _ALL_
Required Arguments
variable(s)
identifies one or more DATA step variables
_ALL_
indicates all variables that are defined in the DATA step.
Details
The DESCRIBE command displays the attributes of one or more specified variables.
DESCRIBE reports the name, type, and length of the variable, and, if present, the
informat, format, or variable label.
EXAMINE 31
Example
Display the attributes of variable ADDRESS:
desc address
ENTER
Assigns one or more debugger commands to the ENTER key.
Category: Tailoring the Debugger
Syntax
ENTER command-1< ; command-n>
Required Argument
command
specifies a debugger command.
Default: STEP 1
Details
The ENTER command assigns one or more debugger commands to the ENTER key.
Assigning a new command to the ENTER key replaces the existing command
assignment.
If you assign more than one command, separate the commands with semicolons.
Example
Assign the command STEP 5 to the ENTER key:
enter st 5
Assign the commands EXAMINE and DESCRIBE, both for the variable CITY, to
the ENTER key:
enter ex city; desc city
EXAMINE
Displays the value of one or more variables.
Category: Manipulating DATA Step Variables
Alias: E
32 Chapter 3 Dictionary of DATA Step Debugger Commands
Syntax
EXAMINE variable-1 <format-1> <...variable-n<format-n>>
EXAMINE _ALL_ <format>
Required Arguments
variable
identifies a DATA step variable.
_ALL_
identifies all variables that are defined in the current DATA step.
Optional Argument
format
identifies a SAS format or a user-created format.
Details
The EXAMINE command displays the value of one or more specified variables. The
debugger displays the value using the format currently associated with the variable,
unless you specify a different format.
Example
Display the values of variables N and STR:
ex n str
Display the elements i+1, j*2, and k-3 of the array CRR:
ex crr{i+1}; ex crr{j*2}; ex crr{k3}
Display the SAS date variable T_DATE with the DATE7. format:
ex t_date date7.
See Also
Commands:
DESCRIBE on page 30
GO
Starts or resumes execution of the DATA step.
Category: Controlling Program Execution
Alias: G
HELP 33
Syntax
GO <line-number | label>
Without Arguments
If you omit arguments, GO resumes execution of the DATA step and executes its
statements continuously until a breakpoint is encountered, until the value of a watched
variable changes, or until the DATA step completes execution.
Optional Arguments
line-number
gives the number of a program line at which execution is to be suspended next.
label
is a statement label. Execution is suspended at the statement following the statement
label.
Details
The GO command starts or resumes execution of the DATA step. Execution continues
until all observations have been read, a breakpoint specified in the GO command is
reached, or a breakpoint set earlier with a BREAK command is reached.
Example
Resume executing the program and execute its statements continuously:
g
Resume program execution and then suspend execution at the statement in line 104:
g 104
See Also
Commands:
JUMP on page 34
STEP on page 37
HELP
Displays information about debugger commands.
Category: Controlling the Windows
Syntax
HELP
34 Chapter 3 Dictionary of DATA Step Debugger Commands
Without Arguments
The HELP command displays a directory of the debugger commands. Select a command
name to view information about the syntax and usage of that command. You must enter
the HELP command from a window command line, from a menu, or with a function key.
JUMP
Restarts execution of a suspended program.
Category: Controlling Program Execution
Alias: J
Syntax
JUMP line-number | label
Required Arguments
line-number
indicates the number of a program line at which to restart the suspended program.
label
is a statement label. Execution resumes at the statement following the label.
Details
The JUMP command moves program execution to the specified location without
executing intervening statements. After executing JUMP, you must restart execution
with GO or STEP. You can jump to any executable statement in the DATA step.
CAUTION:
Do not use the JUMP command to jump to a statement inside a DO loop or to a
label that is the target of a LINK-RETURN group. In such cases, you bypass the
controls set up at the beginning of the loop or in the LINK statement, and unexpected
results can appear.
JUMP is useful in two situations:
when you want to bypass a section of code that is causing problems in order to
concentrate on another section. In this case, use the JUMP command to move to a
point in the DATA step after the problematic section.
when you want to re-execute a series of statements that have caused problems. In this
case, use JUMP to move to a point in the DATA step before the problematic
statements and use the SET command to reset values of the relevant variables to the
values that they had at that point. Then re-execute those statements with STEP or
GO.
Example
Jump to line 5:
j 5
LIST 35
See Also
Commands:
GO on page 32
STEP on page 37
LIST
Displays all occurrences of the item that is listed in the argument.
Category: Manipulating Debugging Requests
Alias: L
Syntax
LIST _ALL_ | BREAK | DATASETS | FILES | INFILES | WATCH
Required Arguments
_ALL_
displays the values of all items.
BREAK
displays breakpoints.
Alias: B
DATASETS
displays all SAS data sets used by the current DATA step.
FILES
displays all external files to which the current DATA step writes.
INFILES
displays all external files from which the current DATA step reads.
WATCH
displays watched variables.
Alias: W
Example
List all breakpoints, SAS data sets, external files, and watched variables for the
current DATA step:
l _all_
See Also
Commands:
36 Chapter 3 Dictionary of DATA Step Debugger Commands
BREAK on page 26
DELETE on page 29
WATCH on page 39
QUIT
Terminates a debugger session.
Category: Terminating the Debugger
Alias: Q
Syntax
QUIT
Without Arguments
The QUIT command terminates a debugger session and returns control to the SAS
session.
Details
SAS creates data sets built by the DATA step that you are debugging. However, when
you use QUIT to exit the debugger, SAS does not add the current observation to the data
set.
You can use the QUIT command at any time during a debugger session. After you end
the debugger session, you must resubmit the DATA step with the DEBUG option to
begin a new debugging session; you cannot resume a session after you have ended it.
SET
Assigns a new value to a specified variable.
Category: Manipulating DATA Step Variables
Alias: None
Syntax
SET variable=expression
Required Arguments
variable
specifies the name of a DATA step variable or an array reference.
expression
is any debugger expression.
Tip: expression can contain the variable name that is used on the left side of the
equal sign. When a variable appears on both sides of the equal sign, the debugger
STEP 37
uses the original value on the right side to evaluate the expression and stores the
result in the variable on the left.
Details
The SET command assigns a value to a specified variable. When you detect an error
during program execution, you can use this command to assign new values to variables.
This enables you to continue the debugging session.
Example
Set the variable A to the value of 3:
set a=3
Assign to the variable B the value 12345 concatenated with the previous value of B:
set b='12345' || b
Set array element CRR{1,2,3} to the result of the expression crr{1,1,2} + crr{1,1,3}:
set crr{1,2,3} = crr{1,1,2} + crr{1,1,3}
STEP
Executes statements one at a time in the active program.
Category: Controlling Program Execution
Alias: ST
Syntax
STEP <n>
Without Arguments
STEP executes one statement.
Optional Argument
n
specifies the number of statements to execute.
Details
The STEP command executes statements in the DATA step, starting with the statement
at which execution was suspended.
When you issue a STEP command, the debugger:
executes the number of statements that you specify
38 Chapter 3 Dictionary of DATA Step Debugger Commands
See Also
Commands:
GO on page 32
JUMP on page 34
SWAP
Switches control between the SOURCE window and the LOG window.
Category: Controlling the Windows
Alias: None
Syntax
SWAP
Without Arguments
The SWAP command switches control between the LOG window and the SOURCE
window when the debugger is running. When you begin a debugging session, the LOG
window becomes active by default. While the DATA step is still being executed, the
SWAP command enables you to switch control between the SOURCE and LOG window
so that you can scroll and view the text of the program and also continue monitoring the
program execution. You must enter the SWAP command from a window command line,
from a menu, or with a function key.
TRACE
Controls whether the debugger displays a continuous record of the DATA step execution.
Category: Manipulating Debugging Requests
Alias: T
Default: OFF
Syntax
TRACE <ON | OFF>
Without Arguments
Use the TRACE command without arguments to determine whether tracing is on or off.
WATCH 39
Optional Arguments
ON
prepares for the debugger to display a continuous record of DATA step execution.
The next statement that resumes DATA step execution (such as GO) records all
actions taken during DATA step execution in the DEBUGGER LOG window.
OFF
stops the display.
Comparisons
TRACE displays the current status of the TRACE command.
Example
Determine whether TRACE is ON or OFF:
trace
WATCH
Suspends execution when the value of a specified variable changes.
Category: Manipulating Debugging Requests
Alias: W
Syntax
WATCH variable(s)
Required Argument
variable(s)
specifies one or more DATA step variables.
Details
The WATCH command specifies a variable to monitor and suspends program execution
when its value changes.
Each time the value of a watched variable changes, the debugger does the following:
suspends execution
displays the line number where execution has been suspended
displays the variable's old value
displays the variable's new value
returns control to the user and displays the > prompt.
40 Chapter 3 Dictionary of DATA Step Debugger Commands
Example
Monitor the variable DIVISOR for value changes:
w divisor
41
Index
G
GO 32 Q
GO command QUIT 36
DATA step debugger 32 QUIT command
DATA step debugger 36
H
HELP 33 S
HELP command SET 36
DATA step debugger 33 SET command
DATA step debugger 36
SOURCE window
J DATA step debugger 38
JUMP 34 STEP 37
JUMP command STEP command
DATA step debugger 34 DATA step debugger 37
SWAP 38
SWAP command
L DATA step debugger 38
LIST 35
LIST command
DATA step debugger 35 T
LOG window TRACE 38
DATA step debugger 38 TRACE command
DATA step debugger 38
M
macro facility W
DATA step debugger with 12 WATCH 39
macros WATCH command
as debugging tools 12 DATA step debugger 39