# What is SAS?

Statistical Analysis Software
developed by SAS Institute in Cary, NC

Main Uses of SAS
      

data entry, retrieval, and management report writing and graphics statistical and mathematical analysis business planning, forecasting, and decision support operations research and project management quality improvement applications development.

SAS Training

1

SAS is composed of three windows

Program Editor where you write and submit programs

Log where SAS displays messages which indicates any errors that may be in a program

Output Where result appear after submitting programs

SAS Training

2

Program Editor Window

Explore r and Results Window

Write your code in this window

SAS Training

3

Log Window

Log Window View the Log Created by the Program Execution

SAS Training

4

Output Window

Output Window View the Values of a Dataset in this Window

SAS Training

5

SAS Dataset, Variables and Observations

 

SAS expects your data to be in a special form. This special form is called a SAS data set The SAS data set is a tabular form with Variables and Observations The rows are the Observations The columns are the Variables
SAS Training 6

Example of a SAS Data set
ID
1 2 53 54 55 56 57 58 Mary

Variables N HT AME 42 Lucy
Tom Dan Tim 46 43 45 42 48

WT
41 54 . 56 48 43

Observation s

3 4 5 6

•ID, HT and WT are Numeric Variables •NAME is a Character Variable •Character Variables if blank are represented by a space •Numeric Variables if blank are represented by a ‘.’ SAS Training 7

Building Blocks of a SAS Program
A SAS program is constructed from two building blocks 2) DATA Step 3) PROC Step A typical SAS program starts with a DATA step to create a SAS dataset and then passes on to the PROC step to do the analysis.

SAS Training

8

Basic Components of SAS, Continued

Data Step
SAS statement that read data, create new datasets or variables, modify datasets, perform calculation.

Procedures
SAS statements that can perform statistical analyses, create & print reports & graphs

SAS Training

9

Basic Components of SAS

Every SAS program is constructed using the Data Step and/or Procedures e.g. DATA distance; miles = 23; DATA Step kilometer = 1.61 * miles; RUN; PROC PRINT DATA = distance; RUN;

PROC Step

Any combination of Data Step and/or Procedures may be used Run statement should be used throughout the program
SAS Training 10

Difference Between a DATA step and a PROC step
DATA steps steps

PROC
Begin with PROC

Begin with DATA statements statements

Read and modify data Perform specific analysis or function Note: The table is not meant to imply that PROC can never create  Produce results or report SAS Create a (some do), setthat DATA step can never create data sets SAS data or

reports (they can) But it is much easier to write SAS programs if one can understand the basic functions of DATA and PROC steps.
SAS Training

11

Execution of SAS data set
 

Data Steps execute line by line and observation by observation SAS takes the first observation and runs it all the way through the data step (line by line) before looping back to pick up the second observation SAS sees one observation at a time.
DATA step Line 1 Line 2 Line 3 Line 4 Line 5 SAS Training Output data set Observation 1 Observation 2 Observation 3

Input data set Observation 1 Observation 2 Observation 3

12

Rules for SAS programs

Every SAS statement end with a semicolon. e.g. Data test; Names must be 8 characters or fewer in length. e.g. valid names:- distance invalid names is distance_a Names must be start with letter or an underscore (_). Valid Names are e.g. distance, _abc are valid. Names can contain only letters, numerals and the underscore (_). No %\$!*&#@ please.

SAS Training

13

Rules for SAS program Statements
SAS program statements can  Be in upper or lower case  Continue on the next line  Be on the same line as other statements  Start in any column

SAS Training

14

SAS can read data and create a data set from external files like txt, csv, etc.
Basic Code Structure DATA dataset-name; INFILE file-specification <options> <host-options>; INPUT <specification(s)><@|@@>; Run;

SAS Training

15

A SAS data set can also be created bytyping values in the SAS program editor using DATALINES;
Basic Code Structure

DATA dataset-name; INPUT <specification(s)><@|@@>; DATALINES; ………….. …………..’ ; Run;
SAS Training 16

INPUT
Describes the arrangement of values in the input data record and assigns input values to the corresponding SAS variables
INPUT <specification(s)><@|@@>;

SAS Training

17

INPUT (SPECIFICATIONS)
variable - names a variable that is assigned input values \$ - indicates to store the variable value as a character value rather than as a numeric value. pointer-control - moves the input pointer to a specified line or column in the input buffer. informat. - specifies an informat to use to read the variable value
SAS Training 18

EXAMPLE 1 (EXTERNAL FILE)
Dat.txt in C:/ Mary 24 Suzan 34

Data newdata; Infile ‘C:/dat.txt’; Input name \$ age; Run;

Resulting SAS data set (newdata)

SAS Training

19

INPUT (DATALINES)
Data newdata; Input name \$ age; DATALINES; Mary 24 Suzan 32 ; Run;
SAS Training 20

INPUT TYPES
INPUT, COLUMN : Reads input values from specified columns and assigns them to the corresponding SAS variables Syntax: INPUT variable <\$> start-column <-end-column> <.decimals> <@ | @@>;
SAS Training 21

Example
data scores; input name \$ 1-18 score1 25-27 score2 30-32 score3 35-37; datalines; Joseph 11 32 76 Mitchel 13 29 82 Sue Ellen 14 27 74 ; Run;
SAS Training 22

INPUT TYPES
INPUT, Formatted : Reads input values with specified informats and assigns them to the corresponding SAS variables.

Syntax:
INPUT <pointer-control> variable informat. <@ | @@>;
SAS Training 23

Example
data sales; infile file-specification; input item \$10. +5 jan comma5. +5 feb comma5. +5 mar comma5.; run;

It can read these input data records: ----+----1----+----2----+----3----+----4 trucks 1,382 2,789 3,556 vans 1,265 2,543 3,987 sedans 2,391 3,011 3,658
SAS Training 24

INPUT TYPES
INPUT, List : Scans the input data record for input values and assigns them to the corresponding SAS variables. Syntax : INPUT <pointer-control> variable <\$> <&> <@ | @@>;

SAS Training

25

Example
data scores; input name \$ score1 score2 score3 team \$; datalines; Joe 11 32 76 red Mitchel 13 29 82 blue Susan 14 27 74 green ;

SAS Training

26

Merge Statement

 

The MERGE statement is flexible and has a variety of uses in SAS programming One-to-One Match Merge

SAS Training

27

One-to-one matching

To combine variables from several data sets where there is a one-toone correspondence between the observations in each of the data sets, list the data sets to be joined on a merge statement.

SAS Training

28

Match Merge

When there is not an exact one-toone correspondence between data sets to be merged, the variables to use to identify matching observations can be specied on a by statement. The data sets being merged must be sorted by the variables specified on the by statement.
SAS Training 29

Example – One to One Merge

SAS Training

30

Example – Match Merge

SAS Training

31

Example – Match Merge

SAS Training

32

Manipulating result of merge statement with IN values * IN option indicates which data set record came from;
DATA new; MERGE old1 (IN=INOLD1) old2 (IN=IN0LD2); BY NAME IF INOLD1 and INOLD2;RUN;

* If statement keeps only those records that are in both data sets;

SAS Training

33

SAS Functions

Definition of Functions
A SAS function performs a computation or system manipulation on arguments and returns a value. Most functions use arguments supplied by the user, but a few obtain their arguments from the operating environment. In base SAS software, you can use SAS functions in DATA step programming statements, in a WHERE expression, in macro language statements, in PROC REPORT, and in Structured Query Language (SQL).

SAS Training

34

Syntax of Functions

The syntax of a function is
function-name (argument-1<. . .,argument-n>)

function-name (OF variable-list) where function-name names the function. argument can be a variable name, constant, or any SAS expression, including another function. The number and kind of arguments allowed are described with individual functions. Multiple arguments are separated by a comma.

SAS Training

35

Selected SAS Functions

Numeric Functions

ROUND : Rounds to the nearest round-off unit.
Syntax ROUND(argument,round-off-unit) Arguments argument is numeric. round-off-unit is numeric and nonnegative.

Details : The ROUND function returns a value rounded to the nearest round-off unit. If round-off-unit is not provided, a default value of 1 is used and argument is rounded to the nearest integer.
SAS Training 36

Selected SAS Functions
Function ROUND Examples : SAS Statement var1=223.456; x=round(var1,1); put x 9.5; var2=223.456; x=round(var2,.01); put x 9.5; x=round(223.456,100); put x 9.5; x=round(223.456); put x 9.5; x=round(223.456,.3); put x 9.5; Results 223.00000 223.46000 200.00000 223.00000 223.33333

SAS Training

37

Selected SAS Functions

SUM : Returns the sum of the nonmissing arguments.
Syntax SUM(argument,argument, ...) Arguments argument is numeric. The argument list can consist of a variable list, which is preceded by OF.

SAS Training

38

Selected SAS Functions
Function SUM Examples : SAS Statement x1=sum(4,9,3,8); x2=sum(4,9,3,8,.); x3=sum(of x1-x2); x4=sum(of x1-x3, 5); y1=20; y2=30; x5=sum(of y:); Results 24 24 48 101 50

SAS Training

39

Selected SAS Functions

MEAN : Returns the arithmetic mean (average)
Syntax

MEAN(argument,argument, . . .) Arguments argument is numeric. At least one argument is required. The argument list may consist of a variable list, which is preceded by OF. Examples : SAS Statement Results x1=mean(2,.,.,6); x2=mean(1,2,3,2); x3=mean(of x1-x2); 4 2 3
40

SAS Training

Selected SAS Functions

