SAS

284
SAS Training 1 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.

Transcript of SAS

Page 1: SAS

SAS Training 1

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.

Page 2: SAS

SAS Training 2

Basics about SAS

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

Page 3: SAS

SAS Training 3

Program Editor Window

Write your code in this window

Explorer and Results Window

Page 4: SAS

SAS Training 4

Log Window

Log Window

View the Log Created by

the Program Execution

Page 5: SAS

SAS Training 5

Output Window

Output Window

View the Values of a Dataset in this Window

Page 6: SAS

SAS Training 6

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

Page 7: SAS

SAS Training 7

Example of a SAS Data set

53 Lucy 42 41

54 Tom 46 54

55 Dan 43 .

56 Tim 45 56

57 42 48

58 Mary 48 43

ID NAME

HT WT

12

3

45

6

Observations

Variables

•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 ‘.’

Page 8: SAS

SAS Training 8

Building Blocks of a SAS Program

A SAS program is constructed from two building blocks

1) DATA Step

2) PROC StepA 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.

Page 9: SAS

SAS Training 9

Basic Components of SAS, Continued

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

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

Page 10: SAS

SAS Training 10

PROC Step

Basic Components of SAS

Every SAS program is constructed using the Data Step and/or Procedures

e.g. DATA distance; miles = 23;

kilometer = 1.61 * miles; RUN;

PROC PRINT DATA = distance; RUN;

Any combination of Data Step and/or Procedures may be used

Run statement should be used throughout the program

DATA Step

Page 11: SAS

SAS Training 11

Difference Between a DATA step and a PROC step

DATA steps PROC steps Begin with DATA statements Begin with PROC

statements

Read and modify data Perform specific analysis or function

Create a SAS data set Produce results or reportNote: The table is not meant to imply that PROC can never create SAS data sets (some do), or that DATA step can never create reports (they can)

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

Page 12: SAS

SAS Training 12

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.

Input data set

Observation 1

Observation 2

Observation 3

DATA step

Line 1

Line 2

Line 3

Line 4

Line 5

Output data set

Observation 2

Observation 3

Observation 1

Page 13: SAS

SAS Training 13

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.

Page 14: SAS

SAS Training 14

Rules for SAS program StatementsSAS 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

Page 15: SAS

SAS Training 15

READING DATA FROM EXTERNAL FILES

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;

Page 16: SAS

SAS Training 16

Reading data using DATALINESA 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;

Page 17: SAS

SAS Training 17

INPUT

Describes the arrangement of values in the input data record and assigns input values to the corresponding SAS variables

INPUT <specification(s)><@|@@>;

Page 18: SAS

SAS Training 18

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

Page 19: SAS

SAS Training 19

EXAMPLE 1 (EXTERNAL FILE)

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

Mary 24Suzan 34Dat.txt in C:/

Resulting SAS data set (newdata)

Page 20: SAS

SAS Training 20

INPUT (DATALINES)

Data newdata;Input name $ age;DATALINES;Mary 24 Suzan 32;Run;

Page 21: SAS

SAS Training 21

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> <@ | @@>;

Page 22: SAS

SAS Training 22

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;

Page 23: SAS

SAS Training 23

INPUT TYPES

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

Syntax:INPUT <pointer-control> variable

informat. <@ | @@>;

Page 24: SAS

SAS Training 24

Exampledata 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

Page 25: SAS

SAS Training 25

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 <$>

<&> <@ | @@>;

Page 26: SAS

SAS Training 26

Exampledata scores; input name $ score1 score2 score3 team $;

datalines; Joe 11 32 76 red Mitchel 13 29 82 blue Susan 14 27 74 green ;

Page 27: SAS

SAS Training 27

Merge Statement The MERGE statement is flexible

and has a variety of uses in SAS programming

One-to-One Match Merge

Page 28: SAS

SAS Training 28

One-to-one matching To combine variables from several

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

Page 29: SAS

SAS Training 29

Match Merge When there is not an exact one-to-

one 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.

Page 30: SAS

SAS Training 30

Example – One to One Merge

Page 31: SAS

SAS Training 31

Example – Match Merge

Page 32: SAS

SAS Training 32

Example – Match Merge

Page 33: SAS

SAS Training 33

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 NAMEIF INOLD1 and INOLD2;RUN;

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

Page 34: SAS

SAS Training 34

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).

Page 35: SAS

SAS Training 35

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.

Page 36: SAS

SAS Training 36

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.

Page 37: SAS

SAS Training 37

Selected SAS FunctionsFunction ROUND Examples :

