A SAS constant is a number or a character string that indicates
a fixed value. Constants can be used as expressions in many SAS statements,
including variable assignment and IF-THEN statements. They can also be used
as values for certain options. Constants are also called literals.
The following are types of SAS
constants:
- character
- numeric
- date, time, and
datetime
- bit testing.
A character constant consists of 1 to 32,767 characters
and must be enclosed in quotation marks. Character constants can also be represented
in hexadecimal form.
In the following SAS
statement,
Tom
is a character constant:
if name='Tom' then do;
If a character constant includes a single quotation
mark, surround it with double quotation marks. For example, to specify the
character value
Tom's
as a constant, enter
name="Tom's"
You can also write a single quotation mark as two consecutive single
quotation marks and SAS treats it as one. You can then surround the character
constant with single quotation marks:
name='Tom''s'
The same principle
holds true for double quotation marks:
name="Tom""s"
- CAUTION:
- Matching quotation marks correctly is important.
Missing or extraneous quotation marks cause SAS to misread both the
erroneous statement and the statements that follow it. For example, in
name='O'Brien';
,
O
is the character value of NAME,
Brien
is extraneous, and
';
begins another quoted
string.
|
Comparing Character Constants and Character Variables |
It is important to remember that character constants are
enclosed in
quotation marks, but names of character variables are not. This distinction
applies wherever you can use a character constant, such as in titles, footnotes,
labels, and other descriptive strings; in option values; and in operating
environment-specific strings, such as file specifications and commands.
The following statements use character constants:
x='abc';
if name='Smith' then do;
The following statements use character variables:
x=abc;
if name=Smith then do;
In the second set of examples, SAS searches for variables
named ABC and SMITH, instead of constants.
Note: SAS distinguishes between
uppercase and lowercase when comparing quoted values. For example, the character
values
'Smith'
and
'SMITH'
are not equivalent.
SAS character constants can be expressed in hexadecimal notation. A
character hex constant is a string of an even number of hex characters enclosed
in single or double quotation marks, followed immediately by an X, as in this
example:
'534153'x
A comma can be used to make the string more readable, but it is not
part of and does not alter the hex value. If the string contains a comma,
the comma must separate an even number of hex characters within the string,
as in this example:
if value='3132,3334'x then do;
A numeric constant is a number that appears in a SAS statement.
Numeric constants can be presented in many forms, including
- standard notation
- scientific (E)
notation
- hexadecimal notation.
Most numeric constants are written just as numeric data values are.
The numeric constant in the following expression is 100:
part/all*100
Numeric constants expressed in standard notation can be integers, can
be specified with or without a plus or minus sign, and can include decimal
places, as in these examples:
In scientific notation, the number before the E is multiplied by the
power of ten that is indicated by the number after the E. For example, 2E4
is the same as 2x104 or 20,000. For numeric constants
larger than (1032 )-1, you must use scientific
notation. Additional examples follow:
A numeric constant that is expressed as a hexadecimal value starts with
a numeric digit (usually 0), can be followed by more hexadecimal digits, and
ends with the letter X. The constant can contain up to 16 valid hexadecimal
digits (0 to 9, A to F). The following are numeric hex constants:
You can use numeric hex constants in a DATA step, as follows:
data test;
input abend pib2.;
if abend=0c1x or abend=0b0ax then do;
... more SAS statements ...
run;
|
Date, Time, and Datetime Constants |
You can create a date constant, time constant,
or datetime constant by specifying the date or time in single
or double quotation marks, followed by a D (date), T (time), or DT (datetime)
to indicate the type of value. Use the following patterns to create date
and time constants:
- 'ddmmm<yy>yy'D or "ddmmm<yy>yy"D represents a SAS
date value:
-
date='1jan2006'd;
date='01jan04'd;
- 'hh:mm<:ss.s>'T or "hh:mm<:ss.s>"T represents a SAS time
value:
-
time='9:25't;
time='9:25:19pm't;
- 'ddmmm<yy>yy:hh:mm<:ss.s>'DT or
"ddmmm<yy>yy:hh:mm<:ss.s>"DT represents a SAS datetime value:
-
if begin='01may04:9:30:00'dt then end='31dec90:5:00:00'dt;
dtime='18jan2002:9:27:05am'dt;
For more information on SAS dates, refer to
Dates, Times, and Intervals.
Bit
masks are used in bit testing to compare internal bits
in a value's representation. You can perform bit testing on both character
and numeric variables. The general form of the operation is:
expression comparison-operator
bit-mask
|
The following are the components of the bit-testing operation:
- expression
- can be any valid SAS expression. Both character and numeric
variables can be bit tested. When SAS tests a character value, it aligns the
left-most bit of the mask with the left-most bit of the string; the test proceeds
through the corresponding bits, moving to the right. When SAS tests a numeric
value, the value is truncated from a floating-point number to a 32-bit integer.
The right-most bit of the mask is aligned with the right-most bit of the number,
and the test proceeds through the corresponding bits, moving to the left.
- comparison-operator
- compares an expression with the bit mask. Refer to Comparison Operators for a
discussion of these operators.
- bit-mask
- is a string of 0s, 1s, and periods in quotation marks that
is immediately followed by a B. Zeros test whether the bit is off; ones test
whether the bit is on; and periods ignore the bit. Commas and blanks can be
inserted in the bit mask for readability without affecting its meaning.
- CAUTION:
- Truncation can occur when
SAS uses a bit mask.
If
the expression is longer than the
bit mask, SAS truncates the expression before it compares it with the bit
mask. A false comparison may result. An expression's length (in bits) must
be less than or equal to the length of the bit mask. If the bit mask is longer
than a character expression, SAS prints a warning in the log, stating that
the bit mask is truncated on the left, and continues processing.
The following example tests a character variable:
if a='..1.0000'b then do;
If the third bit of A (counting from the left) is on, and the fifth
through eighth bits are off, the comparison is true and the expression result
is 1. Otherwise, the comparison is false and the expression result is 0. The
following is a more detailed example:
data test;
input @88 bits $char1.;
if bits='10000000'b
then category='a';
else if bits='01000000'b
then category='b';
else if bits='00100000'b
then category='c';
run;
Note: Bit masks cannot be used as bit literals in assignment
statements. For example, the following statement is not valid:
x='0101'b; /* incorrect */
The $BINARYw. and BINARYw. formats and the $BINARYw.,
BINARYw.d, and BITSw.d informats can be useful for
bit testing. You can use them to convert character and numeric values to
their binary values, and vice versa, and to extract specified bits from input
data. See SAS Language Reference: Dictionary for complete descriptions of these formats and informats.
Copyright 1999 by SAS Institute Inc., Cary, NC, USA. All rights reserved.