INT : Returns the integer value.
Syntax INT(argument) Arguments argument is numeric. Details The INT function returns the integer portion of the argument (truncates the decimal portion). If the value of argument is positive, INT(argument) has the same result as FLOOR(argument). If the value of argument is negative, INT(argument) has the same result as CEIL(argument).

SAS Training

41

Selected SAS Functions
Function INT Examples : SAS Statement var1=2.1; x=int(var1); put x=; var2=-2.4; y=int(var2); put y=; a=int(3); put a=; b=int(-1.6); put b=; Results 2

-2

3 -1

SAS Training

42

Selected SAS Functions

LAG : Returns values from a queue.
Syntax LAG<n>(argument) Arguments n specifies the number of lagged values. argument is numeric or character. Details The LAG functions, LAG1, LAG2, . . . , LAG100 return values from a queue. LAG1 can also be written as LAG. A LAGn function stores a value in a queue and returns a value stored previously in that queue.
SAS Training 43

Selected SAS Functions
Function LAG Examples :  Creating a Data Set The following program creates a data set that contains the values for X, Y, and Z. options pagesize=25 linesize=64 nodate pageno=1; data one; input X @@; Y=lag1(x); Z=lag2(x); datalines; 123456; proc print; title 'Lag Output'; run;
SAS Training 44

Selected SAS Functions
Function LAG Examples :  Creating a Data Set :LAG1 returns one missing value and the values of X (lagged once). LAG2 returns two missing values and the values of X (lagged twice). Lag Output Obs 1 2 3 4 5 6 X 1 2 3 4 5 6 Y . 1 2 3 4 5 Z . . 1 2 3 4 1

SAS Training

45

Selected SAS Functions

Character Functions

UPCASE: Converts all letters in an argument to uppercase.
Syntax

UPCASE(argument) Arguments argument specifies any SAS character expression. Details : The UPCASE function copies a character argument, converts all lowercase letters to uppercase letters, and returns the altered value as a result.

SAS Training

46

Selected SAS Functions
Function UPCASE Examples : SAS Statement name=upcase('John B. Smith'); put name; Results JOHN B. SMITH

SAS Training

47

Selected SAS Functions

LOWCASE: Converts all letters in an argument to lowercase.
Syntax

LOWCASE(argument) Arguments argument specifies any SAS character expression. Details : The LOWCASE function copies a character argument, converts all uppercase letters to lowercase letters, and returns the altered value as a result.

SAS Training

48

Selected SAS Functions
Function LOWCASE Examples : SAS Statement x='INTRODUCTION'; y=lowcase(x); put y; Results introduction

SAS Training

49

Selected SAS Functions

SUBSTR (left of=): Replaces character value contents
Syntax SUBSTR(argument,position<,n>)=characters-to-replace Arguments argument specifies a character variable. position specifies a numeric expression that is the beginning character position. n specifies a numeric expression that is the length of the substring that will be replaced. characters-to-replace specifies a character expression that will replace the contents of argument.
SAS Training 50

Selected SAS Functions
Details When you use the SUBSTR function on the left side of an assignment statement, SAS places the value of argument with the expression on right side. SUBSTR replaces n characters starting at the character you specify in position. Function SUBSTR(left of =) Examples : SAS Statement a='KIDNAP'; substr(a,1,3)='CAT'; put a; b=a; substr(b,4)='TY'; put b; Results CATNAP

CATTY

SAS Training

51

Selected SAS Functions

SUBSTR(right of=):Extracts a substring from an argument
Syntax <variable=>SUBSTR(argument,position<,n>) Arguments variable specifies a valid SAS variable name. argument specifies any SAS character expression. position specifies a numeric expression that is the beginning character position. n specifies a numeric expression that is the length of the substring to extract.
SAS Training 52

Selected SAS Functions
Details The SUBSTR function returns a portion of an expression that you specify in argument. The portion begins with the character specified by position and is the number of characters specified by n. A variable that is created by SUBSTR obtains its length from the length of argument. Function SUBSTR(right of =) Examples : SAS Statement Results ----+----1----+----2 date='06MAY98'; month=substr(date,3,3); year=substr(date,6,2); put @1 month @5 year; MAY 98

SAS Training

53

Selected SAS Functions

SCAN : Selects a given word from a character expression.
Syntax SCAN(argument,n<, delimiters>) Arguments argument specifies any character expression. n specifies a numeric expression that produces the number of the word in the character string you want SCAN to select. delimiters specifies a character expression that produces characters that you want SCAN to use as word separators in the character string.

SAS Training

54

Selected SAS Functions
Details Leading delimiters before the first word in the character string do not effect SCAN. If there are two or more contiguous delimiters, SCAN treats them as one. Function SCAN Examples : SAS Statement arg='ABC.DEF(X=Y)'; word=scan(arg,3); put word; word=scan(arg,-3); put word; Results X=Y

ABC

SAS Training

55

Selected SAS Functions

TRIM: Removes trailing blanks from character expressions and returns one blank if the expression is missing.

Syntax TRIM(argument) Arguments argument specifies any SAS character expression. Details : TRIM copies a character argument, removes all trailing blanks, and returns the trimmed argument as a result. If the argument is blank, TRIM returns one blank. TRIM is useful for concatenating because concatenation does not remove trailing blanks. Assigning the results of TRIM to a variable does not affect the length of the receiving variable. If the trimmed value is shorter than the length of the receiving variable, SAS pads the value with new blanks as it assigns it to the variable.
SAS Training 56

Selected SAS Functions
Function TRIM Examples : 2. Removing Trailing Blanks These statements and this data line produce these results: data test; input part1 \$ 1-10 part2 \$ 11-20; hasblank=part1||part2; noblank=trim(part1)||part2; put hasblank; put noblank; datalines; Data Line Results apple sauce ----+----1----+----2 apple sauce applesauce
SAS Training 57

Selected SAS Functions

TRANSLATES : Replaces specific characters in a character expression.
Syntax TRANSLATE(source,to-1,from-1<,...to-n,from-n>) Arguments source specifies the SAS expression that contains the original character value. to specifies the characters that you want TRANSLATE to use as substitutes. from specifies the characters that you want TRANSLATE to replace.

SAS Training

58

Selected SAS Functions
Details The maximum number of pairs of to and from arguments that TRANSLATE accepts depends on the operating environment you use to run SAS. There is no functional difference between using several pairs of short arguments, or fewer pairs of longer arguments. Function TRANSLATE Examples : SAS Statement x=translate('XYZW','AB','VW '); put x; Results XYZB

SAS Training

59

Selected SAS Functions

LENGTH: Returns the length of an argument.

Syntax LENGTH(argument) Arguments argument specifies any SAS expression. Details : The LENGTH function returns an integer that represents the position of the right-most nonblank character in the argument. If the value of the argument is missing, LENGTH returns a value of 1. If the argument is a numeric variable (either initialized or uninitialized), LENGTH returns a value of 12 and prints a note in the SAS log that the numeric values have been converted to character values.

SAS Training

60

Selected SAS Functions
Function LENGTH Examples : SAS Statements len=length('ABCDEF'); put len; Results 6

SAS Training

61

Selected SAS Functions

INDEX: Searches a character expression for a string of characters.
Syntax INDEX(source,excerpt) Arguments source specifies the character expression to search. excerpt specifies the string of characters to search for in the character expression. Details : The INDEX function searches source, from left to right, for the first occurrence of the string specified in excerpt, and returns the position in source of the string's first character. If the string is not found in source, INDEX returns a value of 0. If there are multiple occurrences of the string, INDEX returns only the position of the first occurrence.
SAS Training 62

Selected SAS Functions
Function INDEX Examples : SAS Statements a='ABC.DEF (X=Y)'; b='X=Y'; x=index(a,b); put x; Results 10

SAS Training

63

SAS Statements

Definition of Statements
A SAS statement is a series of items that may include keywords, SAS names, special characters, and operators. All SAS statements end with a semicolon. A SAS statement either requests SAS to perform an operation or gives information to the system. There are two kinds of SAS statements:

those used in DATA step programming those that are global in scope and can be used anywhere in a SAS program.

SAS Training

64

Selected SAS Statements

DATA step Statements

DELETE : Stops processing the current observation.
Syntax DELETE; Without Arguments When DELETE executes, the current observation is not written to a data set, and SAS returns immediately to the beginning of the DATA step for the next iteration. Details : The DELETE statement is often used in a THEN clause of an IF-THEN statement or as part of a conditionally executed DO group.

SAS Training

65

Selected SAS Statements
Statement DELETE Examples : Example 1: Using the DELETE Statement as Part of an IF-THEN Statement When the value of LEAFWT is missing, the current observation is deleted: if leafwt=. then delete; Example 2: Using the DELETE Statement to Subset Raw Data data topsales; infile file-specification; input region office product yrsales; if yrsales<100000 then delete; run;

SAS Training

66

Selected SAS Statements

DO : Designates a group of statements to be executed as a unit.
Syntax DO; ...more SAS statements... END; Without Arguments Use the DO statement for simple DO group processing. Details : The DO statement is the simplest form of DO group processing. The statements between the DO and END statements are called a DO group. You can nest DO statements within DO groups.
SAS Training 67

Selected SAS Statements
Statement DO Examples : In this simple DO group, the statements between DO and END are performed only when YEARS is greater than 5. If YEARS is less than or equal to 5, statements in the DO group do not execute, and the program continues with the assignment statement that follows the ELSE statement. if years>5 then do; months=years*12; put years= months=; end; else yrsleft=5-years;

SAS Training

68

Selected SAS Statements