SAS Statement Results

var1=223.456; x=round(var1,1); put x 9.5;

223.00000

var2=223.456; x=round(var2,.01); put x 9.5;

223.46000

x=round(223.456,100); put x 9.5;

200.00000

x=round(223.456); put x 9.5;

223.00000

x=round(223.456,.3); put x 9.5;

223.33333

Page 38: SAS

SAS Training 38

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.

Page 39: SAS

SAS Training 39

Selected SAS FunctionsFunction SUM Examples :

SAS Statement Results

x1=sum(4,9,3,8); 24

x2=sum(4,9,3,8,.); 24

x3=sum(of x1-x2); 48

x4=sum(of x1-x3, 5);

101

y1=20;y2=30;x5=sum(of y:);

50

Page 40: SAS

SAS Training 40

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); 4

x2=mean(1,2,3,2); 2

x3=mean(of x1-x2); 3

Page 41: SAS

SAS Training 41

Selected SAS Functions INT : Returns the integer value.

Syntax INT(argument)

Arguments argument is numeric.

DetailsThe 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).

Page 42: SAS

SAS Training 42

Selected SAS FunctionsFunction INT Examples :

SAS Statement Results

var1=2.1;x=int(var1);put x=;

2

var2=-2.4; y=int(var2);put y=;

-2

a=int(3); put a=;

3

b=int(-1.6);put b=;

-1

Page 43: SAS

SAS Training 43

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.DetailsThe 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.

Page 44: SAS

SAS Training 44

Selected SAS FunctionsFunction 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; 1 2 3 4 5 6 ; proc print; title 'Lag Output'; run;

Page 45: SAS

SAS Training 45

Selected SAS FunctionsFunction 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 1

Obs X Y Z

1 1 . . 2 2 1 . 3 3 2 1 4 4 3 2 5 5 4 3 6 6 5 4

Page 46: SAS

SAS Training 46

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.

Page 47: SAS

SAS Training 47

Selected SAS FunctionsFunction UPCASE Examples :

SAS Statement Results

name=upcase('John B. Smith'); put name;

JOHN B. SMITH

Page 48: SAS

SAS Training 48

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.

Page 49: SAS

SAS Training 49

Selected SAS FunctionsFunction LOWCASE Examples :

SAS Statement Results

x='INTRODUCTION'; y=lowcase(x); put y;

introduction

Page 50: SAS

SAS Training 50

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.

Page 51: SAS

SAS Training 51

Selected SAS FunctionsDetails

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 Results

a='KIDNAP'; substr(a,1,3)='CAT';put a;

CATNAP

b=a; substr(b,4)='TY';put b;

CATTY

Page 52: SAS

SAS Training 52

Selected SAS Functions SUBSTR(right of=):Extracts a substring from an

argumentSyntax

<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.

Page 53: SAS

SAS Training 53

Selected SAS FunctionsDetails

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

Page 54: SAS

SAS Training 54

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.

Page 55: SAS

SAS Training 55

Selected SAS FunctionsDetails

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 Results

arg='ABC.DEF(X=Y)'; word=scan(arg,3);put word;

X=Y

word=scan(arg,-3); put word;

ABC

Page 56: SAS

SAS Training 56

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.

Page 57: SAS

SAS Training 57

Selected SAS FunctionsFunction TRIM Examples :1. 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

Page 58: SAS

SAS Training 58

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.

Page 59: SAS

SAS Training 59

Selected SAS FunctionsDetails

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 Results

x=translate('XYZW','AB','VW'); put x;

XYZB

Page 60: SAS

SAS Training 60

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.

Page 61: SAS

SAS Training 61

Selected SAS FunctionsFunction LENGTH Examples :

SAS Statements Results

len=length('ABCDEF'); put len;

6

Page 62: SAS

SAS Training 62

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.

Page 63: SAS

SAS Training 63

Selected SAS FunctionsFunction INDEX Examples :

SAS Statements Results

a='ABC.DEF (X=Y)'; b='X=Y';x=index(a,b); put x;

10

Page 64: SAS

SAS Training 64

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.

Page 65: SAS

SAS Training 65

Selected SAS Statements DATA step Statements

DELETE : Stops processing the current observation.

Syntax

DELETE; Without ArgumentsWhen 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.

Page 66: SAS

SAS Training 66

Selected SAS StatementsStatement 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;

Page 67: SAS

SAS Training 67

Selected SAS Statements DO : Designates a group of statements to be

executed as a unit.Syntax

DO; ...more SAS statements...

