SAS 9.1.3 Language Reference: Concepts, Third Edition, Volumes 1 and 2
Syntax
You can combine or modify WHERE expressions by using the logical operators (also called Boolean operators) AND, OR, and NOT. The basic syntax of a compound WHERE expression is as follows :
WHERE where-expression-1 logical-operator where-expression-n ;
AND | combines two conditions by finding observations that satisfy both conditions. For example: where skill eq 'java' and years eq 4; |
OR | combines two conditions by finding observations that satisfy either condition or both. For example: where skill eq 'java' or years eq 4; |
NOT | modifies a condition by finding the complement of the specified criteria. You can use the NOT logical operator in combination with any SAS and WHERE expression operator. And you can combine the NOT operator with AND and OR. For example: where skill not eq 'java' or years not eq 4; |
The logical operators and their equivalent symbols are shown in the following table:
Symbol | Mnemonic Equivalent |
---|---|
& | AND |
! or or | OR |
^or~or | NOT |
Processing Compound Expressions
When SAS encounters a compound WHERE expression (multiple conditions), the software follows rules to determine the order in which to evaluate each expression. When WHERE expressions are combined, SAS processes the conditions in a specific order:
-
The NOT expression is processed first.
-
Then the expressions joined by AND are processed.
-
Finally, the expressions joined by OR are processed.
For a complete discussion of the rules for evaluating compound expressions, see "Order of Evaluation in Compound Expressions" on page 124.
Using Parentheses to Control Order of Evaluation
Even though SAS evaluates logical operators in a specific order, you can control the order of evaluation by nesting expressions in parentheses. That is, an expression enclosed in parentheses is processed before one not enclosed . The expression within the innermost set of parentheses is processed first, followed by the next deepest, moving outward until all parentheses have been processed.
For example, suppose you want a list of all the Canadian sites that have both SAS/GRAPH and SAS/STAT software, so you issue the following expression:
where product='GRAPH' or product='STAT' and country='Canada';
The result, however, includes all sites that license SAS/GRAPH software along with the Canadian sites that license SAS/STAT software. To obtain the correct results, you can use parentheses, which causes SAS to evaluate the comparisons within the parentheses first, providing a list of sites with either product licenses, then the result is used for the remaining condition:
where (product='GRAPH' or product='STAT') and country='Canada';