DROP : Excludes variables from output SAS data sets Syntax
DROP variable-list; Arguments variable-list specifies the names of the variables to omit from the output data set. Details : The DROP statement applies to all the SAS data sets that are created within the same DATA step and can appear anywhere in the step. The variables in the DROP statement are available for processing in the DATA step. If no DROP or KEEP statement appears, all data sets that are created in the DATA step contain all variables. Do not use both DROP and KEEP statements within the same DATA step.
SAS Training 69

Selected SAS Statements
Statement DROP Examples :

• •

These examples show the correct syntax for listing variables with the DROP statement: drop time shift batchnum; drop grade1-grade20; In this example, the variables PURCHASE and REPAIR are used in processing but are not written to the output data set INVENTRY: data inventry; drop purchase repair; infile file-specification; input unit part purchase repair; totcost=sum(purchase,repair); run;

SAS Training

70

Selected SAS Statements

KEEP : Includes variables in output SAS data sets
Syntax KEEP variable-list; Arguments variable-list specifies the names of the variables to write to the output data set. Details : The KEEP statement causes a DATA step to write only the variables that you specify to one or more SAS data sets. The KEEP statement applies to all SAS data sets that are created within the same DATA step and can appear anywhere in the step. If no KEEP or DROP statement appears, all data sets that are created in the DATA step contain all variables.

SAS Training

71

Selected SAS Statements
Statement KEEP Examples :

• •

These examples show the correct syntax for listing variables in the KEEP statement: keep name address city state zip phone; keep rep1-rep5; This example uses the KEEP statement to include only the variables NAME and AVG in the output data set. The variables SCORE1 through SCORE20, from which AVG is calculated, are not written to the data set AVERAGE. data average; keep name avg; infile file-specification; input name \$ score1-score20; avg=mean(of score1-score20); run;
SAS Training 72

Selected SAS Statements

LABEL : Assigns descriptive labels to variables
Syntax LABEL variable-1='label-1' . . . <variable-n='label-n'>; LABEL variable-1=' ' . . . <variable-n=' '>; Arguments variable names the variable that you want to label 'label' specifies a label of up to 256 characters, including blanks. '' removes a label from a variable. Enclose a single blank space in quotation marks to remove an existing label.

SAS Training

73

Selected SAS Statements
Details Using a LABEL statement in a DATA step permanently associates labels with variables by affecting the descriptor information of the SAS data set that contains the variables. You can associate any number of variables with labels in a single LABEL statement.

Statement LABEL Examples :

• • • •

Specifying Labels Here are several LABEL statements: label compound='Type of Drug'; label date="Today's Date "; label n='Mark''s Experiment Number'; label score1="Grade on April 1 Test" score2="Grade on May 1 Test";
SAS Training 74

Selected SAS Statements

Removing a Label This example removes an existing label: data rtest; set rtest; label x=' '; run;

SAS Training

75

Selected SAS Statements

LENGTH : Specifies the number of bytes for storing variables
Syntax LENGTH variable-specification(s) <DEFAULT=n>; Arguments variable-specification is a required argument and has the form where variable names one or more variables that are to be assigned a length. This includes any variables in the DATA step, including those dropped from the output data set. \$ indicates that the preceding variables are character variables. length specifies a numeric constant that is the number of SAS Training 76 bytes used for storing variable values.

Selected SAS Statements
DEFAULT=n changes the default number of bytes that SAS uses to store the values of any newly created numeric variables. Details In general, the length of a variable depends on  whether the variable is numeric or character  how the variable was created  whether a LENGTH statement is present.

SAS Training

77

Selected SAS Statements

RENAME : Specifies new names for variables in output SAS data sets

Syntax RENAME old-name-1=new-name-1 . . . <old-name-n=newname-n>; Arguments old-name specifies the name of a variable or variable list as it appears in the input data set, or in the current DATA step for newly created variables. new-name specifies the name or list to use in the output data set. Details The RENAME statement allows you to change the names of one or more variables, variables in a list, or a combination of variables and variable lists. The new variable names are written to the output data set only. Use the old variable names in programming statements for the current DATA step. RENAME SAS Training 78 applies to all output data sets.

Selected SAS Statements
Statement RENAME Examples :

These examples show the correct syntax for renaming variables using the RENAME statement
• • •

rename street=address; rename time1=temp1 time2=temp2 time3=temp3; rename name=Firstname score1-score3=Newscore1-Newscore3; This example uses the old name of the variable in program statements. The variable Olddept is named Newdept in the output data set, and the variable Oldaccount is named Newaccount. rename Olddept=Newdept Oldaccount=Newaccount; if Oldaccount>5000; keep Olddept Oldaccount items volume;

SAS Training

79

Selected SAS Statements

WHERE : Selects observations from SAS data sets

that meet a particular condition

Syntax WHERE where-expression-1 < logical-operator where-expression-n>; Arguments where-expression is an arithmetic or logical expression that generally consists of a sequence of operands and operators. logical-operator can be AND, AND NOT, OR, or OR NOT. Details :Using the WHERE statement may improve the efficiency of your SAS programs because SAS is not required to read all observations from the input data set. The WHERE statement cannot be executed conditionally; that is, you cannot use it as part of an IF-THEN statement. WHERE statements can contain multiple WHERE expressions that are joined by logical operators.
SAS Training 80

Selected SAS Statements
Statement WHERE Examples :

Basic WHERE Statement Usage This DATA step produces a SAS data set that contains only observations from data set CUSTOMER in which the value for NAME begins with Mac and the value for CITY is Charleston or Atlanta data testmacs; set customer; where substr(name,1,3)='Mac' and (city='Charleston' or city='Atlanta'); run; Using Operators Available Only in the WHERE Statement • Using BETWEEN-AND: where empnum between 500 and 1000; • Using CONTAINS: where company ? 'bay'; where company contains 'bay';
SAS Training 81

Selected SAS Statements

IF-THEN/ELSE : Executes a SAS statement for

observations that meet specific conditions

Syntax IF expression THEN statement; <ELSE statement;> Arguments expression is any SAS expression and is a required argument. statement can be any executable SAS statement or DO group.

SAS Training

82

Selected SAS Statements
Details :SAS evaluates the expression in an IF-THEN statement to produce a result that is either nonzero, zero, or missing. A nonzero and nonmissing result causes the expression to be true; a result of zero or missing causes the expression to be false. If the conditions that are specified in the IF clause are met, the IF-THEN statement executes a SAS statement for observations that are read from a SAS data set, for records in an external file, or for computed values. An optional ELSE SAS Training 83

Selected SAS Statements
Statement IF-THEN\ELSE Examples : These examples show different ways of specifying the IF-THEN/ELSE statement • if x then delete;

if status='OK' and type=3 then count+1; if age ne agecheck then delete; if x=0 then if y ne 0 then put 'X ZERO, Y NONZERO'; else put 'X ZERO, Y ZERO'; else put 'X NONZERO';

SAS Training

84

Selected SAS Statements

BY : Controls the operation of a SET, MERGE,

MODIFY, or UPDATE statement in the DATA step and sets up special grouping variables
Syntax BY <DESCENDING> <GROUPFORMAT> variable-1 <. . .<DESCENDING> <GROUPFORMAT> variable-n> <NOTSORTED>; Arguments DESCENDING indicates that the data sets are sorted in descending order by the variable that is specified. DESCENDING means largest to smallest numerically, or reverse alphabetical for character variables.

SAS Training

85

Selected SAS Statements
variable names each variable by which the data set is sorted or indexed. These variables are referred to as BY variables for the current DATA or PROC step. NOTSORTED specifies that observations with the same BY value are grouped together but are not necessarily sorted in alphabetical or numeric order. Details :In a DATA Step the BY statement applies only to the SET, MERGE, MODIFY, or UPDATE statement that precedes it in the DATA step, and only one BY statement can accompany each of these statements in a DATA step In PROC step you can specify the BY statement with some SAS procedures to modify their action.

SAS Training

86

Selected SAS Statements

Statement BY Examples : Specifying One or More BY Variables

Observations are in ascending order of the variable DEPT: by dept;

Specifying Sort Order

Observations are in ascending order of SALESREP and, within each SALESREP value, in descending order of the values of JANSALES: by salesrep descending jansales; BY-Processing with Nonsorted Data Observations are ordered by the name of the month in which the expenses were accrued: by month notsorted;
SAS Training 87

Selected SAS Statements

RETAIN : Causes a variable that is created by an

INPUT or assignment statement to retain its value from one iteration of the DATA step to the next
Syntax RETAIN <element-list(s) <initial-value(s) | (initial-value-1) | (initial-value-list-1) > < . . . element-list-n <initial-value-n | (initial-value-n ) | (initial-value-list-n)>>>; Without Arguments If you do not specify an argument, the RETAIN statement causes the values of all variables that are created with INPUT or assignment statements to be retained from one iteration of the DATA step to the next.

SAS Training

88

Selected SAS Statements
Arguments element-list specifies variable names, variable lists, or array names whose values you want retained. initial-value specifies an initial value, numeric or character, for one or more of the preceding elements. (initial-value-list) specifies an initial value, numeric or character, for individual elements in the preceding list. SAS matches the first value in the list with the first variable in the list of elements, the second value with the second variable, and so on.

SAS Training

89

Selected SAS Statements
Details: Without a RETAIN statement, SAS automatically sets variables that are assigned values by an INPUT or assignment statement to missing before each iteration of the DATA step. Use a RETAIN statement to specify initial values for individual variables, a list of variables, or members of an array. If a value appears in a RETAIN statement, variables that appear before it in the list are set to that value initially. (If you assign different initial values to the same variable by naming it more than once in a RETAIN statement, SAS uses the last value.) You can also use RETAIN to assign an initial value other than the default value of 0 to a variable whose value is assigned by a sum statement.
SAS Training 90

Selected SAS Statements