END;

Without ArgumentsUse 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.

Page 68: SAS

SAS Training 68

Selected SAS StatementsStatement 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;

Page 69: SAS

SAS Training 69

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.

Page 70: SAS

SAS Training 70

Selected SAS StatementsStatement 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;

Page 71: SAS

SAS Training 71

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.

Page 72: SAS

SAS Training 72

Selected SAS StatementsStatement 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;

Page 73: SAS

SAS Training 73

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.

Page 74: SAS

SAS Training 74

Selected SAS StatementsDetails

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";

Page 75: SAS

SAS Training 75

Selected SAS Statements

Removing a Label This example removes an existing label:

data rtest; set rtest; label x=' ';

run;

Page 76: SAS

SAS Training 76

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 bytes used for storing variable values.

Page 77: SAS

SAS Training 77

Selected SAS StatementsDEFAULT=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.

Page 78: SAS

SAS Training 78

Selected SAS Statements RENAME : Specifies new names for variables in output SAS data

setsSyntax

RENAME old-name-1=new-name-1 . . . <old-name-n=new-name-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 applies to all output data sets.

Page 79: SAS

SAS Training 79

Selected SAS StatementsStatement 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;

Page 80: SAS

SAS Training 80

Selected SAS Statements WHERE : Selects observations from SAS data sets that meet a

particular conditionSyntax

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.

Page 81: SAS

SAS Training 81

Selected SAS StatementsStatement 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 Atlantadata 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';

Page 82: SAS

SAS Training 82

Selected SAS Statements IF-THEN/ELSE : Executes a SAS statement for

observations that meet specific conditionsSyntax

IF expression THEN statement; <ELSE statement;> Arguments

expression is any SAS expression and is a required argument.

statementcan be any executable SAS statement or DO group.

Page 83: SAS

SAS Training 83

Selected SAS StatementsDetails :SAS evaluates the expression in an IF-THENstatement to produce a result that is either nonzero, zero, ormissing. A nonzero and nonmissing result causes theexpression to be true; a result of zero or missing causes theexpression to be false.

If the conditions that are specified in the IF clause are met, theIF-THEN statement executes a SAS statement for observationsthat are read from a SAS data set, for records in an externalfile, or for computed values. An optional ELSE statement givesan alternative action if the THEN clause is not executed. TheELSE statement, if used, must immediately follow the IF-THENstatement.

Page 84: SAS

SAS Training 84

Selected SAS StatementsStatement 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';

Page 85: SAS

SAS Training 85

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.

Page 86: SAS

SAS Training 86

Selected SAS Statementsvariable

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 stepIn PROC step you can specify the BY statement with some SAS procedures to modify their action.

Page 87: SAS

SAS Training 87

Selected SAS StatementsStatement 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;

Page 88: SAS

SAS Training 88

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 nextSyntax

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 ArgumentsIf 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.

Page 89: SAS

SAS Training 89

Selected SAS StatementsArguments

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.

Page 90: SAS

SAS Training 90

Selected SAS StatementsDetails: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.

Page 91: SAS

SAS Training 91

Selected SAS StatementsStatement 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.

• Observations are ordered by the name of the month in which the expenses were accrued: by month notsorted;

Page 92: SAS

SAS Training 92

Selected SAS Statements OUTPUT : Writes the current observation to a SAS data set

Syntax OUTPUT<data-set-name(s)>;

Without ArgumentsUsing 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.

Page 93: SAS

SAS Training 93

Selected SAS StatementsStatement 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;

Page 94: SAS

SAS Training 94

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 statementSyntax

PUT <specification(s)><_ODS_><@|@@>;

Without ArgumentsThe 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 @.

Page 95: SAS

SAS Training 95

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>;

Page 96: SAS

SAS Training 96

Selected SAS StatementsArguments 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.

Page 97: SAS

SAS Training 97

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:

Page 98: SAS

SAS Training 98

Selected SAS StatementsStatement 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;

Page 99: SAS

SAS Training 99

Selected SAS Statements TITLE : Specifies title lines for SAS output

Syntax TITLE <n> <'text' | "text">;

Without ArgumentsUsing 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 with larger n numbers.

Page 100: SAS

SAS Training 100

Selected SAS StatementsStatement 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';

Page 101: SAS

SAS Training 101

Selected SAS Statements FOOTNOTE : Prints up to ten lines of text at the bottom of the procedure

or DATA step outputSyntax

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.

Page 102: SAS

SAS Training 102

Selected SAS StatementsDetails:

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';

Page 103: SAS

