Академический Документы
Профессиональный Документы
Культура Документы
data entry, retrieval, and management report writing and graphics statistical an
d mathematical analysis business planning, forecasting, and decision support ope
rations research and project management quality improvement applications develop
ment.
SAS Training
1
Basics about SAS
SAS expects your data to be in a special form. This special form is called a SAS
data set The SAS data set is a tabular form with Variables and Observations The
rows are the Observations The columns are the Variables
SAS Training 6
Example of a SAS Data set
ID
1 2 53 54 55 56 57 58 Mary
Variables N HT AME 42 Lucy
Tom Dan Tim 46 43 45 42 48
WT
41 54 . 56 48 43
Observation s
3 4 5 6
•ID, HT and WT are Numeric Variables •NAME is a Character Variable •Character Variable
s if blank are represented by a space •Numeric Variables if blank are represented
by a ‘.’ SAS Training 7
Building Blocks of a SAS Program
A SAS program is constructed from two building blocks 2) DATA Step 3) PROC Step
A typical SAS program starts with a DATA step to create a SAS dataset and then p
asses on to the PROC step to do the analysis.
SAS Training
8
Basic Components of SAS, Continued
Data Step
SAS statement that read data, create new datasets or variables, modify datasets,
perform calculation.
Procedures
SAS statements that can perform statistical analyses, create & print reports & g
raphs
SAS Training
9
Basic Components of SAS
Every SAS program is constructed using the Data Step and/or Procedures e.g. DATA
distance; miles = 23; DATA Step kilometer = 1.61 * miles; RUN; PROC PRINT DATA
= distance; RUN;
PROC Step
Any combination of Data Step and/or Procedures may be used Run statement should
be used throughout the program
SAS Training 10
Difference Between a DATA step and a PROC step
DATA steps steps
PROC
Begin with PROC
Begin with DATA statements statements
Read and modify data Perform specific analysis or function Note: The table is no
t meant to imply that PROC can never create Produce results or report SAS Create
a (some do), setthat DATA step can never create data sets SAS data or
reports (they can) But it is much easier to write SAS programs if one can unders
tand the basic functions of DATA and PROC steps.
SAS Training
11
Execution of SAS data set
Data Steps execute line by line and observation by observation SAS takes the fir
st observation and runs it all the way through the data step (line by line) befo
re looping back to pick up the second observation SAS sees one observation at a
time.
DATA step Line 1 Line 2 Line 3 Line 4 Line 5 SAS Training Output data set Observ
ation 1 Observation 2 Observation 3
Input data set Observation 1 Observation 2 Observation 3
12
Rules for SAS programs
Every SAS statement end with a semicolon. e.g. Data test; Names must be 8 charac
ters 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. dist
ance, _abc are valid. Names can contain only letters, numerals and the underscor
e (_). No %$!*&#@ please.
SAS Training
13
Rules for SAS program Statements
SAS program statements can Be in upper or lower case Continue on the next line B
e on the same line as other statements Start in any column
SAS Training
14
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> <hos
t-options>; INPUT <specification(s)><@|@@>; Run;
SAS Training
15
Reading data using DATALINES
A SAS data set can also be created bytyping values in the SAS program editor usi
ng DATALINES;
Basic Code Structure
DATA dataset-name; INPUT <specification(s)><@|@@>; DATALINES; ………….. …………..’ ; Run;
SAS Training 16
INPUT
Describes the arrangement of values in the input data record and assigns input v
alues to the corresponding SAS variables
INPUT <specification(s)><@|@@>;
SAS Training
17
INPUT (SPECIFICATIONS)
variable - names a variable that is assigned input values $ - indicates to store
the variable value as a character value rather than as a numeric value. pointer
-control - moves the input pointer to a specified line or column in the input bu
ffer. informat. - specifies an informat to use to read the variable value
SAS Training 18
EXAMPLE 1 (EXTERNAL FILE)
Dat.txt in C:/ Mary 24 Suzan 34
Data newdata; Infile ‘C:/dat.txt’; Input name $ age; Run;
Resulting SAS data set (newdata)
SAS Training
19
INPUT (DATALINES)
Data newdata; Input name $ age; DATALINES; Mary 24 Suzan 32 ; Run;
SAS Training 20
INPUT TYPES
INPUT, COLUMN : Reads input values from specified columns and assigns them to th
e corresponding SAS variables Syntax: INPUT variable <$> start-column <-end-colu
mn> <.decimals> <@ | @@>;
SAS Training 21
Example
data scores; input name $ 1-18 score1 25-27 score2 30-32 score3 35-37; datalines
; Joseph 11 32 76 Mitchel 13 29 82 Sue Ellen 14 27 74 ; Run;
SAS Training 22
INPUT TYPES
INPUT, Formatted : Reads input values with specified informats and assigns them
to the corresponding SAS variables.
Syntax:
INPUT <pointer-control> variable informat. <@ | @@>;
SAS Training 23
Example
data sales; infile file-specification; input item $10. +5 jan comma5. +5 feb com
ma5. +5 mar comma5.; run;
It can read these input data records: ----+----1----+----2----+----3----+----4 t
rucks 1,382 2,789 3,556 vans 1,265 2,543 3,987 sedans 2,391 3,011 3,658
SAS Training 24
INPUT TYPES
INPUT, List : Scans the input data record for input values and assigns them to t
he corresponding SAS variables. Syntax : INPUT <pointer-control> variable <$> <&
> <@ | @@>;
SAS Training
25
Example
data scores; input name $ score1 score2 score3 team $; datalines; Joe 11 32 76 r
ed Mitchel 13 29 82 blue Susan 14 27 74 green ;
SAS Training
26
Merge Statement
The MERGE statement is flexible and has a variety of uses in SAS programming One
-to-One Match Merge
SAS Training
27
One-to-one matching
To combine variables from several data sets where there is a one-toone correspon
dence between the observations in each of the data sets, list the data sets to b
e joined on a merge statement.
SAS Training
28
Match Merge
When there is not an exact one-toone correspondence between data sets to be merg
ed, the variables to use to identify matching observations can be specied on a b
y statement. The data sets being merged must be sorted by the variables specifie
d on the by statement.
SAS Training 29
Example – One to One Merge
SAS Training
30
Example – Match Merge
SAS Training
31
Example – Match Merge
SAS Training
32
Manipulating result of merge statement with IN values * IN option indicates whic
h data set record came from;
DATA new; MERGE old1 (IN=INOLD1) old2 (IN=IN0LD2); BY NAME IF INOLD1 and INOLD2;
RUN;
* If statement keeps only those records that are in both data sets;
SAS Training
33
SAS Functions
Definition of Functions
A SAS function performs a computation or system manipulation on arguments and re
turns a value. Most functions use arguments supplied by the user, but a few obta
in their arguments from the operating environment. In base SAS software, you can
use SAS functions in DATA step programming statements, in a WHERE expression, i
n macro language statements, in PROC REPORT, and in Structured Query Language (S
QL).
SAS Training
34
Syntax of Functions
Numeric Functions
Character Functions
TRIM: Removes trailing blanks from character expressions and returns one blank i
f 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 re
turns the trimmed argument as a result. If the argument is blank, TRIM returns o
ne blank. TRIM is useful for concatenating because concatenation does not remove
trailing blanks. Assigning the results of TRIM to a variable does not affect th
e length of the receiving variable. If the trimmed value is shorter than the len
gth of the receiving variable, SAS pads the value with new blanks as it assigns
it to the variable.
SAS Training 56
Selected SAS Functions
Function TRIM Examples : 2. Removing Trailing Blanks These statements and this d
ata line produce these results: data test; input part1 $ 1-10 part2 $ 11-20; has
blank=part1||part2; noblank=trim(part1)||part2; put hasblank; put noblank; datal
ines; Data Line Results apple sauce ----+----1----+----2 apple sauce applesauce
SAS Training 57
Selected SAS Functions
Definition of Statements
A SAS statement is a series of items that may include keywords, SAS names, speci
al characters, and operators. All SAS statements end with a semicolon. A SAS sta
tement either requests SAS to perform an operation or gives information to the s
ystem. There are two kinds of SAS statements:
those used in DATA step programming those that are global in scope and can be us
ed anywhere in a SAS program.
SAS Training
64
Selected SAS Statements
These examples show the correct syntax for listing variables with the DROP state
ment: drop time shift batchnum; drop grade1-grade20; In this example, the variab
les PURCHASE and REPAIR are used in processing but are not written to the output
data set INVENTRY: data inventry; drop purchase repair; infile file-specificati
on; input unit part purchase repair; totcost=sum(purchase,repair); run;
SAS Training
70
Selected SAS Statements
• • • •
Specifying Labels Here are several LABEL statements: label compound= Type of Dru
g ; label date="Today s Date "; label n= Mark s Experiment Number ; label score
1="Grade on April 1 Test" score2="Grade on May 1 Test";
SAS Training 74
Selected SAS Statements
Removing a Label This example removes an existing label: data rtest; set rtest;
label x= ; run;
SAS Training
75
Selected SAS Statements
RENAME : Specifies new names for variables in output SAS data sets
Syntax RENAME old-name-1=new-name-1 . . . <old-name-n=newname-n>; Arguments old-
name specifies the name of a variable or variable list as it appears in the inpu
t data set, or in the current DATA step for newly created variables. new-name sp
ecifies the name or list to use in the output data set. Details The RENAME state
ment allows you to change the names of one or more variables, variables in a lis
t, 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 s
tatements for the current DATA step. RENAME SAS Training 78 applies to all outpu
t data sets.
Selected SAS Statements
Statement RENAME Examples :
These examples show the correct syntax for renaming variables using the RENAME s
tatement
• • •
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 wit
h Mac and the value for CITY is Charleston or Atlanta data testmacs; set custome
r; 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 e
mpnum between 500 and 1000; • Using CONTAINS: where company ? bay ; where company
contains bay ;
SAS Training 81
Selected SAS Statements
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 m
onth in which the expenses were accrued: by month notsorted;
SAS Training 87
•
Selected SAS Statements
Statement RETAIN Examples : This RETAIN statement retains the values of variable
s 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 initia
l values: retain month1-month5 1 year 0 a b c XYZ ; The values of MONTH1 throug
h MONTH5 are set initially to 1; YEAR is set to 0; variables A, B, and C are eac
h set to the character value XYZ. This RETAIN statement assigns the initial valu
e 1 to the variable MONTH1 only: retain month1-month5 (1); Variables MONTH2 thro
ugh MONTH5 are set to missing initially.
SAS Training
91
Selected SAS Statements
Global Statements
Statement LIBNAME Examples : Assigning and Using a Libref This example assigns t
he 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, SALE
S.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.qu
arter1; run;
SAS Training 98
Selected SAS Statements
Statement TITLE Examples : This statement suppresses a title on line n and all l
ines after it: titlen;
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 processin
g dropping variables from processing or from the output data set specifying a pa
ssword for a SAS data set.
SAS Training
103
Syntax of Options
Specify a data set option in parentheses after a SAS data set name. To specify s
everal data set options, separate them with spaces. (option-1=value-1<. . . opti
on-n=value-n>) These examples show data set options in SAS statements:
DROP : Excludes variables from processing or from output SAS data sets.
Syntax DROP=variable(s) Syntax Description variable(s) lists one or more variabl
e 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 t
hey are available for processing.
SAS Training 105
Selected SAS Options
Option DROP Example :
Excluding Variables from Input In this example, the variables SALARY and GENDER
are not included in processing and they are not written to either output data se
t:
data plan1 plan2; set payroll(drop=salary gender); if hired< 01jan98 d then outp
ut plan1; else output plan2; run;
You cannot use SALARY or GENDER in any logic in the DATA step because DROP= prev
ents the SET statement from reading them from PAYROLL.
SAS Training
106
Selected SAS Options
KEEP : Specifies variables for processing or for writing to output SAS data sets
Syntax KEEP=variable(s) Syntax Description variable(s) lists one or more variabl
e 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, onl
y 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 s
et, only the variables listed after the option are written to the output data se
t, but all variables are available for processing.
SAS Training 107
Selected SAS Options
Option KEEP Example :
In this example, only IDNUM and SALARY are read from PAYROLL, and they are the o
nly variables in PAYROLL that are available for processing:
data bonus; set payroll(keep=idnum salary); bonus=salary*1.1; run;
SAS Training
108
Selected SAS Options
Renaming a Variable at Time of Output This example uses RENAME= in the DATA stat
ement to show that the variable is renamed at the time it is written to the outp
ut data set. The variable keeps its original name, X, during the DATA step proce
ssing:
data two(rename=(x=keys)); set one; z=x+y; run;
SAS Training
110
Selected SAS Options
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 thro
ugh 10 from the data set STUDY. Data set NEW contains six observations.
data new; set study(firstobs=5 obs=10); run;
SAS Training
112
Selected SAS Options
In this example, the OBS= data set option in the SET statement reads in the firs
t ten observations from data set OLD:
data new; set old(obs=10); run;
Selecting Observations from an Input Data Set This example uses the WHERE= data
set option to subset the SALES data set as it is read into another data set:
data whizmo; set sales(where=(product= whizmo )); run;
Selecting Observations from an Output Data Set This example uses the WHERE= data
set option to subset the SALES output data set:
data whizmo(where=(product= whizmo )); set sales; run;
SAS Training
116
SAS Format
Definition of Format
A format is an instruction that SAS uses to write data values. You use formats t
o control the written appearance of data values, or, in some cases, to group dat
a values together for analysis. For example, the WORDS22. format, which converts
numeric values to their equivalent in words, writes the numeric value 692 as si
x hundred ninety-two
SAS Training
117
Syntax of Format
SAS formats have the following form: <$>format<w>.<d> where $ indicates a charac
ter format; its absence indicates a numeric format. format names the format. w s
pecifies the format width, which for most formats is the number of columns in th
e output data. d specifies an optional decimal scaling factor in the numeric for
mats.
SAS Training 118
Selected SAS Formats
DOLLARw.d: Writes numeric values with dollar signs, commas, and decimal points
Syntax DOLLARw.d Syntax Description w specifies the width of the output field. d
optionally specifies the number of digits to the right of the decimal point in
the numeric value. Details:The DOLLARw.d format writes numeric values with a lea
ding dollar sign, with a comma that separates every three digits, and a period t
hat separates the decimal fraction
SAS Training
123
Selected SAS Formats
Format DOLLARw.d Example : put @3 netpay dollar10.2;
Values 1254.71 Results ----+----1----+ $1,254.71
SAS Training
124
SAS Informat
Definition of Informat
An informat is an instruction that SAS uses to read data values into a variable.
Unless you explicitly define a variable first, SAS uses the informat to determi
ne whether the variable is numeric or character. SAS also uses the informat to d
etermine the length of character variables.
SAS Training
125
Syntax of Informat
Proc Format The FORMAT procedure enables you to define your own informats and fo
rmats for variables.
SAS Training
136
Syntax
Proc Format; value $genders ‘m’=“Male” ‘f’=“Female” Run; Proc Print data=customer.demo; for
ex $gender.; run;
SAS Training 138
Output
Cust_id Name Address Sex 2335 Jimmy Birmingham,UK Male 5889 Chen, Len Birmingham
,UK Female 3878 Davis, Brad Plymouth,UK Male 4553 Maria Miami USA
SAS Training 139
Hands-On Exercise
Display the values of the variable SEX in Class dataset as 1 and 2 , instead of
the default values.
SAS Training
140
Hands-On Exercise
Expected Output
SAS Training
141
Solution
proc format; value $sex M = 1 F = 2 ; run; proc print data = train.class; fo
rmat sex $sex.; run;
SAS Training 142
Proc Sort
The SORT procedure sorts observations in a SAS data set by one or more character
or numeric variables, either replacing the original data set or creating a new,
sorted data set.
SAS Training 143
Syntax
PROC SORT <option(s)> <collating-sequence-option> BY <DESCENDING> variable-1 <..
.<DESCENDING> variable-n>; Options(s) :nodupkey
SAS Training
144
Example
Account
Company Paul s Pizza Apex World Wide Electronics Garner Strickland Industries Mo
rrisville Ice Cream Delight Debt 83.00 119.95 657.22 299.98 Town Apex Apex Apex
Apex
SAS Training
145
proc sort data=account out=bytown; by town company; run; proc print data=bytown;
var company town debt; title Customers with Past-Due Accounts ; SAS Training ti
tle2 Listed Alphabetically
146
Output
Customers with Past-Due Accounts Listed Alphabetically within Town Obs Company T
own Debt
1 2 3 4 Apex World Wide Electronics Garner Strickland Industries Morrisville Ice
Cream Delight Paul s Pizza
SAS Training
Apex Apex Apex Apex
119.95 657.22 299.98 83.00
147
Duplicate observations
proc sort data=account out=towns nodupkey; by town; run;
proc print data=towns; var town company debt ; title Towns of Customers with Pa
st-Due Accounts‘; run;
SAS Training
148
Output
Towns of Customers with Past-Due Accounts
Obs Town Company Debt
1 2 3 4
Apex Garner Holly Springs Morrisville
Paul s Pizza World Wide Electronics Ice Cream Delight Strickland Industries
83.00 119.95 299.98 657.22
SAS Training
149
Hands-On Exercise
SORT DUPOBS dataset to create dataset A. sort the data by descending tourtype an
d vendor and ascending landcost Expected Output
SAS Training
150
Solution
proc sort data = dupobs ; by descending tourtype descending vendor landcost; run
;
SAS Training
151
Proc Append
The APPEND procedure adds the observations from one SAS data set to the end of a
nother SAS data set Remember: • Both data sets contained the same variables. • If Ap
pending data sets with different variables, use the FORCE option
SAS Training
152
Syntax
Z 14 19 82 99
=)
Transposed data _NAME_ COL1 COL2 COL3 COL4 X 12 21 33 14 Y 19 15 27 32 Z 14 19 8
2 99
SAS Training
163
Syntax
Proc Sql; select Lname, Fname, City, State, IdNumber, Salary, Jobcode from staff
, payroll where idnumber=idnum ; Quit;
SAS Training
172
Hands-On Exercise
Create Table for Females from the Class dataset using Proc Sql. Expected Output
SAS Training
173
Solution
proc sql; create table females as select * from class where sex = F ; select *
from females; quit;
SAS Training
174
Proc GPLOT
The GPLOT procedure plots the values of two or more variables on a set of coordi
nate axes (X and Y). The coordinates of each point on the plot correspond to two
variable values in an observation of the input data set.
SAS Training 175
Syntax
PROC GPLOT <DATA=input-data-set> </option(s) >; PLOT plot-request(s) </option(s)
PLOT2 plotrequest(s) option(s)>;
SAS Training
176
Example
proc gplot data = dupobs; goptions reset = all; plot landcost*country; run;
SAS Training
177
Output
SAS Training
178
Example
proc gplot data = dupobs; goptions reset=all; symbol1 color = green value=triang
le ; symbol2 color=blue value=circle; symbol3 color=red value=square; plot landc
ost*country=vendor; run;
SAS Training
179
Output
SAS Training
180
PROC MEANS
The MEANS procedure provides data summarization tools to compute descriptive sta
tistics for variables across all observations and within groups of observations.
SAS Training
181
Syntax
PROC MEANS <option(s)> BY <DESCENDING> variable-1 <... <DESCENDING> variablen><N
OTSORTED>; CLASS variable(s) </ option(s)>; OUTPUT <OUT=SAS-data-set> <output-st
atistic-specification(s)>
SAS Training
182
PROC MEANS (OPTIONS)
Specify the number of MAXDEC= decimal places for the statistics all displayed ou
tput NOPRINT Suppress Order the values of the class variables according to the s
pecified order Limit the output statistics to the observations with the highest
_TYPE_ value
SAS Training
ORDER=
NWAY
183
PROC MEANS (BY)
Produces separate statistics for each BY group.
Example: Input Data set
proc sort data = temp; by cat; run; proc means data = temp; by cat; output out =
temp1; run;
SAS Training 184
PROC MEANS (CLASS)
Specifies the variables whose values define the subgroup combinations for the an
alysis.
SAS Training
185
PROC MEANS (NWAY)
proc means data = prod nway; class cat product; var sales; output out = prodsta
n=n sum=total; run;
SAS Training
186
PROC MEANS (OUTPUT)
Outputs statistics to a new SAS data set Input Data set
proc means data = sales; class prod; output out = temp n = Cost_n sal_n mean=Cos
t_m Sale_m; run;
SAS Training
187
PROC MEANS (CLASS)
proc means data = prod; class cat product; var sales; output out = prodsta n=n s
um=total; run;
SAS Training
188
PROC MEANS (VAR)
Identifies the analysis variables and their order in the output. If you omit the
VAR statement, PROC MEANS analyzes all numeric variables that are not listed in
the other statements. When all variables are character variables, PROC MEANS pr
oduces a simple count of observations.
SAS Training 189
PROC Summary
The SUMMARY procedure provides data summarization tools that compute descriptive
statistics for variables across all observations or within groups of observatio
ns SAS Training
190
Syntax
PROC SUMMARY <option(s)> <statistic-keyword(s)BY <DESCENDING> variable-1<...<DES
CENDING> variable-n> <NOTSORTED>; CLASS variable(s) </ option(s)>; FREQ variable
; OUTPUT <OUT=SAS-data-set><output-statistic-specification(s)> <id-group-specifi
cation(s)> <maximum-id-specification(s)> <minimum-id-specification(s)></ option(
s)> ; VAR variable(s)</ WEIGHT=weight-variable>;
SAS Training
191
Difference Between Proc Means & Proc Summary
Both PROC MEANS and PROC SUMMARY compute descriptive statistics for an entire SA
S data set. The Difference Between them :
. PROC MEANS produces subgroup statistics only when a BY statement is used and t
he input data has been previously sorted (use PROC SORT) by the BY variables PRO
C SUMMARY automatically produces statistics for all subgroups, giving you all th
e information in one run
SAS Training
192
Difference Between Proc Means & Proc Summary
. PROC MEANS produce information in the output window. PROC SUMMARY does not pro
duce any information in your output so you will always need to use the OUTPUT st
atement to create a new data set and use PROC PRINT to see the computed statisti
cs.
SAS Training
193
PROC REPORT
Overview:
The REPORT procedure combines features of the PRINT, MEANS, and TABULATE procedu
res with features of the DATA step in a single report-writing tool that can prod
uce a variety of reports
SAS Training
194
PROC REPORT (TYPES)
SAS Training
195
PROC REPORT (TYPES)
SAS Training
196
SAS Training
197
PROC REPORT (Concept)
The most important thing to figure out is the layout of the report. Once you und
erstand the layout of the report, use the COLUMN and DEFINE statements in PROC R
EPORT to construct the layout.
SAS Training
198
Typical Report Example
Input Data set
proc report data = rep nowd headline headskip; column product sales; define prod
uct / Product Name order; define sales / Sales Occured format=8.2; run;
SAS Training
199
PROC REPORT (Syntax)
PROC REPORT <option(s)>; BY <DESCENDING> variable-1 COLUMN column-specification(
s); COMPUTE LINE specification(s); . . . select SAS language elements . . . ENDC
OMP; DEFINE report-item ; SAS Training REBREAK location </ option(s)>; 200
PROC REPORT (OPTIONS)
Select the windowing or the nonwindowing environment Specify the default number
of characters for columns containing computed variables or numeric data set vari
ables Underline all column headers and the spaces between them Write a blank lin
e beneath all column headers Specify the split character Specify the number of b
lank characters between columns
SAS Training
WINDOWS| NOWINDOWS COLWIDTH=
HEADLINE HEADSKIP SPLIT= SPACING=
201
PROC REPORT (COLUMN)
Describes the arrangement of all columns and of headers that span more than one
column. • column-specification(s) is one or more of the following:
• •
• •
report-item(s)
report-item-1, report-item-2 <. . . , report-itemn> ( header-1
< . . . header-n > report-item(s) ) report-item=name
SAS Training 202
PROC REPORT (COLUMN)
Examples • column sector manager N sales; • column sector sales,min; • column ( Indivi
dual Store Sales as a Percent of All Sales sector manager); • column manager depa
rtment sales sales=salesmin sales=salesmax;
SAS Training 203
PROC REPORT
Decide the usage of a variable in DEFINE statement these usages are • DISPLAY • ORDE
R • ACROSS • GROUP • ANALYSIS
SAS Training
204
PROC REPORT (DEFINE)
• •
•
• • •
DISPLAY – Do not affect the order of variables in a row ORDER – Used to change order
of variables (Ascending/Descending/Formatted) ACROSS - creates a column for eac
h value of an across variable. GROUP – Creates Groups Analysis – To calculate statis
tics Computed – Variables defined for the report not on input data set
SAS Training 205
PROC REPORT (DEFINE OPTIONS)
Assign a SAS or user-defined format to the item Order the values of a group, ord
er, or across variable according to the specified order Define the number of bla
nk characters to leave between the column being defined and the column immediate
ly to its left Define the width of the column in which PROC REPORT displays the
report item Reverse the order in which PROC REPORT displays rows or values of a
group, order, or across variable JUSTIFY Formatted Values
SAS Training
FORMAT= ORDER= SPACING=
WIDTH= DESCENDING CENTER, LEFT, RIGHT
206
PROC REPORT (BREAK)
Produces a default summary at the beginning or end of a report or at the beginni
ng and end of each BY group. Write a RBREAKthe last break line of option(s)>; bl
ank line for location </ a break SKIP
located at the beginning of the report Include a summary line as one of the brea
k lines SUMMARIZE
Start a new page after the last break line of a break located at the beginning o
f the report
SAS Training
PAGE
207
Example
Input Data set
proc report data = rep nowd headline headskip split= * ; column ( This is sales
report product N sales sales,min discount newprice); define product / Product
Name group; define sales / My*Sales format=8.2; define min / Min ; define ne
wprice / Discount Price computed; compute newprice; newprice = _c3_ - _c5_; en
dcomp; break after product / skip; run; SAS Training 208
SAS Date
SAS Date : is a value that represents the number of days between January 1, 1960
, and a specified date. SAS can perform calculations on dates ranging from A.D.
1582 to A.D. 19,900. Dates before January 1, 1960, are negative numbers; dates a
fter are 209 SAS Training
SAS Date
How SAS Converts Calendar Dates to SAS Date Values :
SAS Training
210
SAS Date
Working with SAS Dates :
The SAS System converts date values back and forth between calendar dates with S
AS language elements called formats and informats. Formats present a value, reco
gnized 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, whi
ch may be in a variety of lengths, and then convert the data to a SAS date. SAS
Training 211
SAS Date
Example: Reading, Writing, and Calculating Date Values
data meeting; options nodate pageno=1 linesize=80 pagesize=60; input region $ mt
g : mmddyy8.; sendmail=mtg-45; datalines; N 11-24-99 S 12-28-99 E 12-03-99 W 10-
04-99 ;
SAS Training
212
SAS Date
proc print data=meeting; format mtg sendmail date9.; title When To Send Announc
ements ; run;
SAS Training
213
SAS Date
Date formats DATEw. Format: Writes date values in the form ddmmmyy or ddmmmyyyy.
Syntax : DATEw.
SAS Training
214
SAS Date
Examples
The example table uses the input value of 15415, which is the SAS date value tha
t corresponds to March 16, 2002.
SAS Training
215
SAS Date
DDMMYYw. Format : Writes date
values in the form ddmmyy or ddmmyyyy. Syntax DDMMYYw.
SAS Training
216
SAS Date
Examples : The example table uses the input value of 15415, which is the SAS dat
e value that corresponds to March 16, 2002.
SAS Training
217
SAS Date
Date Informats DATEw. : Reads date values in the form ddmmmyy or ddmmmyyyy. Synt
ax DATEw.
SAS Training
218
SAS Date
Example : input calendar_date date11.;
SAS Training
219
SAS Date
DDMMYYw. Informat :Reads date values in the form ddmmyy or ddmmyyyy. Syntax DDMM
YYw.
SAS Training
220
SAS Date
Example : input calendar_date ddmmyy10.;
SAS Training
221
SAS Date
Functions DATE Function : Returns the current date as a SAS date value Syntax :
DATE() Details : The DATE function produces the current date in the form of a SA
S date value, which is the number of days since January 1, 1960. SAS Training
222
SAS Date
Example : tday=date(); Put tday ddmmyy8.;
SAS Training
223
SAS Date
TODAY function : Returns the current date as a SAS date value. Syntax : TODAY()
Details : TODAY is identical to the DATE function. The TODAY function produces t
he current date in the form of a SAS date value, which is the number of days sin
ce January 1, 1960. SAS Training 224
SAS Date
YEAR function : Returns the year from a SAS date value. Syntax : YEAR(date) Deta
ils : The YEAR function produces a four-digit numeric value that represents the
year.
SAS Training 225
SAS Date
Example :
SAS Training
226
SAS Date
MONTH function : Returns the month from a SAS date value. Syntax : MONTH(date) D
etails : The MONTH function returns a numeric value that represents the month fr
om a SAS date value. Numeric values can range from 1 through 12.
SAS Training 227
SAS Date
Example :
SAS Training
228
SAS Date
DAY Function : Returns the day of the month from a SAS date value. Syntax : DAY(
date) Details : The DAY function produces an integer from 1 to 31 that represent
s the day of the month.
SAS Training 229
SAS Date
Example :
SAS Training
230
SAS Date
QTR function: Returns the quarter of the year from a SAS date value. Syntax : QT
R(date) Details : The QTR function returns a value of 1, 2, 3, or 4 from a SAS d
ate value to indicate the quarter of the year in which a date value falls.
SAS Training 231
SAS Date
Example :
SAS Training
232
SAS Date
WEEKDAY Function : Returns the day of the week from a SAS date value. Syntax : W
EEKDAY(date) Details : The WEEKDAY function produces an integer that represents
the day of the week, where 1=Sunday, 2=Monday, . . . , 7=Saturday. SAS Training
233
SAS Date
Example :
SAS Training
234
SAS Date
MDY Function :Returns a SAS date value from month, day, and year values. Syntax
: MDY(month,day,year)
SAS Training
235
SAS Date
Example :
SAS Training
236
INTRODUCTION TO MACROS
SAS Training
237
What is a Macro Facility?
The macro facility is a tool for extending and customizing the SAS System and fo
r reducing the amount of text you must enter to do common tasks
SAS Training
238
Replacing Text Strings Using Macro Variables
Macro variables are an efficient way of replacing text strings in SAS code The S
implest way to define a macro variable is to use the %LET statement to assign th
e macro variable a name and a value. Eg: %let macname = Test;
SAS Training 239
Replacing Text Strings Using Macro Variables
Resolve a Macro Variable Value using the ‘&’ symbol Eg: %let macname = Test; title “Th
is is a &macname” The macro processor resolves the reference to the macro variable
MACNAME, and the statement becomes Title “This is a Test”
SAS Training 240
Generating SAS Code Using Macros Macros Allow you to execute a SAS code multiple
times without compiling it. A macro definition is placed between a %MACRO state
ment and a %MEND (macro end) statement, as follows: %MACRO macro-name; SAS code
%MEND macro-name; Execute the macro using %macro-name
SAS Training 241
Generating SAS Code Using Macros Eg:
%macro mac1; data temp1; set temp; x= ‘Hello’; run; %mend mac1; %mac1; Execution of
this macro SAS Training the following produces
242
Generating SAS Code Using Macros
Execution of this macro produces the following program: data temp1; set temp; x=
‘Hello’; run;
SAS Training
243
Hands – On Exercise
Create a macro datcrt that creates a data set cake1 from train.cake
SAS Training
244
Solution
%macro datcrt; data cake1; set train.cake; run; %macro datcrt; %datcrt;
SAS Training
245
Passing Information into a Macro Using Parameters
A macro variable defined in parentheses in a %MACRO statement is a macro paramet
er Macro parameters allow you to pass information into a macro
SAS Training
246
Passing Information into a Macro Using Parameters Eg:
%macro mac2 (dest= , src = ); data &src; set &dest; x= ‘Hello’; run;
You invoke the macro by providing values for the parameters, as follows:
%mac2 (dest=temp1, src=temp) ; %mac2 (dest=temp2, src=temp); SAS Training
247
Hands – On Exercise
Create a Macro datprnt that prints the data set cake and dept1 when passed as a
macro parameter
SAS Training 248
Solution
%macro datprnt (dat= ); proc print data = &dat; run; %mend datprnt; %datprnt (da
t=cake); %datprnt (dat=dept1);
SAS Training
249
Conditionally Generating SAS Code Use %IF-%THEN-%ELSE macro statements to condit
ionally 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 = &myda
ta; run; %end; %mend test;
SAS Training 250
Conditionally Generating SAS Code
%test(info=print,mydata = data1); /* Calling the Macro */ Result of the macro ex
ecution: Proc print data = data1; run;
SAS Training
251
Macro Variables
•
•
•
Macro variables are tools that enable you to dynamically modify the text in a SA
S program through symbolic substitution. You can assign large or small amounts o
f text to macro variables, and after that, you can use that text by simply refer
encing the variable that contains it. Macro variables defined by macro programme
rs are called user-defined macro variables. Eg: %let name = Henry Woodbridge is
Male; Those defined by the SAS System are called automatic macro variables Eg: S
ysdate,Sysday, SysProcessID, etc.
SAS Training 252
Methods to create User Defined Macro Variables
%Let iterative %DO statement %GLOBAL statement %INPUT statement INTO clause of t
he SELECT statement in SQL %LOCAL statement %MACRO statement SYMPUT routine %WIN
DOW statement. SAS Training 253
Using Macro Variables
After a macro variable is created, you typically use the variable by referencing
it with an ampersand preceding its name (&variable-name), which is called a mac
ro variable reference. These references perform symbolic substitutions when they
resolve to their value. Eg: %let dsn=Newdata;
title1 "Contents of Data Set &dsn"; data temp; set &dsn; if age>=20; run;
SAS Training 254
Using Macro Variables
if macro variable JERRY is misspelled as JERY, the following produces an unexpec
ted result: %let jerry=student; data temp; x="produced by &jery"; run; This prod
uces the following message: WARNING: Apparent symbolic reference JERY not resolv
ed. Note: Display the macro variable value using %put Eg: %put &jerry;
SAS Training 255
Combining Macro Variable References with Text
When the macro variable is appended after a text, directly reference it with the
text. When a text is appended after a macro variable, use the delimiter ‘.’ between
the macro variable reference and the text DATA=PERSNL&YR.EMPLOYES, where &YR co
ntains two characters for a year
Data = &MONTH&YR
%let name=sales; data new&name; set save.&name; more SAS statements run; The SAS
system sees it as DATA NEWSALES; SET SAVE.SALES; more SAS statements RUN;
SAS Training
256
Combining Macro Variable References with Text
Eg:
DATA=PERSNL&YR.EMPLOYES, where &YR contains two characters for a year Data = &MO
NTH&YR %let name=sales; data new&name; set save.&name; more SAS statements run;
The SAS system sees it as DATA NEWSALES; SET SAVE.SALES; more SAS statements SAS
Training
257
Hands – On Exercise
Create a data set newcake from cake by passing cake as a macro parameter
SAS Training
258
Solution
%macro app(dat=); data new&dat; set cake; run; %mend app; %app(dat=cake);
SAS Training
259
Hands – On Exercise
Create a data set cakenew from cake by passing cake as a macro parameter
SAS Training
260
Solution
%macro app(dat=); data &dat.new; set cake; run; %mend app; %app(dat=cake);
SAS Training
261
Referencing Macro Variables Indirectly
It is also useful to be able to indirectly reference macro variables that belong
to a series so that the name is determined when the macro variable reference re
solves. Eg: %let City1 = Mumbai; %let City2 = Delhi; %let City3 = Chennai For ex
ample, you could use the value of macro variable N to reference a variable in th
e series of macro variables named CITY1 to CITY3. If N has the value 1, the refe
rence would be to CITY1. If the value of N is 3, the reference would be to CITY3
. %put &city&n; /* incorrect */
SAS Training 262
Referencing Macro Variables Indirectly
% put &&city&n; /* correct */ When the macro processor encounters multiple amper
sands, its basic action is to resolve two ampersands to one ampersand. For examp
le, to append the value of &N to CITY and then reference the appropriate variabl
e name Assuming that &N contains 3, when the macro processor receives this state
ment, it performs the following steps: resolves && to & passes CITY as text reso
lves &N into 3 returns to the beginning of the macro variable reference, &CITY3,
starts resolving from the beginning again, and prints 263 the value of CITY3 wh
ich SAS Training is Chennai.
Debugging a Macro Program
Use the following Options to Debug a Macro code: 1) MLOGIC : Controls whether ma
cro execution is traced for debugging Each line generated by the MLOGIC option i
s identified with the prefix MLOGIC(macro-name) 2) MPRINT : Controls whether SAS
statements generated by macro execution are traced for debugging The MPRINT opt
ion 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(macron
ame): 3) SYMBOLGEN : Controls whether the results of resolving macro variable re
ferences are displayed for debugging SYMBOLGEN displays the results in this form
: SAS Training 264
Debugging a Macro Program
options mlogic mprint symbolgen; %macro test(x=); %if &x = 1 %then %do; %put "Va
lue of x is 1"; proc print data = train.names; run; %end; %else %do; %put "Value
of x is not 1"; %end; %mend test; %test(x=1);
SAS Training 265
Debugging a Macro Program
MLOGIC(TEST): Beginning execution. MLOGIC(TEST): Parameter X has value 1 SYMBOLG
EN: Macro variable X resolves to 1 MLOGIC(TEST): %IF condition &x = 1 is TRUE ML
OGIC(TEST): %PUT "Value of x is 1" "Value of x is 1" MPRINT(TEST): proc print da
ta = train.names; MPRINT(TEST): run; NOTE: There were 4 observations read from t
he data set TRAIN.NAMES. NOTE: PROCEDURE PRINT used: real time 0.01 seconds cpu
time 0.00 seconds MLOGIC(TEST): Ending execution.
SAS Training 266
Manipulating Macro Variable Values with Macro Functions
When you define macro variables, you can include macro functions in the expressi
ons to manipulate the value of the variable before the value is stored Eg: To sc
an for words in macro variable values, use the %SCAN function. For example, %let
address=123 maple avenue; %let frstword=%scan(&address,1); Result: address reso
lves to 123 maple avenue frstword resolves to 123
SAS Training
267
Scope of Macro Variables
•
Every macro variable has a scope. A macro variable s scope determines how it is
assigned values and how the macro processor resolves references to it. Two types
of scope exist for macro variables: global and local Global macro variables exi
st for the duration of the SAS session and can be referenced anywhere in the pro
gram--either inside or outside a macro Local macro variables exist only during t
he execution of the macro in which the variables are created and have no meaning
outside the defining macro.
SAS Training 268
•
•
•
Scope of Macro Variables
Eg:
%macro A; %let Loc1 = xyz; %macro B; %let Loc2 = abc; %mend B; %mend A; LOC1 is
local to both A and B. However, LOC2 is local only to B. Macro variables are sto
red 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 vari
ables are stored in a local symbol table that SAS Training 269 is created at the
beginning of the execution of a macro.
Global Macro Variables
%let county=Clark; %macro concat; data _null_; length longname $20; longname="&c
ounty"||" County"; put longname; run; %mend concat; %concat
Calling the macro CONCAT produces the following statements: data _null_; length
longname $20; longname="Clark"||" County"; put longname; run; The PUT statement
writes the following to the SAS log: Clark County SAS Training
270
Global Macro Variables Global Macro Variables
The new macro variable definition simply updates the existing global one.
SAS Training 271
Local Macro Variables
•
•
•
Local macro variables are defined within an individual macro Each macro you invo
ke creates its own local symbol table. Local macro variables exist only as long
as a particular macro executes; when the macro stops executing, all local macro
variables for that macro cease to exist.
SAS Training
272
Local Macro Variables
Eg: %macro holinfo(day,date); %let holiday=Christmas; %put *** Inside macro: ***
; %put *** &holiday occurs on &day, &date, 1997. ***; %mend holinfo; %holinfo(Th
ursday,12/25) %put *** Outside macro: ***; %put *** &holiday occurs on &day, &da
te, 1997. ***; SAS Training 273
Local Macro Variables
The %PUT statements write the following to the SAS log: *** Inside macro: *** **
* Christmas occurs on Thursday, 12/25, 1997. *** *** Outside macro: *** WARNING:
Apparent symbolic reference HOLIDAY not resolved. WARNING: Apparent symbolic re
ference DAY not resolved. WARNING: Apparent symbolic reference DATE not resolved
. *** &holiday occurs on &day, &date, 1997. *** As you can see from the log, the
local macro variables DAY, DATE, and HOLIDAY resolve inside the macro, 274 but
SAS Training outside the macro they do not exist and therefore do
Local Macro Variables Local Macro Variables
SAS Training
275
Data Step Interfaces
DATA step interfaces consist of tools that enable a program to interact with the
macro facility during DATA step execution. 1) CALL SYMPUT : Assigns DATA step i
nformation to a macro variable 2) SYMGET : Returns the value of a macro variable
during DATA step execution
SAS Training
276
CALL SYMPUT
Syntax: CALL SYMPUT(macro-variable,value); Eg:
1)call symput( new , testing ); Assigns the character string testing to macro va
riable NEW 2) data team1; input position : $8. player : $12.; call symput(positi
on,player); cards; shortstp Ann pitcher Tom frstbase Bill ; This DATA step creat
es the three macro variables SHORTSTP, PITCHER, and FRSTBASE and respectively as
sign them the values ANN, TOM, and SAS Training 277 BILL.
CALL SYMPUT
3)
data team2; input position $12. player $12.; call symput( POS ||left(_n_), posit
ion); cards; shortstp Ann pitcher Tom frstbase Bill
; This form is useful for creating a series of macro variables. For example, the
CALL SYMPUT statement builds a series of macro variable names by combining the
character string POS and the left-aligned value of _N_ and assigns values to SAS
Training variables POS1, POS2, the macro 278
Hands – On Exercise
Create macro varialbes ssn1, ssn2,….sssn from ssn variable in dept1 dataset using
CALL SYMPUT
SAS Training 279
Solution
Data _null_; set dept1; call symput (‘ssn’||left(_n_),ssn); run;
SAS Training
280
SYMGET
Syntax SYMGET(argument) Eg: 1) x=symget( g ); Assign the value of the macro vari
able G to the DATA step variable X. 2) length key $ 8; input code $; key=symget(
code); Assigns the value stored in the DATA step variable CODE, which contains a
macro variable name, to the DATA step variable KEY 3) score=symget( s ||left(_n
_)); Assigns the letter s and the number of the current SAS Training
281
Macro Functions and Expressions
The macro functions and expressions are similar to data step functions except th
at they are used with macro variables only and are preceded by % symbol Eg: %upc
ase(&macvar); %substr(&macvar,3,2); %EVAL(&num1 + &num2); %If &x = 1 %then %do;
%end; %do i=1 %to 5; data dat&i %end;;
SAS Training
282
Macro Quoting
Macro quoting functions tell the macro processor to interpret special characters
and mnemonics as text rather than as part of the macro language. If you did not
use a macro quoting function to mask the special characters, the macro processo
r or the rest of the SAS System might give the character a meaning you did not i
ntend.
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 un
balanced single quotation mark or just part of the name? Is Boys&Girls a referen
ce to the macro variable &GIRLS or a group of children?
SAS Training 283
Macro Quoting
The following macro quoting functions are most commonly used: • %STR and %NRSTR • %B
QUOTE and %NRBQUOTE • %SUPERQ Eg: %let print=proc print; run;; /* ERROR */ To avoi
d the ambiguity and correctly assign the value of PRINT, you must mask the semic
olons with the macro quoting function %STR, as follows: %let print=%str(proc pri
nt; run;);
SAS Training 284