Statement RETAIN Examples : This RETAIN statement retains the values of variables MONTH1 through MONTH5 from one iteration of the DATA step to the next: retain month1-month5;

This RETAIN statement retains the values of nine variables and sets their initial values: retain month1-month5 1 year 0 a b c 'XYZ'; The values of MONTH1 through MONTH5 are set initially to 1; YEAR is set to 0; variables A, B, and C are each set to the character value XYZ. This RETAIN statement assigns the initial value 1 to the variable MONTH1 only: retain month1-month5 (1); Variables MONTH2 through MONTH5 are set to missing initially.
SAS Training

91

Selected SAS Statements

OUTPUT : Writes the current observation to a SAS

data set

Syntax OUTPUT<data-set-name(s)>; Without Arguments Using OUTPUT without arguments causes the current observation to be written to all data sets that are named in the DATA statement. Arguments data-set-name specifies the name of a data set to which SAS writes the observation. Details: The OUTPUT statement tells SAS to write the current observation to a SAS data set immediately, not at the end of the DATA step. If no data set name is specified in the OUTPUT statement, the observation is written to the data set or data sets that are listed in the DATA statement.
SAS Training 92

Selected SAS Statements
Statement OUTPUT Examples : These examples show how you can use an OUTPUT statement:

/* writes the current observation */ /* to a SAS data set */ output; /* writes the current observation */ /* when a condition is true */

if deptcode gt 2000 then output;

/* writes an observation to data */ /* set MARKUP when the PHONE */ /* value is missing */ if phone=. then output markup;

SAS Training

93

Selected SAS Statements

PUT : Writes lines to the SAS log, to the SAS

procedure output file, or to an external file that is specified in the most recent FILE statement
Syntax PUT <specification(s)><_ODS_><@|@@>; Without Arguments The PUT statement without arguments is called a null PUT statement. The null PUT statement  writes the current output line to the current file, even if the current output line is blank.  releases an output line that is being held by a previous PUT statement with a trailing @.

SAS Training

94

Selected SAS Statements

Global Statements

LIBNAME : Associates or disassociates a SAS data library with a libref (a shortcut name); clears one or all librefs; lists the characteristics of a SAS data library; concatenates SAS data libraries; implicitly concatenates SAS catalogs.
Syntax 1. LIBNAME libref <engine> 'SAS-data-library' < options > <engine/host-options>;

SAS Training

95

Selected SAS Statements
Arguments libref is a shortcut name or a "nickname" for the aggregate storage location where your SAS files are stored. It is any SAS name when you are assigning a new libref. When you are disassociating a libref from a SAS data library or when listing attributes, specify a libref that was previously assigned. 'SAS-data-library' must be the physical name for the SAS data library. The physical name is the name that is recognized by the operating environment. Enclose the physical name in single or double quotation marks. library-specification is two or more SAS data libraries, specified by physical names, previously-assigned librefs, or a combination of the two. Separate each specification with either a blank or a comma and enclose the entire list in parentheses.
SAS Training 96

Selected SAS Statements
engine is an engine name. Details: The association between a libref and a SAS data library lasts only for the duration of the SAS session or until you change it or discontinue it with another LIBNAME statement. The simplest form of the LIBNAME statement specifies only a libref and the physical name of a SAS data library:

SAS Training

97

Selected SAS Statements

Statement LIBNAME Examples : Assigning and Using a Libref This example assigns the libref SALES to an aggregate storage location that is specified in quotation marks as a physical pathname. The DATA step creates SALES.QUARTER1 and stores it in that location. The PROC PRINT step references it by its two-level name, SALES.QUARTER1

libname sales 'SAS-data-library'; data sales.quarter1; infile 'your-input-file; input salesrep \$20. +6 jansales febsales marsales; run; proc print data=sales.quarter1; run;
SAS Training 98

Selected SAS Statements

TITLE : Specifies title lines for SAS output

Syntax TITLE <n> <'text' | "text">; Without Arguments Using TITLE without arguments cancels all existing titles. Arguments n specifies the relative line that contains the title line. 'text' | "text" specifies text that is enclosed in single or double quotation marks. Details: A TITLE statement takes effect when the step or RUN group with which it is associated executes. Once you specify a title for a line, it is used for all subsequent output until you cancel the title or define another title for that line. A TITLE statement for a given line cancels the previous TITLE statement for that line and for all lines SAS Training 99 with larger n numbers.

Selected SAS Statements

Statement TITLE Examples : This statement suppresses a title on line n and all lines after it: titlen;

These are examples of TITLE statements:
• • •

title 'First Draft'; title2 "Year's End Report"; title2 'Year''s End Report';

These statements illustrate #BYVAL, #BYVAR, and #BYLINE.
• • •

title 'Quarterly Sales for #byval(site)'; title 'Annual Costs for #byvar2'; title 'Data Group #byline';
SAS Training 100

Selected SAS Statements

FOOTNOTE : Prints up to ten lines of text at the

bottom of the procedure or DATA step output

Syntax FOOTNOTE<n > <'text' | "text" >; Without Arguments Using FOOTNOTE without arguments cancels all existing footnotes. Arguments n specifies the relative line to be occupied by the footnote. 'text' | "text" specifies the text of the footnote in single or double quotation marks.

SAS Training

101

Selected SAS Statements
Details: A FOOTNOTE statement takes effect when the step or RUN group with which it is associated executes. Once you specify a footnote for a line, SAS repeats the same footnote on all pages until you cancel or redefine the footnote for that line. When a FOOTNOTE statement is specified for a given line, it cancels the previous FOOTNOTE statement for that line and for all footnote lines with higher numbers. Statement FOOTNOTE Examples :

These examples of a FOOTNOTE statement result in the same footnote:
• •

footnote8 "Managers' Meeting"; footnote8 'Managers'' Meeting';
SAS Training 102

SAS Options

Definition of Options
Data set options specify actions that apply only to the SAS data set with which they appear. They let you perform such operations as
   

renaming variables selecting only the first or last n observations for processing dropping variables from processing or from the output data set specifying a password for a SAS data set.

SAS Training

103

Syntax of Options

Specify a data set option in parentheses after a SAS data set name. To specify several data set options, separate them with spaces. (option-1=value-1<. . . option-n=value-n>) These examples show data set options in SAS statements:
  

data scores(keep=team game1 game2 game3); proc print data=new(drop=year); set old(rename=(date=Start_Date));

SAS Training

104

Selected SAS Options

DROP : Excludes variables from processing or from output SAS data sets.
Syntax DROP=variable(s) Syntax Description variable(s) lists one or more variable names. You can list the variables in any form that SAS allows.

Details : If the option is associated with an input data set, the variables are not available for processing. If the DROP= data set option is associated with an output data set, SAS does not write the variables to the output data set, but they are available for processing.
SAS Training 105

Selected SAS Options
Option DROP Example :

Excluding Variables from Input In this example, the variables SALARY and GENDER are not included in processing and they are not written to either output data set:

data plan1 plan2; set payroll(drop=salary gender); if hired<'01jan98'd then output plan1; else output plan2; run;
You cannot use SALARY or GENDER in any logic in the DATA step because DROP= prevents the SET statement from reading them from PAYROLL.

SAS Training

106

Selected SAS Options

KEEP : Specifies variables for processing or for writing to output SAS data sets
Syntax KEEP=variable(s) Syntax Description variable(s) lists one or more variable names. You can list the variables in any form that SAS allows.

Details : If the KEEP= data set option is associated with an input data set, only those variables that are listed after the KEEP= data set option are available for processing. If the KEEP= data set option is associated with an output data set, only the variables listed after the option are written to the output data set, but all variables are available for processing.
SAS Training 107

Selected SAS Options
Option KEEP Example :
In this example, only IDNUM and SALARY are read from PAYROLL, and they are the only variables in PAYROLL that are available for processing:

data bonus; set payroll(keep=idnum salary); bonus=salary*1.1; run;

SAS Training

108

Selected SAS Options

RENAME : Changes the name of a variable.
Syntax RENAME=(old-name-1=new-name-1 < . . . old-namen=newname-n>) Syntax Description old-name the variable you want to rename. new-name the new name of the variable. It must be a valid SAS name.

Details : If you use the RENAME= data set option when you create a data set, the new variable name is included in the output data set. If you use RENAME= on an input data set, the new name is used in DATA step programming statements.
SAS Training 109

Selected SAS Options
Option RENAME Example :

Renaming a Variable at Time of Output This example uses RENAME= in the DATA statement to show that the variable is renamed at the time it is written to the output data set. The variable keeps its original name, X, during the DATA step processing:

data two(rename=(x=keys)); set one; z=x+y; run;

SAS Training

110

Selected SAS Options

FIRSTOBS : Causes processing to begin at a specified observation.
Syntax FIRSTOBS=n Syntax Description n is a positive integer that is less than or equal to the number of observations in the data set.

Details : The FIRSTOBS= data set option is valid when an existing SAS data set is read. You cannot use this option when a WHERE statement or WHERE= data set option is specified in the same DATA or PROC step.
SAS Training 111

Selected SAS Options
Option FIRSTOBS Example :

This PROC step prints the data set STUDY beginning with observation 20:

proc print data=study(firstobs=20); run;

This SET statement uses both FIRSTOBS= and OBS= to read only observations 5 through 10 from the data set STUDY. Data set NEW contains six observations.

data new; set study(firstobs=5 obs=10); run;

SAS Training

112

Selected SAS Options

OBS : Causes processing to end with the nth observation.