SAS Training 103

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.

Page 104: SAS

SAS Training 104

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));

Page 105: SAS

SAS Training 105

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.

Page 106: SAS

SAS Training 106

Selected SAS OptionsOption 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.

Page 107: SAS

SAS Training 107

Selected SAS Options

KEEP : Specifies variables for processing or for writing to output SAS data setsSyntax

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.

Page 108: SAS

SAS Training 108

Selected SAS OptionsOption 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;

Page 109: SAS

SAS Training 109

Selected SAS Options

RENAME : Changes the name of a variable.Syntax

RENAME=(old-name-1=new-name-1 < . . . old-name-n=new-name-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.

Page 110: SAS

SAS Training 110

Selected SAS OptionsOption 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;

Page 111: SAS

SAS Training 111

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.

Page 112: SAS

SAS Training 112

Selected SAS OptionsOption 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;

Page 113: SAS

SAS Training 113

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 not the attributes, of another data set.

Page 114: SAS

SAS Training 114

Selected SAS OptionsOption 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);

Page 115: SAS

SAS Training 115

Selected SAS Options

WHERE : Selects observations that meet the specified conditionSyntax

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.

Page 116: SAS

SAS Training 116

Selected SAS OptionsOption 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;

Page 117: SAS

SAS Training 117

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

Page 118: SAS

SAS Training 118

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.

Page 119: SAS

SAS Training 119

Selected SAS Formats

$CHARw: Writes standard character data.

Syntax

$CHARw.

Syntax Description w specifies the width of the output field.

Page 120: SAS

SAS Training 120

Selected SAS FormatsFormat $CHARw Example :

put @7 name $char4.;

Values Results

----+----1

XYZ XYZ

Page 121: SAS

SAS Training 121

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.

Page 122: SAS

SAS Training 122

Selected SAS FormatsFormat $w Example :

put @10 name $5.; put name $ 10-15;

Values Results

----+----1----+----2

#Cary Cary

Tokyo Tokyo

*The character # represents a blank space.

Page 123: SAS

SAS Training 123

Selected SAS Formats

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

DOLLARw.dSyntax 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

Page 124: SAS

SAS Training 124

Selected SAS FormatsFormat DOLLARw.d Example :

put @3 netpay dollar10.2;

Values Results

----+----1----+

1254.71 $1,254.71

Page 125: SAS

SAS Training 125

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.

Page 126: SAS

SAS Training 126

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.

Page 127: SAS

SAS Training 127

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.

Page 128: SAS

SAS Training 128

Selected SAS FormatsInformat $CHARw Example :

put @1 name $char5.;

Data lines Results

----+----1

XYZ XYZ##

XYZ #XYZ#

. ##.##

X YZ #X#YZ

*The character # represents a blank space

Page 129: SAS

SAS Training 129

Selected SAS Informats

$w: Reads standard character data.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.

Page 130: SAS

SAS Training 130

Selected SAS InformatsFormat $w Example :

input @1 name $5.;

Data lines Results

----+----1

XYZ XYZ##

XYZ XYZ##

.

X YZ X#YZ#

*The character # represents a blank space

Page 131: SAS

SAS Training 131

SAS Procedures Print Format Sort Append Contents Transpose SQL

Page 132: SAS

SAS Training 132

Proc Print

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

Page 133: SAS

SAS Training 133

Syntax

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

VAR variable(s);

Options: Obs=n

Page 134: SAS

SAS Training 134

Hands-On Exercise

Create a List Report from the Cake Dataset displaying the first 10 Observations

Expected Output:

Page 135: SAS

SAS Training 135

Solution

proc print data = cake (obs=10);

var lastname flavor pscore;

run;

Page 136: SAS

SAS Training 136

User Defined Format Proc Format The FORMAT procedure enables

you to define your own informats and formats for variables.

Page 137: SAS

SAS Training 137

Syntax

PROC FORMAT <option(s)>; VALUE <$>name <(format-

option(s))> value-range-set(s);

Page 138: SAS

SAS Training 138

Example Proc Format; value $genders ‘m’=“Male” ‘f’=“Female” Run;

Proc Print data=customer.demo; format sex $gender.; run;

Page 139: SAS

SAS Training 139

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 Female

Page 140: SAS

SAS Training 140

Hands-On Exercise

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

Page 141: SAS

SAS Training 141

Hands-On ExerciseExpected Output

Page 142: SAS

SAS Training 142

Solution

proc format;

value $sex 'M' = 1

'F' = 2

;

run;

proc print data = train.class;

