SAS
-
Upload
api-3774693 -
Category
Documents
-
view
40 -
download
1
Transcript of 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.
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
SAS Training 3
Program Editor Window
Write your code in this window
Explorer and Results Window
SAS Training 4
Log Window
Log Window
View the Log Created by
the Program Execution
SAS Training 5
Output Window
Output Window
View the Values of a Dataset in this Window
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
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 ‘.’
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.
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
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
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.
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
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.
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
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;
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;
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)><@|@@>;
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
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)
SAS Training 20
INPUT (DATALINES)
Data newdata;Input name $ age;DATALINES;Mary 24 Suzan 32;Run;
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> <@ | @@>;
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;
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. <@ | @@>;
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
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 <$>
<&> <@ | @@>;
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 ;
SAS Training 27
Merge Statement The MERGE statement is flexible
and has a variety of uses in SAS programming
One-to-One Match Merge
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.
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.
SAS Training 30
Example – One to One Merge
SAS Training 31
Example – Match Merge
SAS Training 32
Example – Match Merge
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;
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).
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.
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.
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
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.
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
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
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).
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
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.
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;
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
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.
SAS Training 47
Selected SAS FunctionsFunction UPCASE Examples :
SAS Statement Results
name=upcase('John B. Smith'); put name;
JOHN B. SMITH
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.
SAS Training 49
Selected SAS FunctionsFunction LOWCASE Examples :
SAS Statement Results
x='INTRODUCTION'; y=lowcase(x); put y;
introduction
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.
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
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.
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
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.
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
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.
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
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.
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
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.
SAS Training 61
Selected SAS FunctionsFunction LENGTH Examples :
SAS Statements Results
len=length('ABCDEF'); put len;
6
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.
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
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.
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.
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;
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.
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;
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.
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;
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.
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;
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.
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";
SAS Training 75
Selected SAS Statements
Removing a Label This example removes an existing label:
data rtest; set rtest; label x=' ';
run;
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.
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.
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.
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;
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.
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';
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.
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.
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';
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.
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.
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;
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.
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.
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.
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;
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.
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;
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 @.
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>;
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.
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:
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;
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.
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';
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.
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';
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.
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));
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.
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.
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.
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;
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.
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;
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.
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;
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.
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);
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.
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;
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
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.
SAS Training 119
Selected SAS Formats
$CHARw: Writes standard character data.
Syntax
$CHARw.
Syntax Description w specifies the width of the output field.
SAS Training 120
Selected SAS FormatsFormat $CHARw Example :
put @7 name $char4.;
Values Results
----+----1
XYZ XYZ
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.
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.
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
SAS Training 124
Selected SAS FormatsFormat DOLLARw.d Example :
put @3 netpay dollar10.2;
Values Results
----+----1----+
1254.71 $1,254.71
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.
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.
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.
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
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.
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
SAS Training 131
SAS Procedures Print Format Sort Append Contents Transpose SQL
SAS Training 132
Proc Print
The PRINT procedure prints the observations in a SAS data set, using all or some of the variables.
SAS Training 133
Syntax
PROC PRINT <option(s)BY <DESCENDING> variable-1 <...<DESCENDING> variable;
VAR variable(s);
Options: Obs=n
SAS Training 134
Hands-On Exercise
Create a List Report from the Cake Dataset displaying the first 10 Observations
Expected Output:
SAS Training 135
Solution
proc print data = cake (obs=10);
var lastname flavor pscore;
run;
SAS Training 136
User Defined Format Proc Format The FORMAT procedure enables
you to define your own informats and formats for variables.
SAS Training 137
Syntax
PROC FORMAT <option(s)>; VALUE <$>name <(format-
option(s))> value-range-set(s);
SAS Training 138
Example Proc Format; value $genders ‘m’=“Male” ‘f’=“Female” Run;
Proc Print data=customer.demo; format sex $gender.; run;
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
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.
SAS Training 141
Hands-On ExerciseExpected Output
SAS Training 142
Solution
proc format;
value $sex 'M' = 1
'F' = 2
;
run;
proc print data = train.class;
format sex $sex.;
run;
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.
SAS Training 144
Syntax
PROC SORT <option(s)> <collating-sequence-option>
BY <DESCENDING> variable-1 <...<DESCENDING> variable-n>;
Options(s) :nodupkey
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
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;
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
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
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
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
SAS Training 151
Solution
proc sort data = dupobs ;
by descending tourtype descending vendor landcost;
run;
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
SAS Training 153
Syntax
PROC APPEND BASE=<libref.>SAS-data-set <DATA=<libref.>SAS-data-set> <FORCE> ;
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
SAS Training 155
Example
PROC APPEND BASE=class1 DATA=class2; RUN;
SAS Training 156
Outputname age height
Andrew 15 67
Robert 15 78
Philip 14 70
Andrea 16 60
Linda 13 55
Stephen 17 72
SAS Training 157
Hands On - Exercise
Append datasets DEPT1 and DEPT2 and create replace DEPT1 with the appended dataset
Expected Output
SAS Training 158
Solution
proc append base = dept1 data=dept2;
run;
proc print data = dept1;
run;
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.
SAS Training 160
Example
proc contents data=test.records;
run;
SAS Training 161
Output
SAS Training 162
Hands-On Exercise
Display the Dataset structure of DUPOBS dataset
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
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);
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
SAS Training 166
Hands-On Exercise
Transpose the dataset grp_tran in the Train library to get the output as shown below
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;
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
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….
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>...)>...;
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>...>;
SAS Training 172
Example
Proc Sql; select Lname, Fname, City, State,
IdNumber, Salary, Jobcode from staff, payrollwhere idnumber=idnum ;
Quit;
SAS Training 173
Hands-On Exercise
Create Table for Females from the Class dataset using Proc Sql.
Expected Output
SAS Training 174
Solutionproc sql;
create table females as select * from class where sex = 'F';
select * from females;
quit;
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
SAS Training 176
SyntaxPROC GPLOT <DATA=input-data-set>
</option(s) >;
PLOT plot-request(s) </option(s)PLOT2 plot-request(s) option(s)>;
SAS Training 177
Exampleproc gplot data = dupobs;
goptions reset = all;
plot landcost*country;
run;
SAS Training 178
Output
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;
SAS Training 180
Output
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.
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)>
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
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
SAS Training 185
PROC MEANS (CLASS)
Specifies the variables whose values define the subgroup combinations for the analysis.
SAS Training 186
PROC MEANS (NWAY)proc means data = prod nway;class cat product;var sales;output out = prodsta n=n sum=total;run;
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;
SAS Training 188
PROC MEANS (CLASS)
proc means data = prod;class cat product;var sales;output out = prodsta n=n sum=total; run;
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.
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
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>;
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
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.
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
SAS Training 195
PROC REPORT (TYPES)
SAS Training 196
PROC REPORT (TYPES)
SAS Training 197
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.
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;
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)>;
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=
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
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;
SAS Training 204
PROC REPORT
Decide the usage of a variable in DEFINE statement
these usages are• DISPLAY• ORDER• ACROSS• GROUP• ANALYSIS
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
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
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
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;
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.
SAS Training 210
SAS Date
How SAS Converts Calendar Dates to SAS
Date Values :
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.
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 ;
SAS Training 213
SAS Dateproc print data=meeting; format mtg sendmail date9.; title 'When To Send Announcements'; run;
SAS Training 214
SAS Date
Date formatsDATEw. Format: Writes date values in
the form ddmmmyy or ddmmmyyyy.
Syntax : DATEw.
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.
SAS Training 216
SAS Date
DDMMYYw. Format : Writes date values in the form ddmmyy or ddmmyyyy.
SyntaxDDMMYYw.
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.
SAS Training 218
SAS Date
Date InformatsDATEw. : Reads date values in the form
ddmmmyy or ddmmmyyyy.
SyntaxDATEw.
SAS Training 219
SAS Date
Example :input calendar_date date11.;
SAS Training 220
SAS DateDDMMYYw. Informat :Reads date
values inthe form ddmmyy or ddmmyyyy.
SyntaxDDMMYYw.
SAS Training 221
SAS Date
Example :input calendar_date ddmmyy10.;
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.
SAS Training 223
SAS Date
Example :
tday=date(); Put tday ddmmyy8.;
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.
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.
SAS Training 226
SAS Date
Example :
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.
SAS Training 228
SAS Date
Example :
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.
SAS Training 230
SAS Date
Example :
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.
SAS Training 232
SAS Date
Example :
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.
SAS Training 234
SAS Date
Example :
SAS Training 235
SAS Date
MDY Function :Returns a SAS date value from month, day, and year values.
Syntax :MDY(month,day,year)
SAS Training 236
SAS Date
Example :
SAS Training 237
INTRODUCTION TO MACROS
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?
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
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.
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
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;
SAS Training 243
Generating SAS Code Using Macros
Execution of this macro produces the following program:
data temp1;
set temp;
x= ‘Hello’;
run;
SAS Training 244
Hands – On Exercise
Create a macro datcrt that creates a data set cake1 from
train.cake
SAS Training 245
Solution
%macro datcrt; data cake1; set train.cake; run;%macro datcrt;%datcrt;
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
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);
SAS Training 248
Hands – On Exercise
Create a Macro datprnt that prints the data set cake and
dept1 when passed as a macro parameter
SAS Training 249
Solution
%macro datprnt (dat= ); proc print data = &dat; run;%mend datprnt;%datprnt (dat=cake);%datprnt (dat=dept1);
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;
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;
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.
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.
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
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;
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
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;
SAS Training 258
Hands – On Exercise
Create a data set newcake from cake by passing cake as
a macro parameter
SAS Training 259
Solution
%macro app(dat=); data new&dat; set cake; run;%mend app;%app(dat=cake);
SAS Training 260
Hands – On Exercise
Create a data set cakenew from cake by passing cake as
a macro parameter
SAS Training 261
Solution
%macro app(dat=); data &dat.new; set cake; run;%mend app;%app(dat=cake);
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 */
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.
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
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);
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.
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
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.
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.
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
SAS Training 271
Global Macro Variables
Global Macro Variables
The new macro variable definition simply updates the existing global one.
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.
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. ***;
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.
SAS Training 275
Local Macro Variables
Local Macro Variables
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
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.
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.
SAS Training 279
Hands – On Exercise
Create macro varialbes ssn1, ssn2,….sssn from ssn variable in dept1 dataset using CALL
SYMPUT
SAS Training 280
Solution
Data _null_; set dept1; call symput (‘ssn’||left(_n_),ssn); run;
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
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;;
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?
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;);