Syntax OBS=n|MAX Syntax Description n specifies a positive integer that is less than or equal to the number of observations in the data set or zero. MAX represents the total number of observations in the data set. Details : This option specifies the number of the last observation to process, not how many observations should be processed. It is valid only when an existing SAS data set is read. Use OBS=0 to create an empty data set that has the structure, but SAS Training 113 not the attributes, of another data set.

Selected SAS Options
Option OBS Example :

In this example, the OBS= data set option in the SET statement reads in the first ten observations from data set OLD:

data new; set old(obs=10); run;

This statement prints only observations 5 through 10 in data set STUDY:

proc print data=study(firstobs=5 obs=10);

SAS Training

114

Selected SAS Options

WHERE : Selects observations that meet the specified condition
Syntax WHERE=(where-expression) Syntax Description where-expression is an arithmetic or logical expression that consists of a sequence of operators, operands, and SAS functions. The expression must be enclosed in parentheses. Details : Use the WHERE= data set option with an input data set to select observations that meet the condition specified in the WHERE expression before SAS brings them into the DATA or PROC step for processing. Selecting observations that meet the conditions of the WHERE expression is the first operation SAS performs in each iteration of the DATA step.
SAS Training 115

Selected SAS Options
Option WHERE Example :

Selecting Observations from an Input Data Set This example uses the WHERE= data set option to subset the SALES data set as it is read into another data set:

data whizmo; set sales(where=(product='whizmo')); run;

Selecting Observations from an Output Data Set This example uses the WHERE= data set option to subset the SALES output data set:

data whizmo(where=(product='whizmo')); set sales; run;

SAS Training

116

SAS Format

Definition of Format
A format is an instruction that SAS uses to write data values. You use formats to control the written appearance of data values, or, in some cases, to group data values together for analysis. For example, the WORDS22. format, which converts numeric values to their equivalent in words, writes the numeric value 692 as six hundred ninety-two

SAS Training

117

Syntax of Format

SAS formats have the following form: <\$>format<w>.<d> where \$ indicates a character format; its absence indicates a numeric format. format names the format. w specifies the format width, which for most formats is the number of columns in the output data. d specifies an optional decimal scaling factor in the numeric formats.
SAS Training 118

Selected SAS Formats

\$CHARw: Writes standard character data.
Syntax \$CHARw. Syntax Description w specifies the width of the output field.

SAS Training

119

Selected SAS Formats
Format \$CHARw Example : put @7 name \$char4.;
Values Results ----+----1 XYZ XYZ

SAS Training

120

Selected SAS Formats

\$w: Writes standard character data.
Syntax \$w. Syntax Description w specifies the width of the output field. You can specify a number or a column range.

SAS Training

121

Selected SAS Formats
Format \$w Example : put @10 name \$5.; put name \$ 10-15;

Values #Cary Tokyo

Results ----+----1---+----2 Cary Tokyo

*The character # represents a blank space.

SAS Training

122

Selected SAS Formats

DOLLARw.d: Writes numeric values with dollar signs, commas, and decimal points

Syntax DOLLARw.d Syntax Description w specifies the width of the output field. d optionally specifies the number of digits to the right of the decimal point in the numeric value. Details:The DOLLARw.d format writes numeric values with a leading dollar sign, with a comma that separates every three digits, and a period that separates the decimal fraction

SAS Training

123

Selected SAS Formats
Format DOLLARw.d Example : put @3 netpay dollar10.2;
Values 1254.71 Results ----+----1----+ \$1,254.71

SAS Training

124

SAS Informat

Definition of Informat
An informat is an instruction that SAS uses to read data values into a variable. Unless you explicitly define a variable first, SAS uses the informat to determine whether the variable is numeric or character. SAS also uses the informat to determine the length of character variables.

SAS Training

125

Syntax of Informat

SAS Informats have the following form: <\$>informat<w>.<d> where \$ indicates a character format; its absence indicates a numeric format. informat names the informat. w specifies the informat width, which for most informats is the number of columns in the input data. d specifies an optional decimal scaling factor in the numeric informats.SAS divides the input data by 10 to the power of d.
SAS Training 126

Selected SAS Informats

\$CHARw: Reads character data with blanks.
Syntax \$CHARw.

Syntax Description w specifies the width of the input field. Details:The \$CHARw. informat does not trim leading and trailing blanks or convert a single period in the input data field to a blank before storing values. If you use \$CHARw. in an INFORMAT or ATTRIB statement within a DATA step to read list input, then by default SAS interprets any blank embedded within data as a field delimiter, including leading blanks.
SAS Training 127

Selected SAS Formats
Informat \$CHARw Example : put @1 name \$char5.;
Data lines ----+----1 XYZ XYZ . X YZ XYZ## #XYZ# ##.## #X#YZ Results

*The character # represents a blank space
SAS Training 128

Selected SAS Informats

Syntax \$w. Syntax Description w specifies the width of the input field. You must specify w because SAS does not supply a default value. Details: The \$w. informat trims leading blanks and left aligns the values before storing the text. In addition, if a field contains only blanks and a single period, \$w. converts the period to a blank because it interprets the period as a missing value. The \$w. informat treats two or more periods in a field as character data.
SAS Training 129

Selected SAS Informats
Format \$w Example : input @1 name \$5.;
Data lines ----+----1 XYZ XYZ . X YZ X#YZ# XYZ## XYZ## Results

*The character # represents a blank space
SAS Training 130

SAS Procedures
      

Print Format Sort Append Contents Transpose SQL
SAS Training 131

Proc Print
The PRINT procedure prints the observations in a SAS data set, using all or some of the variables.

SAS Training

132

Syntax

PROC PRINT <option(s)BY <DESCENDING> variable-1 <...<DESCENDING> variable; VAR variable(s);

Options: Obs=n
SAS Training 133

Hands-On Exercise
Create a List Report from the Cake Dataset displaying the first 10 Observations Expected Output:

SAS Training

134

Solution
proc print data = cake (obs=10); var lastname flavor pscore; run;

SAS Training

135

User Defined Format

Proc Format The FORMAT procedure enables you to define your own informats and formats for variables.

SAS Training

136

Syntax

PROC FORMAT <option(s)>; VALUE <\$>name <(formatoption(s))> value-range-set(s);

SAS Training

137

Example
    

Proc Format; value \$genders ‘m’=“Male” ‘f’=“Female” Run; Proc Print data=customer.demo; format sex \$gender.; run;
SAS Training 138

Output
Cust_id Name Address Sex 2335 Jimmy Birmingham,UK Male 5889 Chen, Len Birmingham,UK Female 3878 Davis, Brad Plymouth,UK Male 4553 Maria Miami USA
SAS Training 139

Hands-On Exercise
Display the values of the variable SEX in Class dataset as 1 and 2 , instead of the default values.

SAS Training

140

Hands-On Exercise
Expected Output

SAS Training

141

Solution
proc format; value \$sex 'M' = 1 'F' = 2 ; run; proc print data = train.class; format sex \$sex.; run;
SAS Training 142

Proc Sort
The SORT procedure sorts observations in a SAS data set by one or more character or numeric variables, either replacing the original data set or creating a new, sorted data set.
SAS Training 143

Syntax
PROC SORT <option(s)> <collating-sequence-option> BY <DESCENDING> variable-1 <...<DESCENDING> variable-n>; Options(s) :nodupkey

SAS Training

144

Example
Account
Company Paul's Pizza Apex World Wide Electronics Garner Strickland Industries Morrisville Ice Cream Delight Debt 83.00 119.95 657.22 299.98 Town Apex Apex Apex Apex

SAS Training

145

proc sort data=account out=bytown;  by town company; run; proc print data=bytown; var company town debt; title 'Customers with Past-Due Accounts'; SAS Training title2 'Listed Alphabetically

146

Output
Customers with Past-Due Accounts Listed Alphabetically within Town Obs Company Town Debt
1 2 3 4 Apex World Wide Electronics Garner Strickland Industries Morrisville Ice Cream Delight Paul's Pizza
SAS Training

Apex Apex Apex Apex

119.95 657.22 299.98 83.00
147

Duplicate observations
proc sort data=account out=towns nodupkey; by town; run;

proc print data=towns; var town company debt ; title 'Towns of Customers with Past-Due Accounts‘; run;

SAS Training

148

Output
Towns of Customers with Past-Due Accounts
Obs Town Company Debt

1 2 3 4

Apex Garner Holly Springs Morrisville

Paul's Pizza World Wide Electronics Ice Cream Delight Strickland Industries

83.00 119.95 299.98 657.22

SAS Training

149

Hands-On Exercise
SORT DUPOBS dataset to create dataset A. sort the data by descending tourtype and vendor and ascending landcost Expected Output

SAS Training

150

Solution
proc sort data = dupobs ; by descending tourtype descending vendor landcost; run;

SAS Training

151

Proc Append
The APPEND procedure adds the observations from one SAS data set to the end of another SAS data set Remember: • Both data sets contained the same variables. • If Appending data sets with different variables, use the FORCE option

SAS Training

152

Syntax

PROC APPEND BASE=<libref.>SAS-data-set <DATA=<libref.>SAS-data-set> <FORCE> ;

SAS Training

153

Class – 1 -2
name Andre 15 w Robert 15 Philip 14

Example
age height 67 78 70
SAS Training

Class
name ag Andrea e 16 Linda 13 heigh t 60 55 72

Stephe 17 n

154

Example

PROC APPEND BASE=class1 DATA=class2; RUN;

SAS Training

155

Output
name Andrew Robert Philip
Andrea Linda

age 15 15 14
16 13

height 67 78 70
60 55

Stephen

17

72

SAS Training

156

Hands On - Exercise
Append datasets DEPT1 and DEPT2 and create replace DEPT1 with the appended dataset Expected Output

SAS Training

157

Solution
proc append base = dept1 data=dept2; run;