format sex $sex.;

run;

Page 143: SAS

SAS Training 143

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.

Page 144: SAS

SAS Training 144

Syntax

PROC SORT <option(s)> <collating-sequence-option>

BY <DESCENDING> variable-1 <...<DESCENDING> variable-n>;

Options(s) :nodupkey

Page 145: SAS

SAS Training 145

Example

Company Debt Town

Paul's Pizza 83.00 Apex

Apex World Wide Electronics

119.95 Apex

Garner Strickland Industries

657.22 Apex

Morrisville Ice Cream Delight

299.98 Apex

Account

Page 146: SAS

SAS Training 146

proc sort data=account out=bytown; 

by town company; run; proc print data=bytown;   var company town debt; title 'Customers with Past-Due

Accounts'; title2 'Listed Alphabetically

within Town'; run;

Page 147: SAS

SAS Training 147

Output

Customers with Past-Due Accounts Listed Alphabetically within Town Obs Company Town

Debt 1 Apex World Wide Electronics Apex 119.95

2 Garner Strickland Industries Apex 657.22

3 Morrisville Ice Cream Delight Apex 299.98

4 Paul's Pizza Apex 83.00

Page 148: SAS

SAS Training 148

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;

Duplicate observations

Page 149: SAS

SAS Training 149

Towns of Customers with Past-Due Accounts

Obs Town Company Debt 1 Apex Paul's Pizza 83.00 2 Garner World Wide Electronics 119.95 3 Holly Springs Ice Cream Delight 299.98 4 Morrisville Strickland Industries 657.22

Output

Page 150: SAS

SAS Training 150

Hands-On Exercise

SORT DUPOBS dataset to create dataset A. sort the data by descending tourtype and vendor and ascending landcostExpected Output

Page 151: SAS

SAS Training 151

Solution

proc sort data = dupobs ;

by descending tourtype descending vendor landcost;

run;

Page 152: SAS

SAS Training 152

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

Page 153: SAS

SAS Training 153

Syntax

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

Page 154: SAS

SAS Training 154

name age height

Andrew

15 67

Robert 15 78

Philip 14 70

Example

name age

height

Andrea 16 60

Linda 13 55

Stephen

17 72

Class – 1 Class -2

Page 155: SAS

SAS Training 155

Example

PROC APPEND BASE=class1 DATA=class2; RUN;

Page 156: SAS

SAS Training 156

Outputname age height

Andrew 15 67

Robert 15 78

Philip 14 70

Andrea 16 60

Linda 13 55

Stephen 17 72

Page 157: SAS

SAS Training 157

Hands On - Exercise

Append datasets DEPT1 and DEPT2 and create replace DEPT1 with the appended dataset

Expected Output

Page 158: SAS

SAS Training 158

Solution

proc append base = dept1 data=dept2;

run;

proc print data = dept1;

run;

Page 159: SAS

SAS Training 159

Proc Contents

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

Page 160: SAS

SAS Training 160

Example

proc contents data=test.records;

run;

Page 161: SAS

SAS Training 161

Output

Page 162: SAS

SAS Training 162

Hands-On Exercise

Display the Dataset structure of DUPOBS dataset

Page 163: SAS

SAS Training 163

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 Transposed data

X Y Z _NAME_ COL1 COL2 COL3 COL4

12 19 14 X 12 21 33 14

21 15 19 =) Y 19 15 27 32

33 27 82 Z 14 19 82 99

14 32 99

Page 164: SAS

SAS Training 164

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);

Page 165: SAS

SAS Training 165

To do this 

Use this statement

Transpose each BY group BY

Copy variables directly without transposing them

COPY

Specify a variable whose values name the transposed variables

ID

Create labels for the transposed variables

IDLABEL

List the variables to transpose VAR

Page 166: SAS

SAS Training 166

Hands-On Exercise

Transpose the dataset grp_tran in the Train library to get the output as shown below

Page 167: SAS

SAS Training 167

Solutionproc sort data = grp_tran;

by grp;

run;

proc transpose data = grp_tran out = result (drop= _name_);

by grp;

run;

proc print data = result;

run;

Page 168: SAS

SAS Training 168

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

Proc SQL

Page 169: SAS

SAS Training 169

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….

Page 170: SAS

SAS Training 170

Syntax

CONT….

 CREATE TABLE table-name (column-definition <,column-definition>...);

  (column-specification , ...<constraint-specification > ,...) ;   DROP TABLE table-name <,table-name>...;   DROP VIEW view-name <,view-name>...;   INSERT INTO table-name|sas/access-view|proc-sql-