proc print data = dept1; run;

SAS Training

158

Proc Contents
The CONTENTS procedure shows the contents of a SAS data set and prints the directory of the SAS data library.

SAS Training

159

Example

proc contents data=test.records; run;

SAS Training

160

Output

SAS Training

161

Hands-On Exercise
Display the Dataset structure of DUPOBS dataset

SAS Training

162

Proc Transpose
The TRANSPOSE procedure creates an output data set by restructuring the values in a SAS data set, transposing selected variables into observations.
Original data X Y 12 19 21 15 33 27 14 32

Z 14 19 82 99

=)

Transposed data _NAME_ COL1 COL2 COL3 COL4 X 12 21 33 14 Y 19 15 27 32 Z 14 19 82 99

SAS Training

163

Syntax

PROC TRANSPOSE <DATA=input-data-set> <LABEL=label> <LET> <NAME=name> <OUT=output-data-set> <PREFIX=prefixBY <DESCENDING> variable-1 <...<DESCENDING> variable-n> <NOTSORTED>; COPY variable(s); ID variable; IDLABEL variable; VAR variable(s);

SAS Training

164

To do this

Use this statement
BY COPY ID IDLABEL VAR

Transpose each BY group Copy variables directly without transposing them Specify a variable whose values name the transposed variables Create labels for the transposed variables List the variables to transpose

SAS Training

165

Hands-On Exercise
Transpose the dataset grp_tran in the Train library to get the output as shown below

SAS Training

166

Solution
proc sort data = grp_tran; by grp; run; proc transpose data = grp_tran out = result (drop= _name_); by grp; run; proc print data = result; run;
SAS Training 167

Proc SQL
The SQL procedure implements Structured Query Language (SQL) for the SAS System. SQL is a standardized, widely used language that retrieves and updates data in tables and views based on those tables
SAS Training 168

Syntax

PROC SQL <option(s)>; ALTER TABLE table-name <constraint-clause> <,constraint-clause>...>; <ADD column-definition <,column-definition>...> <MODIFY column-definition <,column-definition>...> <DROP column <,column>...>;

CONT….
SAS Training 169

CREATE TABLE table-name (column-definition <,columndefinition>...); (column-specification , ...<constraint-specification > ,...) ; DROP TABLE table-name <,table-name>...; DROP VIEW view-name <,view-name>...; INSERT INTO table-name|sas/access-view|proc-sqlview<(column<,column>...)> VALUES (value<,value>...) <VALUES (value <,value>...)>...;

Syntax

CONT….
SAS Training 170

Syntax

SELECT <DISTINCT> object-item <,object-item>... FROM from-list <WHERE sql-expression> <GROUP BY group-by-item <,group-by-item>...> <HAVING sql-expression> <ORDER BY order-by-item <,order-by-item>...>;

SAS Training

171

Example

Proc Sql; select Lname, Fname, City, State, IdNumber, Salary, Jobcode from staff, payroll where idnumber=idnum ; Quit;

SAS Training

172

Hands-On Exercise
Create Table for Females from the Class dataset using Proc Sql. Expected Output

SAS Training

173

Solution
proc sql; create table females as select * from class where sex = 'F'; select * from females; quit;

SAS Training

174

Proc GPLOT
The GPLOT procedure plots the values of two or more variables on a set of coordinate axes (X and Y). The coordinates of each point on the plot correspond to two variable values in an observation of the input data set.
SAS Training 175

Syntax
PROC GPLOT <DATA=input-data-set> </option(s) >; PLOT plot-request(s) </option(s)PLOT2 plotrequest(s) option(s)>;

SAS Training

176

Example
proc gplot data = dupobs; goptions reset = all; plot landcost*country; run;

SAS Training

177

Output

SAS Training

178

Example
proc gplot data = dupobs; goptions reset=all; symbol1 color = green value=triangle ; symbol2 color=blue value=circle; symbol3 color=red value=square; plot landcost*country=vendor; run;

SAS Training

179

Output

SAS Training

180

PROC MEANS
The MEANS procedure provides data summarization tools to compute descriptive statistics for variables across all observations and within groups of observations.

SAS Training

181

Syntax
PROC MEANS <option(s)> BY <DESCENDING> variable-1 <... <DESCENDING> variablen><NOTSORTED>; CLASS variable(s) </ option(s)>; OUTPUT <OUT=SAS-data-set> <output-statistic-specification(s)>

SAS Training

182

PROC MEANS (OPTIONS)
Specify the number of MAXDEC= decimal places for the statistics all displayed output NOPRINT Suppress Order the values of the class variables according to the specified order Limit the output statistics to the observations with the highest _TYPE_ value
SAS Training

ORDER=

NWAY
183

PROC MEANS (BY)
Produces separate statistics for each BY group.
Example: Input Data set

proc sort data = temp; by cat; run; proc means data = temp; by cat; output out = temp1; run;
SAS Training 184

PROC MEANS (CLASS)
Specifies the variables whose values define the subgroup combinations for the analysis.

SAS Training

185

PROC MEANS (NWAY)
proc means data = prod nway; class cat product; var sales; output out = prodsta n=n sum=total; run;

SAS Training

186

PROC MEANS (OUTPUT)
Outputs statistics to a new SAS data set Input Data set
proc means data = sales; class prod; output out = temp n = Cost_n sal_n mean=Cost_m Sale_m; run;

SAS Training

187

PROC MEANS (CLASS)
proc means data = prod; class cat product; var sales; output out = prodsta n=n sum=total; run;

SAS Training

188

PROC MEANS (VAR)
Identifies the analysis variables and their order in the output. If you omit the VAR statement, PROC MEANS analyzes all numeric variables that are not listed in the other statements. When all variables are character variables, PROC MEANS produces a simple count of observations.
SAS Training 189

PROC Summary
The SUMMARY procedure provides data summarization tools that compute descriptive statistics for variables across all observations or within groups of observations SAS Training

190

Syntax
PROC SUMMARY <option(s)> <statistic-keyword(s)BY <DESCENDING> variable-1<...<DESCENDING> variable-n> <NOTSORTED>; CLASS variable(s) </ option(s)>; FREQ variable; OUTPUT <OUT=SAS-data-set><output-statistic-specification(s)> <id-group-specification(s)> <maximum-id-specification(s)> <minimum-id-specification(s)></ option(s)> ; VAR variable(s)</ WEIGHT=weight-variable>;

SAS Training

191

Difference Between Proc Means & Proc Summary
Both PROC MEANS and PROC SUMMARY compute descriptive statistics for an entire SAS data set. The Difference Between them :
. PROC MEANS produces subgroup statistics only when a BY statement is used and the input data has been previously sorted (use PROC SORT) by the BY variables PROC SUMMARY automatically produces statistics for all subgroups, giving you all the information in one run

SAS Training

192

Difference Between Proc Means & Proc Summary
. PROC MEANS produce information in the output window. PROC SUMMARY does not produce any information in your output so you will always need to use the OUTPUT statement to create a new data set and use PROC PRINT to see the computed statistics.

SAS Training

193

PROC REPORT
Overview:
The REPORT procedure combines features of the PRINT, MEANS, and TABULATE procedures with features of the DATA step in a single report-writing tool that can produce a variety of reports

SAS Training

194

PROC REPORT (TYPES)

SAS Training

195

PROC REPORT (TYPES)

SAS Training

196

SAS Training

197

PROC REPORT (Concept)
The most important thing to figure out is the layout of the report. Once you understand the layout of the report, use the COLUMN and DEFINE statements in PROC REPORT to construct the layout.

SAS Training

198

Typical Report Example
Input Data set

proc report data = rep nowd headline headskip; column product sales; define product / 'Product Name' order; define sales / 'Sales Occured' format=8.2; run;

SAS Training

199

PROC REPORT (Syntax)
PROC REPORT <option(s)>; BY <DESCENDING> variable-1 COLUMN column-specification(s); COMPUTE LINE specification(s); . . . select SAS language elements . . . ENDCOMP; DEFINE report-item ; SAS Training REBREAK location </ option(s)>; 200

PROC REPORT (OPTIONS)
Select the windowing or the nonwindowing environment Specify the default number of characters for columns containing computed variables or numeric data set variables Underline all column headers and the spaces between them Write a blank line beneath all column headers Specify the split character Specify the number of blank characters between columns
SAS Training

WINDOWS| NOWINDOWS COLWIDTH=

201

PROC REPORT (COLUMN)
Describes the arrangement of all columns and of headers that span more than one column. • column-specification(s) is one or more of the following:
• •

• •

report-item(s) report-item-1, report-item-2 <. . . , report-itemn> (`header-1 ' < . . . `header-n '> report-item(s) ) report-item=name
SAS Training 202

PROC REPORT (COLUMN)
Examples • column sector manager N sales; • column sector sales,min; • column ('Individual Store Sales as a Percent of All Sales' sector manager); • column manager department sales sales=salesmin sales=salesmax;
SAS Training 203

PROC REPORT
Decide the usage of a variable in DEFINE statement these usages are • DISPLAY • ORDER • ACROSS • GROUP • ANALYSIS
SAS Training

204

PROC REPORT (DEFINE)
• •

• • •

DISPLAY – Do not affect the order of variables in a row ORDER – Used to change order of variables (Ascending/Descending/Formatted) ACROSS - creates a column for each value of an across variable. GROUP – Creates Groups Analysis – To calculate statistics Computed – Variables defined for the report not on input data set
SAS Training 205

PROC REPORT (DEFINE OPTIONS)
Assign a SAS or user-defined format to the item Order the values of a group, order, or across variable according to the specified order Define the number of blank characters to leave between the column being defined and the column immediately to its left Define the width of the column in which PROC REPORT displays the report item Reverse the order in which PROC REPORT displays rows or values of a group, order, or across variable JUSTIFY Formatted Values
SAS Training

FORMAT= ORDER= SPACING=

WIDTH= DESCENDING CENTER, LEFT, RIGHT
206

PROC REPORT (BREAK)
Produces a default summary at the beginning or end of a report or at the beginning and end of each BY group. Write a RBREAKthe last break line of option(s)>; blank line for location </ a break SKIP
located at the beginning of the report Include a summary line as one of the break lines SUMMARIZE

Start a new page after the last break line of a break located at the beginning of the report
SAS Training

PAGE
207

Example
Input Data set
proc report data = rep nowd headline headskip split='*'; column ('This is sales report' product N sales sales,min discount newprice); define product / 'Product Name' group; define sales / 'My*Sales' format=8.2; define min / 'Min'; define newprice / 'Discount Price' computed; compute newprice; newprice = _c3_ - _c5_; endcomp; break after product / skip; run; SAS Training 208

SAS Date
SAS Date : is a value that represents the number of days between January 1, 1960, and a specified date. SAS can perform calculations on dates ranging from A.D. 1582 to A.D. 19,900. Dates before January 1, 1960, are negative numbers; dates after are 209 SAS Training

SAS Date
How SAS Converts Calendar Dates to SAS Date Values :

SAS Training

210

SAS Date
Working with SAS Dates :
The SAS System converts date values back and forth between calendar dates with SAS language elements called formats and informats.  Formats present a value, recognized by SAS, such as a date value, as a calendar date in a variety of lengths and notations.  Informats read notations or a value, such as a calendar date, which may be in a variety of lengths, and then convert the data to a SAS date. SAS Training 211

SAS Date
Example: Reading, Writing, and Calculating Date Values
data meeting; options nodate pageno=1 linesize=80 pagesize=60; input region \$ mtg : mmddyy8.; sendmail=mtg-45; datalines; N 11-24-99 S 12-28-99 E 12-03-99 W 10-04-99 ;

SAS Training

212

SAS Date
proc print data=meeting; format mtg sendmail date9.; title 'When To Send Announcements'; run;

SAS Training

213

SAS Date
Date formats DATEw. Format: Writes date values in the form ddmmmyy or ddmmmyyyy. Syntax : DATEw.

SAS Training

214

SAS Date
Examples
The example table uses the input value of 15415, which is the SAS date value that corresponds to March 16, 2002.

SAS Training

215

SAS Date
DDMMYYw. Format : Writes date
values in the form ddmmyy or ddmmyyyy. Syntax DDMMYYw.

SAS Training

216

SAS Date
Examples : The example table uses the input value of 15415, which is the SAS date value that corresponds to March 16, 2002.

SAS Training

217

SAS Date
Date Informats DATEw. : Reads date values in the form ddmmmyy or ddmmmyyyy. Syntax DATEw.

SAS Training

218

SAS Date
Example : input calendar_date date11.;

SAS Training

219

SAS Date
DDMMYYw. Informat :Reads date values in the form ddmmyy or ddmmyyyy. Syntax DDMMYYw.

SAS Training

220

SAS Date
Example : input calendar_date ddmmyy10.;

SAS Training

221

SAS Date
Functions DATE Function : Returns the current date as a SAS date value Syntax : DATE() Details : The DATE function produces the current date in the form of a SAS date value, which is the number of days since January 1, 1960. SAS Training

222

SAS Date
Example : tday=date(); Put tday ddmmyy8.;

SAS Training

223

SAS Date
TODAY function : Returns the current date as a SAS date value. Syntax : TODAY() Details : TODAY is identical to the DATE function. The TODAY function produces the current date in the form of a SAS date value, which is the number of days since January 1, 1960. SAS Training 224

SAS Date
YEAR function : Returns the year from a SAS date value. Syntax : YEAR(date) Details : The YEAR function produces a four-digit numeric value that represents the year.
SAS Training 225

SAS Date
Example :

SAS Training

226

SAS Date
MONTH function : Returns the month from a SAS date value. Syntax : MONTH(date) Details : The MONTH function returns a numeric value that represents the month from a SAS date value. Numeric values can range from 1 through 12.
SAS Training 227

SAS Date
Example :

SAS Training

228

SAS Date
DAY Function : Returns the day of the month from a SAS date value. Syntax : DAY(date) Details : The DAY function produces an integer from 1 to 31 that represents the day of the month.
SAS Training 229

SAS Date
Example :

SAS Training

230

SAS Date
QTR function: Returns the quarter of the year from a SAS date value. Syntax : QTR(date) Details : The QTR function returns a value of 1, 2, 3, or 4 from a SAS date value to indicate the quarter of the year in which a date value falls.
SAS Training 231

SAS Date
Example :

SAS Training

232

SAS Date
WEEKDAY Function : Returns the day of the week from a SAS date value. Syntax : WEEKDAY(date) Details : The WEEKDAY function produces an integer that represents the day of the week, where 1=Sunday, 2=Monday, . . . , 7=Saturday. SAS Training

233

SAS Date
Example :

SAS Training

234

SAS Date
MDY Function :Returns a SAS date value from month, day, and year values. Syntax : MDY(month,day,year)

SAS Training

235

SAS Date
Example :

SAS Training

236

INTRODUCTION TO MACROS

SAS Training

237

What is a Macro Facility?

The macro facility is a tool for extending and customizing the SAS System and for reducing the amount of text you must enter to do common tasks

SAS Training

238

Replacing Text Strings Using Macro Variables

Macro variables are an efficient way of replacing text strings in SAS code The Simplest way to define a macro variable is to use the %LET statement to assign the macro variable a name and a value. Eg: %let macname = Test;
SAS Training 239

Replacing Text Strings Using Macro Variables

Resolve a Macro Variable Value using the ‘&’ symbol Eg: %let macname = Test; title “This is a &macname” The macro processor resolves the reference to the macro variable MACNAME, and the statement becomes Title “This is a Test”
SAS Training 240

Generating SAS Code Using Macros Macros Allow you to execute a SAS code multiple times without compiling it. A macro definition is placed between a %MACRO statement and a %MEND (macro end) statement, as follows: %MACRO macro-name; SAS code %MEND macro-name; Execute the macro using %macro-name
SAS Training 241

Generating SAS Code Using Macros Eg:
%macro mac1; data temp1; set temp; x= ‘Hello’; run; %mend mac1; %mac1; Execution of this macro SAS Training the following produces

242

Generating SAS Code Using Macros

Execution of this macro produces the following program: data temp1; set temp; x= ‘Hello’; run;

SAS Training

243

Hands – On Exercise

Create a macro datcrt that creates a data set cake1 from train.cake

SAS Training

244

Solution

%macro datcrt; data cake1; set train.cake; run; %macro datcrt; %datcrt;

SAS Training

245

Passing Information into a Macro Using Parameters

A macro variable defined in parentheses in a %MACRO statement is a macro parameter Macro parameters allow you to pass information into a macro

SAS Training

246

Passing Information into a Macro Using Parameters Eg:
%macro mac2 (dest= , src = ); data &src; set &dest; x= ‘Hello’; run;
You invoke the macro by providing values for the parameters, as follows:

%mac2 (dest=temp1, src=temp) ; %mac2 (dest=temp2, src=temp); SAS Training
247

Hands – On Exercise

Create a Macro datprnt that prints the data set cake and dept1 when passed as a macro parameter
SAS Training 248

Solution

%macro datprnt (dat= ); proc print data = &dat; run; %mend datprnt; %datprnt (dat=cake); %datprnt (dat=dept1);

SAS Training

249

Conditionally Generating SAS Code Use %IF-%THEN-%ELSE macro statements to conditionally generate SAS code with a macro. Eg:
%macro test (info= , mydata = ); %if &info = print %then %do; proc print data = &mydata; run; %end; %else %if &info = report %then %do; proc report data = &mydata; run; %end; %mend test;
SAS Training 250

Conditionally Generating SAS Code

%test(info=print,mydata = data1); /* Calling the Macro */ Result of the macro execution: Proc print data = data1; run;

SAS Training

251

Macro Variables

Macro variables are tools that enable you to dynamically modify the text in a SAS program through symbolic substitution. You can assign large or small amounts of text to macro variables, and after that, you can use that text by simply referencing the variable that contains it. Macro variables defined by macro programmers are called user-defined macro variables. Eg: %let name = Henry Woodbridge is Male; Those defined by the SAS System are called automatic macro variables Eg: Sysdate,Sysday, SysProcessID, etc.
SAS Training 252

Methods to create User Defined Macro Variables
    

   

%Let iterative %DO statement %GLOBAL statement %INPUT statement INTO clause of the SELECT statement in SQL %LOCAL statement %MACRO statement SYMPUT routine %WINDOW statement. SAS Training 253

Using Macro Variables
After a macro variable is created, you typically use the variable by referencing it with an ampersand preceding its name (&variable-name), which is called a macro variable reference. These references perform symbolic substitutions when they resolve to their value. Eg:

%let dsn=Newdata; title1 "Contents of Data Set &dsn"; data temp; set &dsn; if age>=20; run;
SAS Training 254

Using Macro Variables
if macro variable JERRY is misspelled as JERY, the following produces an unexpected result: %let jerry=student; data temp; x="produced by &jery"; run; This produces the following message: WARNING: Apparent symbolic reference JERY not resolved. Note: Display the macro variable value using %put Eg: %put &jerry;
SAS Training 255

Combining Macro Variable References with Text
When the macro variable is appended after a text, directly reference it with the text. When a text is appended after a macro variable, use the delimiter ‘.’ between the macro variable reference and the text DATA=PERSNL&YR.EMPLOYES, where &YR contains two characters for a year
Data = &MONTH&YR

%let name=sales; data new&name; set save.&name; more SAS statements run; The SAS system sees it as DATA NEWSALES; SET SAVE.SALES; more SAS statements RUN;

SAS Training

256

Combining Macro Variable References with Text

Eg:
DATA=PERSNL&YR.EMPLOYES, where &YR contains two characters for a year Data = &MONTH&YR %let name=sales; data new&name; set save.&name; more SAS statements run; The SAS system sees it as DATA NEWSALES; SET SAVE.SALES; more SAS statements SAS Training

257

Hands – On Exercise

Create a data set newcake from cake by passing cake as a macro parameter

SAS Training

258

Solution

%macro app(dat=); data new&dat; set cake; run; %mend app; %app(dat=cake);

SAS Training

259

Hands – On Exercise

Create a data set cakenew from cake by passing cake as a macro parameter

SAS Training

260

Solution

%macro app(dat=); data &dat.new; set cake; run; %mend app; %app(dat=cake);

SAS Training

261

Referencing Macro Variables Indirectly
It is also useful to be able to indirectly reference macro variables that belong to a series so that the name is determined when the macro variable reference resolves. Eg: %let City1 = Mumbai; %let City2 = Delhi; %let City3 = Chennai For example, you could use the value of macro variable N to reference a variable in the series of macro variables named CITY1 to CITY3. If N has the value 1, the reference would be to CITY1. If the value of N is 3, the reference would be to CITY3. %put &city&n; /* incorrect */
SAS Training 262

Referencing Macro Variables Indirectly
% put &&city&n; /* correct */ When the macro processor encounters multiple ampersands, its basic action is to resolve two ampersands to one ampersand. For example, to append the value of &N to CITY and then reference the appropriate variable name Assuming that &N contains 3, when the macro processor receives this statement, it performs the following steps: resolves && to & passes CITY as text resolves &N into 3 returns to the beginning of the macro variable reference, &CITY3, starts resolving from the beginning again, and prints 263 the value of CITY3 which SAS Training is Chennai.

   

Debugging a Macro Program
Use the following Options to Debug a Macro code: 1) MLOGIC : Controls whether macro execution is traced for debugging Each line generated by the MLOGIC option is identified with the prefix MLOGIC(macro-name) 2) MPRINT : Controls whether SAS statements generated by macro execution are traced for debugging The MPRINT option displays the text generated by macro execution. Each SAS statement begins a new line. Each line of MPRINT output is identified with the prefix MPRINT(macroname): 3) SYMBOLGEN : Controls whether the results of resolving macro variable references are displayed for debugging SYMBOLGEN displays the results in this form: SAS Training 264