view<(column<,column>...)>   VALUES (value<,value>...)

<VALUES (value <,value>...)>...;

Page 171: SAS

SAS Training 171

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>...>;

Page 172: SAS

SAS Training 172

Example

Proc Sql; select Lname, Fname, City, State,

IdNumber, Salary, Jobcode from staff, payrollwhere idnumber=idnum ;

Quit;

Page 173: SAS

SAS Training 173

Hands-On Exercise

Create Table for Females from the Class dataset using Proc Sql.

Expected Output

Page 174: SAS

SAS Training 174

Solutionproc sql;

create table females as select * from class where sex = 'F';

select * from females;

quit;

Page 175: SAS

SAS Training 175

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.

Proc GPLOT

Page 176: SAS

SAS Training 176

SyntaxPROC GPLOT <DATA=input-data-set>

</option(s) >;

PLOT plot-request(s) </option(s)PLOT2 plot-request(s) option(s)>;

Page 177: SAS

SAS Training 177

Exampleproc gplot data = dupobs;

goptions reset = all;

plot landcost*country;

run;

Page 178: SAS

SAS Training 178

Output

Page 179: SAS

SAS Training 179

Exampleproc 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;

Page 180: SAS

SAS Training 180

Output

Page 181: SAS

SAS Training 181

PROC MEANS

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

Page 182: SAS

SAS Training 182

Syntax

PROC MEANS <option(s)> BY <DESCENDING> variable-1 <...

<DESCENDING> variable-n><NOTSORTED>;

CLASS variable(s) </ option(s)>; OUTPUT <OUT=SAS-data-set>

<output-statistic-specification(s)>

Page 183: SAS

SAS Training 183

PROC MEANS (OPTIONS)

Specify the number of decimal places for the statistics

MAXDEC=

Suppress all displayed output NOPRINT

Order the values of the class variables according to the specified order

ORDER=

Limit the output statistics to the observations with the highest _TYPE_ value

NWAY

Page 184: SAS

SAS Training 184

PROC MEANS (BY)Produces separate statistics for each BY group.

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

Example: Input Data set

Page 185: SAS

SAS Training 185

PROC MEANS (CLASS)

Specifies the variables whose values define the subgroup combinations for the analysis.

Page 186: SAS

SAS Training 186

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

Page 187: SAS

SAS Training 187

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;

Page 188: SAS

SAS Training 188

PROC MEANS (CLASS)

proc means data = prod;class cat product;var sales;output out = prodsta n=n sum=total; run;

Page 189: SAS

SAS Training 189

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.

Page 190: SAS

SAS Training 190

PROC Summary

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

Page 191: SAS

SAS Training 191

SyntaxPROC 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>;

Page 192: SAS

SAS Training 192

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

Page 193: SAS

SAS Training 193

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.

Page 194: SAS

SAS Training 194

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

Page 195: SAS

SAS Training 195

PROC REPORT (TYPES)

Page 196: SAS

SAS Training 196

PROC REPORT (TYPES)

Page 197: SAS

SAS Training 197

Page 198: SAS

SAS Training 198

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.

Page 199: SAS

SAS Training 199

Typical Report ExampleInput 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;

Page 200: SAS

SAS Training 200

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 ;REBREAK location </ option(s)>;

Page 201: SAS

SAS Training 201

PROC REPORT (OPTIONS)Select the windowing or the nonwindowing environment

WINDOWS| NOWINDOWS

Specify the default number of characters for columns containing computed variables or numeric data set variables

COLWIDTH=

Underline all column headers and the spaces between them

HEADLINE

Write a blank line beneath all column headers HEADSKIP

Specify the split character SPLIT=

Specify the number of blank characters between columns

SPACING=

Page 202: SAS

SAS Training 202

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-item-