Debugging a Macro Program
options mlogic mprint symbolgen; %macro test(x=); %if &x = 1 %then %do; %put "Value of x is 1"; proc print data = train.names; run; %end; %else %do; %put "Value of x is not 1"; %end; %mend test; %test(x=1);
SAS Training 265

Debugging a Macro Program
MLOGIC(TEST): Beginning execution. MLOGIC(TEST): Parameter X has value 1 SYMBOLGEN: Macro variable X resolves to 1 MLOGIC(TEST): %IF condition &x = 1 is TRUE MLOGIC(TEST): %PUT "Value of x is 1" "Value of x is 1" MPRINT(TEST): proc print data = train.names; MPRINT(TEST): run; NOTE: There were 4 observations read from the data set TRAIN.NAMES. NOTE: PROCEDURE PRINT used: real time 0.01 seconds cpu time 0.00 seconds MLOGIC(TEST): Ending execution.
SAS Training 266

Manipulating Macro Variable Values with Macro Functions
When you define macro variables, you can include macro functions in the expressions to manipulate the value of the variable before the value is stored Eg: To scan for words in macro variable values, use the %SCAN function. For example, %let address=123 maple avenue; %let frstword=%scan(&address,1); Result: address resolves to 123 maple avenue frstword resolves to 123

SAS Training

267

Scope of Macro Variables

Every macro variable has a scope. A macro variable's scope determines how it is assigned values and how the macro processor resolves references to it. Two types of scope exist for macro variables: global and local Global macro variables exist for the duration of the SAS session and can be referenced anywhere in the program--either inside or outside a macro Local macro variables exist only during the execution of the macro in which the variables are created and have no meaning outside the defining macro.
SAS Training 268

Scope of Macro Variables

Eg:
%macro A; %let Loc1 = xyz; %macro B; %let Loc2 = abc; %mend B; %mend A; LOC1 is local to both A and B. However, LOC2 is local only to B. Macro variables are stored in symbol tables, which list the macro variable name and its value There is a global symbol table, which stores all global macro variables. Local macro variables are stored in a local symbol table that SAS Training 269 is created at the beginning of the execution of a macro.

Global Macro Variables

%let county=Clark; %macro concat; data _null_; length longname \$20; longname="&county"||" County"; put longname; run; %mend concat; %concat
Calling the macro CONCAT produces the following statements: data _null_; length longname \$20; longname="Clark"||" County"; put longname; run; The PUT statement writes the following to the SAS log: Clark County SAS Training

270

Global Macro Variables Global Macro Variables

The new macro variable definition simply updates the existing global one.
SAS Training 271

Local Macro Variables

Local macro variables are defined within an individual macro Each macro you invoke creates its own local symbol table. Local macro variables exist only as long as a particular macro executes; when the macro stops executing, all local macro variables for that macro cease to exist.

SAS Training

272

Local Macro Variables
Eg: %macro holinfo(day,date); %let holiday=Christmas; %put *** Inside macro: ***; %put *** &holiday occurs on &day, &date, 1997. ***; %mend holinfo; %holinfo(Thursday,12/25) %put *** Outside macro: ***; %put *** &holiday occurs on &day, &date, 1997. ***; SAS Training 273

Local Macro Variables
The %PUT statements write the following to the SAS log: *** Inside macro: *** *** Christmas occurs on Thursday, 12/25, 1997. *** *** Outside macro: *** WARNING: Apparent symbolic reference HOLIDAY not resolved. WARNING: Apparent symbolic reference DAY not resolved. WARNING: Apparent symbolic reference DATE not resolved. *** &holiday occurs on &day, &date, 1997. *** As you can see from the log, the local macro variables DAY, DATE, and HOLIDAY resolve inside the macro, 274 but SAS Training outside the macro they do not exist and therefore do

Local Macro Variables Local Macro Variables

SAS Training

275

Data Step Interfaces
DATA step interfaces consist of tools that enable a program to interact with the macro facility during DATA step execution. 1) CALL SYMPUT : Assigns DATA step information to a macro variable 2) SYMGET : Returns the value of a macro variable during DATA step execution

SAS Training

276

CALL SYMPUT
Syntax: CALL SYMPUT(macro-variable,value); Eg:
1)call symput('new','testing'); Assigns the character string testing to macro variable NEW 2) data team1; input position : \$8. player : \$12.; call symput(position,player); cards; shortstp Ann pitcher Tom frstbase Bill ; This DATA step creates the three macro variables SHORTSTP, PITCHER, and FRSTBASE and respectively assign them the values ANN, TOM, and SAS Training 277 BILL.

CALL SYMPUT
3)

data team2; input position \$12. player \$12.; call symput('POS'||left(_n_), position); cards; shortstp Ann pitcher Tom frstbase Bill

; This form is useful for creating a series of macro variables. For example, the CALL SYMPUT statement builds a series of macro variable names by combining the character string POS and the left-aligned value of _N_ and assigns values to SAS Training variables POS1, POS2, the macro 278

Hands – On Exercise

Create macro varialbes ssn1, ssn2,….sssn from ssn variable in dept1 dataset using CALL SYMPUT
SAS Training 279

Solution

Data _null_; set dept1; call symput (‘ssn’||left(_n_),ssn); run;

SAS Training

280

SYMGET
Syntax SYMGET(argument) Eg: 1) x=symget('g'); Assign the value of the macro variable G to the DATA step variable X. 2) length key \$ 8; input code \$; key=symget(code); Assigns the value stored in the DATA step variable CODE, which contains a macro variable name, to the DATA step variable KEY 3) score=symget('s'||left(_n_)); Assigns the letter s and the number of the current SAS Training

281

Macro Functions and Expressions
The macro functions and expressions are similar to data step functions except that they are used with macro variables only and are preceded by % symbol Eg: %upcase(&macvar); %substr(&macvar,3,2); %EVAL(&num1 + &num2); %If &x = 1 %then %do; %end; %do i=1 %to 5; data dat&i %end;;

SAS Training

282

Macro Quoting
Macro quoting functions tell the macro processor to interpret special characters and mnemonics as text rather than as part of the macro language. If you did not use a macro quoting function to mask the special characters, the macro processor or the rest of the SAS System might give the character a meaning you did not intend.
Eg:
• •

Is %sign a call to the macro SIGN or a phrase "percent sign"? Is OR the mnemonic Boolean operator or the abbreviation for Oregon? Is the quote in O'Malley an unbalanced single quotation mark or just part of the name? Is Boys&Girls a reference to the macro variable &GIRLS or a group of children?
SAS Training 283

Macro Quoting
The following macro quoting functions are most commonly used: • %STR and %NRSTR • %BQUOTE and %NRBQUOTE • %SUPERQ Eg: %let print=proc print; run;; /* ERROR */ To avoid the ambiguity and correctly assign the value of PRINT, you must mask the semicolons with the macro quoting function %STR, as follows: %let print=%str(proc print; run;);
SAS Training 284