n> • (`header-1 ' < . . . `header-n '> report-item(s) ) • report-item=name

Page 203: SAS

SAS Training 203

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;

Page 204: SAS

SAS Training 204

PROC REPORT

Decide the usage of a variable in DEFINE statement

these usages are• DISPLAY• ORDER• ACROSS• GROUP• ANALYSIS

Page 205: SAS

SAS Training 205

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

Page 206: SAS

SAS Training 206

PROC REPORT (DEFINE OPTIONS)

Assign a SAS or user-defined format to the item FORMAT=

Order the values of a group, order, or across variable according to the specified order

ORDER=

Define the number of blank characters to leave between the column being defined and the column immediately to its left

SPACING=

Define the width of the column in which PROC REPORT displays the report item

WIDTH=

Reverse the order in which PROC REPORT displays rows or values of a group, order, or across variable

DESCENDING

JUSTIFY Formatted Values CENTER, LEFT, RIGHT

Page 207: SAS

SAS Training 207

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.

RBREAK location </ option(s)>;

Write a blank line for the last break line of a break located at the beginning of the report

SKIP

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

PAGE

Page 208: SAS

SAS Training 208

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;

Page 209: SAS

SAS Training 209

SAS DateSAS Date : is a value that represents thenumber of days between January 1, 1960, anda specified date. SAS can perform calculationson dates ranging from A.D. 1582 to A.D.19,900. Dates before January 1, 1960, arenegative numbers; dates after are positivenumbers.

Page 210: SAS

SAS Training 210

SAS Date

How SAS Converts Calendar Dates to SAS

Date Values :

Page 211: SAS

SAS Training 211

SAS DateWorking 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.

Page 212: SAS

SAS Training 212

SAS DateExample: Reading, Writing, and

Calculating Date Valuesdata 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 ;

Page 213: SAS

SAS Training 213

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

Page 214: SAS

SAS Training 214

SAS Date

Date formatsDATEw. Format: Writes date values in

the form ddmmmyy or ddmmmyyyy.

Syntax : DATEw.

Page 215: SAS

SAS Training 215

SAS Date

ExamplesThe example table uses the input value of 15415, which is

the

SAS date value that corresponds to March 16, 2002.

Page 216: SAS

SAS Training 216

SAS Date

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

SyntaxDDMMYYw.

Page 217: SAS

SAS Training 217

SAS DateExamples : The example table uses the input value of 15415,

which isthe SAS date value that corresponds to March 16, 2002.

Page 218: SAS

SAS Training 218

SAS Date

Date InformatsDATEw. : Reads date values in the form

ddmmmyy or ddmmmyyyy.

SyntaxDATEw.

Page 219: SAS

SAS Training 219

SAS Date

Example :input calendar_date date11.;

Page 220: SAS

SAS Training 220

SAS DateDDMMYYw. Informat :Reads date

values inthe form ddmmyy or ddmmyyyy.

SyntaxDDMMYYw.

Page 221: SAS

SAS Training 221

SAS Date

Example :input calendar_date ddmmyy10.;

Page 222: SAS

SAS Training 222

SAS DateFunctions

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.

Page 223: SAS

SAS Training 223

SAS Date

Example :

tday=date(); Put tday ddmmyy8.;

Page 224: SAS

SAS Training 224

SAS DateTODAY 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 datein the form of a SAS date value, which is the

number ofdays since January 1, 1960.

Page 225: SAS

SAS Training 225

SAS DateYEAR 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.

Page 226: SAS

SAS Training 226

SAS Date

Example :

Page 227: SAS

SAS Training 227

SAS DateMONTH function : Returns the month from aSAS 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.

Page 228: SAS

SAS Training 228

SAS Date

Example :

Page 229: SAS

SAS Training 229

SAS DateDAY Function : Returns the day of the month

from a SAS date value.

Syntax :DAY(date)

Details : The DAY function produces an integerfrom 1 to 31 that represents the day of themonth.

Page 230: SAS

SAS Training 230

SAS Date

Example :

Page 231: SAS

SAS Training 231

SAS DateQTR function: Returns the quarter of the year

from a SAS date value.

Syntax :QTR(date)

Details : The QTR function returns a value of1, 2, 3, or 4 from a SAS date value to indicatethe quarter of the year in which a date valuefalls.

Page 232: SAS

SAS Training 232

SAS Date

Example :

Page 233: SAS

SAS Training 233

SAS DateWEEKDAY Function : Returns the day of the week

from a SAS date value.

Syntax :WEEKDAY(date)

Details : The WEEKDAY function produces an integerthat represents the day of the week, where

1=Sunday,2=Monday, . . . , 7=Saturday.

Page 234: SAS

SAS Training 234

SAS Date

Example :

Page 235: SAS

SAS Training 235

SAS Date

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

Syntax :MDY(month,day,year)

Page 236: SAS

SAS Training 236

SAS Date

Example :

Page 237: SAS

SAS Training 237

INTRODUCTION TO MACROS

Page 238: SAS

SAS Training 238

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

What is a Macro Facility?

Page 239: SAS

SAS Training 239

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;

Replacing Text Strings Using Macro Variables

Page 240: SAS

SAS Training 240

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”

The form &name is called a macro variable reference.

Page 241: SAS

SAS Training 241

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

Page 242: SAS

SAS Training 242

Generating SAS Code Using Macros

Eg:

%macro mac1;

data temp1;

set temp;

x= ‘Hello’;

run;

%mend mac1;

%mac1;

Execution of this macro produces the following program:

data temp1;

set temp;

x= ‘Hello’;

run;

Page 243: SAS

SAS Training 243

Generating SAS Code Using Macros

Execution of this macro produces the following program:

data temp1;

set temp;

x= ‘Hello’;

run;

Page 244: SAS

SAS Training 244

Hands – On Exercise

Create a macro datcrt that creates a data set cake1 from

train.cake

Page 245: SAS

SAS Training 245

Solution

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

Page 246: SAS

SAS Training 246

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

Page 247: SAS

SAS Training 247

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);

Page 248: SAS

SAS Training 248

Hands – On Exercise

Create a Macro datprnt that prints the data set cake and

dept1 when passed as a macro parameter

Page 249: SAS

SAS Training 249

Solution

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

Page 250: SAS

SAS Training 250

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;

Page 251: SAS

SAS Training 251

Conditionally Generating SAS Code

%test(info=print,mydata = data1); /* Calling the Macro */

Result of the macro execution:

Proc print data = data1;

run;

Page 252: SAS

SAS Training 252

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 variablesEg: Sysdate,Sysday, SysProcessID, etc.

Page 253: SAS

SAS Training 253

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.

Page 254: SAS

SAS Training 254

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;

Using Macro Variables

Page 255: SAS

SAS Training 255

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;

Page 256: SAS

SAS Training 256

Combining Macro Variable References with Text

DATA=PERSNL&YR.EMPLOYES, where &YR contains two characters for a yearData = &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;

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

Page 257: SAS

SAS Training 257

Combining Macro Variable References with Text

Eg:DATA=PERSNL&YR.EMPLOYES, where &YR contains two characters for a yearData = &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;

Page 258: SAS

SAS Training 258

Hands – On Exercise

Create a data set newcake from cake by passing cake as

a macro parameter

Page 259: SAS

SAS Training 259

Solution

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

Page 260: SAS

SAS Training 260

Hands – On Exercise

Create a data set cakenew from cake by passing cake as

a macro parameter

Page 261: SAS

SAS Training 261

Solution

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

Page 262: SAS

SAS Training 262

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 */

Page 263: SAS

SAS Training 263

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:

1. resolves && to & 2. passes CITY as text 3. resolves &N into 3 4. returns to the beginning of the macro variable reference, &CITY3,

starts resolving from the beginning again, and prints the value of CITY3 which is Chennai.

Page 264: SAS

SAS Training 264

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(macro-name):

3) SYMBOLGEN : Controls whether the results of resolving macro variable references are displayed for debuggingSYMBOLGEN displays the results in this form: SYMBOLGEN: Macro variable name resolves to value

Page 265: SAS

SAS Training 265

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);

Page 266: SAS

SAS Training 266

Debugging a Macro ProgramMLOGIC(TEST): Beginning execution.MLOGIC(TEST): Parameter X has value 1SYMBOLGEN: Macro variable X resolves to 1MLOGIC(TEST): %IF condition &x = 1 is TRUEMLOGIC(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.

Page 267: SAS

SAS Training 267

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

Page 268: SAS

SAS Training 268

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.

Page 269: SAS

SAS Training 269

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 is created at the beginning of the execution of a macro.

Page 270: SAS

SAS Training 270

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

Page 271: SAS

SAS Training 271

Global Macro Variables

Global Macro Variables

                                     

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

Page 272: SAS

SAS Training 272

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.

Page 273: SAS

SAS Training 273

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. ***;

Page 274: SAS

SAS Training 274

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, but outside the macro they do not exist and therefore do not resolve.

Page 275: SAS

SAS Training 275

Local Macro Variables

Local Macro Variables

                                     

    

Page 276: SAS

SAS Training 276

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

Page 277: SAS

SAS Training 277

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 BILL.

Page 278: SAS

SAS Training 278

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 the macro variables POS1, POS2, and POS3.

Page 279: SAS

SAS Training 279

Hands – On Exercise

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

SYMPUT

Page 280: SAS

SAS Training 280

Solution

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

Page 281: SAS

SAS Training 281

SYMGET

SyntaxSYMGET(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 iteration

Page 282: SAS

SAS Training 282

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;;

Page 283: SAS

SAS Training 283

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?

Page 284: SAS

SAS Training 284

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;);