21968912
21968912
com
https://ebooknice.com/product/sas-certification-prep-guide-
base-programming-for-sas-9-10984456
OR CLICK HERE
DOWLOAD EBOOK
(Ebook) SAS Certification Prep Guide: Base Programming for SAS 9 by SAS Institute
ISBN 9781635263732, 1635263735
https://ebooknice.com/product/sas-certification-prep-guide-base-programming-for-
sas-9-6823614
ebooknice.com
(Ebook) SAS Certification Prep Guide: Base Programming for SAS 9, Third Edition by
SAS ISBN 9781607649243, 1607649241
https://ebooknice.com/product/sas-certification-prep-guide-base-programming-for-
sas-9-third-edition-4419544
ebooknice.com
(Ebook) SAS Certification Prep Guide Advanced Programming for SAS ® 9, Fourth
Edition by SAS Institute ISBN 9781629593548, 1629593540
https://ebooknice.com/product/sas-certification-prep-guide-advanced-programming-
for-sas-9-fourth-edition-5043522
ebooknice.com
(Ebook) SAS Certification Prep Guide: Advanced Programming for SAS 9 by Institute,
SAS(Creator) ISBN 9781629593548, 9781629593579, 9781629593586, 9781629593593,
1629593540, 1629593575, 1629593583, 1629593591
https://ebooknice.com/product/sas-certification-prep-guide-advanced-programming-
for-sas-9-22123270
ebooknice.com
(Ebook) SAS® Certified Specialist Prep Guide: Base Programming Using SAS® 9.4 by SAS
ISBN 9781642951790, 164295179X
https://ebooknice.com/product/sas-certified-specialist-prep-guide-base-
programming-using-sas-9-4-10553550
ebooknice.com
(Ebook) Base SAS 9.2 Procedures Guide by SAS Publishing ISBN 9781599947143,
1599947145
https://ebooknice.com/product/base-sas-9-2-procedures-guide-1790080
ebooknice.com
(Ebook) Step-by-Step Programming with Base SAS 9.4, Second Edition by SAS Institute
ISBN 9781629598949, 1629598941
https://ebooknice.com/product/step-by-step-programming-with-base-sas-9-4-second-
edition-11317772
ebooknice.com
(Ebook) Base SAS 9.1 Procedures Guide, Volumes 1, 2, 3 and 4 by SAS Institute ISBN
9781590472040, 1590472047
https://ebooknice.com/product/base-sas-9-1-procedures-guide-
volumes-1-2-3-and-4-2141800
ebooknice.com
(Ebook) SAS 9.2 Output Delivery System User's Guide by SAS Publishing ISBN
9781599945910
https://ebooknice.com/product/sas-9-2-output-delivery-system-user-s-
guide-2200442
ebooknice.com
SAS Certification Prep
®
SAS® Documentation
August 23, 2018
The correct bibliographic citation for this manual is as follows: SAS Institute Inc. 2018. SAS® Certification Prep Guide: Base Programming for
SAS®9, Fifth Edition. Cary, NC: SAS Institute Inc.
SAS® Certification Prep Guide: Base Programming for SAS®9, Fifth Edition
Copyright © 2018, SAS Institute Inc., Cary, NC, USA
ISBN 978-1-63526-994-9 (Hard copy)
ISBN 978-1-63526-991-8 (Epub)
ISBN 978-1-63526-992-5 (Mobi)
ISBN 978-1-63526-993-2 (PDF)
All Rights Reserved. Produced in the United States of America.
For a hard copy book: No part of this publication may be reproduced, stored in a retrieval system, or transmitted, in any form or by any means,
electronic, mechanical, photocopying, or otherwise, without the prior written permission of the publisher, SAS Institute Inc.
For a web download or e-book: Your use of this publication shall be governed by the terms established by the vendor at the time you acquire this
publication.
The scanning, uploading, and distribution of this book via the Internet or any other means without the permission of the publisher is illegal and
punishable by law. Please purchase only authorized electronic editions and do not participate in or encourage electronic piracy of copyrighted
materials. Your support of others' rights is appreciated.
U.S. Government License Rights; Restricted Rights: The Software and its documentation is commercial computer software developed at private
expense and is provided with RESTRICTED RIGHTS to the United States Government. Use, duplication, or disclosure of the Software by the
United States Government is subject to the license terms of this Agreement pursuant to, as applicable, FAR 12.212, DFAR 227.7202-1(a), DFAR
227.7202-3(a), and DFAR 227.7202-4, and, to the extent required under U.S. federal law, the minimum restricted rights as set out in FAR
52.227-19 (DEC 2007). If FAR 52.227-19 is applicable, this provision serves as notice under clause (c) thereof and no other notice is required to be
affixed to the Software or documentation. The Government’s rights in Software and documentation shall be only those set forth in this Agreement.
SAS Institute Inc., SAS Campus Drive, Cary, NC 27513-2414
September 2018
SAS® and all other SAS Institute Inc. product or service names are registered trademarks or trademarks of SAS Institute Inc. in the USA and other
countries. ® indicates USA registration.
Other brand and product names are trademarks of their respective companies.
P1:certpgbp
Contents
How to Prepare for the SAS Base Programming for SAS®9 Exam . . . . . . . . . . . . . . . . vii
Accessibility Features of the SAS Certification Prep Guide . . . . . . . . . . . . . . . . . . . . . . xi
Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363
vi Contents
vii
Requirements
To complete examples in this book, you must have access to SAS windowing
environment, SAS Enterprise Guide, or SAS Studio.
On the Web
Bookstore www.sas.com/books
Certification www.sas.com/certify
Communities communities.sas.com
SAS Global Academic Program www.sas.com and click Learn. Then select
For Students and Educators.
Training www.sas.com/training
Syntax Conventions
• DROP= and KEEP= are separated by a vertical bar ( | ) to indicate that they are
mutually exclusive.
The example syntax that is shown in this book includes only what you need to know in
order to prepare for the certification exam. For complete syntax, see the appropriate SAS
reference guide.
x How to Prepare for the SAS Base Programming for SAS®9 Exam
xi
Overview
The SAS Certification Prep Guide: Base Programming for SAS®9 is a test preparation
document that uses the following environments and products:
• SAS windowing environment
• SAS Enterprise Guide
• SAS Studio or SAS University Edition
Documentation Format
Contact [email protected] if you need this document in an alternative digital
format.
xii Accessibility Features of the SAS Certification Prep Guide
1
Chapter 1
Requirements
To complete examples in this book, you must have access to SAS Studio, SAS
Enterprise Guide, or the SAS windowing environment.
Instructions
1. Navigate to support.sas.com/content/dam/SAS/support/en/books/data/base-guide-
practice-data.zip, download and save the practice data ZIP file.
2. Unzip the file and save it to a location that is accessible to SAS.
3. Open the cre8data.sas program in the SAS environment of your choice.
• SAS Studio: In the Navigation pane, expand Files and Folders and then navigate
to the Cert folder within the practice-data folder.
• SAS Enterprise Guide: In the Servers list, expand Servers ð Local ð Files, and
then navigate to the Cert folder in the practice-data folder.
• SAS windowing environment: Click File ð Open Program, and then navigate
to the Cert folder in the practice-data folder.
4. In the Path macro variable, replace /folders/myfolders with the path to the
Cert folder and run the program.
%let path=/folders/myfolders/cert;
2 Chapter 1 • Setting Up Practice Data
Important: The location that you specify for the Path macro variable and the
location of your downloaded SAS programs should be the same location.
Otherwise, the cre8data.sas program cannot create the practice data.
Your practice data is now created and ready for you to use.
TIP When you end your SAS session, the Path macro variable in the
cre8data.sas program is reset. To avoid having to rerun cre8data.sas every
time, run the libname.sas program from the Cert folder to restore the libraries.
3
Chapter 2
Basic Concepts
Getting Started . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
The Basics of the SAS Language . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
SAS Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
Global Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
DATA Step . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
PROC Step . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
SAS Program Structure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Processing SAS Programs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
Log Messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Results of Processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
SAS Libraries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Definition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Predefined SAS Libraries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
Defining Libraries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
How SAS Files Are Stored . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
Storing Files Temporarily or Permanently . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Referencing SAS Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Referencing Permanent SAS Data Sets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Referencing Temporary SAS Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
Rules for SAS Names . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
VALIDVARNAME=System Option . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
VALIDMEMNAME=System Option . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
When to Use VALIDMEMNAME=System Option . . . . . . . . . . . . . . . . . . . . . . . . . 16
SAS Data Sets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Overview of Data Sets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Descriptor Portion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
SAS Variable Attributes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
Data Portion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
SAS Indexes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
Extended Attributes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
Chapter Quiz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
4 Chapter 2 • Basic Concepts
Getting Started
In the SAS Base Programming for SAS®9 exam, you are not tested on the details of
running SAS software in the various environments. However, you might find such
information useful when working with the practice data.
You can access a brief overview of the windows and menus in the SAS windowing
environment, SAS Enterprise Guide, and SAS Studio at http://video.sas.com/. From
Categories select How To Tutorials ð Programming. Select the video for your SAS
environment. Other tutorials are available from the SAS website.
SAS Statements
A SAS statement is a type of SAS language element that is used to perform a particular
operation in a SAS program or to provide information to a SAS program. SAS
statements are free-format. This means that they can begin and end anywhere on a line,
that one statement can continue over several lines, and that several statements can be on
the same line. Blank or special characters separate words in a SAS statement.
TIP You can specify SAS statements in uppercase or lowercase. In most situations,
text that is enclosed in quotation marks is case sensitive.
Here are two important rules for writing SAS programs:
• A SAS statement ends with a semicolon.
• A statement usually begins with a SAS keyword.
There are two types of SAS statements:
• statements that are used in DATA and PROC steps
• statements that are global in scope and can be used anywhere in a SAS program
Global Statements
Global statements are used anywhere in a SAS program and stay in effect until changed
or canceled, or until the SAS session ends. Here are some common global statements:
TITLE, LIBNAME, OPTIONS, and FOOTNOTE.
DATA Step
The DATA step creates or modifies data. The input for a DATA step can be of several
types, such as raw data or a SAS data set. The output from a DATA step can be of
several types, such as a SAS data set or a report. A SAS data set is a data file that is
formatted in a way that SAS can understand.
For example, you can use DATA steps to do the following:
• put your data into a SAS data set
The Basics of the SAS Language 5
• compute values
• check for and correct errors in your data
• produce new SAS data sets by subsetting, supersetting, merging, and updating
existing data sets
PROC Step
The PROC step analyzes data, produces output, or manages SAS files. The input for a
PROC (procedure) step is usually a SAS data set. The output from a PROC step can be
of several types, such as a report or an updated SAS data set.
For example, you can use PROC steps to do the following:
• create a report that lists the data
• analyze data
• create a summary report
• produce plots and charts
1 The TITLE statement is a global statement. Global statements are typically outside
steps and do not require a RUN statement.
2 The DATA step creates a new SAS data set named Work.JuneFee. The SET
statement reads in the data from Cert.AdmitJune. The new data set contains only
those observations whose value for Age is greater than 39.
3 If a RUN or QUIT statement is not used at the end of a step, SAS assumes that the
beginning of a new step implies the end of the previous step. If a RUN or QUIT
statement is not used at the end of the last step in a program, SAS Studio and SAS
Enterprise Guide automatically submit a RUN and QUIT statement after the
submitted code.
4 The PROC PRINT step prints a listing of the new SAS data set. A PROC step begins
with a PROC statement, which begins with the keyword PROC.
6 Chapter 2 • Basic Concepts
When a SAS program is submitted for execution, SAS first validates the syntax and then
compiles the statements. DATA and PROC statements signal the beginning of a new
step. The beginning of a new step also implies the end of the previous step. At a step
boundary, SAS executes any statement that has not been previously executed and ends
the step.
Example Code 2 Processing SAS Programs
data work.admit2; /* #1 */
set cert.admit;
where age>39;
proc print data=work.admit2; /* #2 */
run; /* #3 */
1 The DATA step creates a new SAS data set named Work.Admit2 by reading
Cert.Admit. The DATA statement is the beginning of the new step. The SET
statement is used to read data. The WHERE statement conditionally reads only the
observations where the value of the variable Age is greater than 39.
The Basics of the SAS Language 7
2 The PROC PRINT step prints the new SAS data set named Work.Admit2. The
PROC PRINT statement serves as a step boundary in this example because a RUN
statement was not used at the end of the DATA step. The PROC step also implies the
end of the DATA step.
3 The RUN statement ends the PROC step.
TIP The RUN statement is not required between steps in a SAS program. However, it
is a best practice to use a RUN statement because it can make the SAS program
easier to read and the SAS log easier to understand when debugging.
Log Messages
The SAS log collects messages about the processing of SAS programs and about any
errors that occur. Each time a step is executed, SAS generates a log of the processing
activities and the results of the processing.
When SAS processes the sample program, it produces the log messages shown below.
Notice that you get separate sets of messages for each step in the program.
5 data work.admit2;
6 set cert.admit;
7 where age>39;
8 run;
NOTE: There were 10 observations read from the data set CERT.ADMIT.
WHERE age>39;
NOTE: The data set WORK.ADMIT2 has 10 observations and 9 variables.
NOTE: DATA statement used (Total process time):
real time 0.00 seconds
cpu time 0.00 seconds
NOTE: There were 10 observations read from the data set WORK.ADMIT2.
NOTE: PROCEDURE PRINT used (Total process time):
real time 0.35 seconds
cpu time 0.24 seconds
Results of Processing
When the program is processed, it creates a new SAS data set, Work.Admit2, containing
only those observations with age values greater than 39. The DATA step creates a new
8 Chapter 2 • Basic Concepts
data set and produces messages in the SAS log, but it does not create a report or other
output.
Other Procedures
SAS programs often invoke procedures that create output in the form of a report, as is
the case with the FREQ procedure:
proc freq data=sashelp.cars;
table origin*DriveTrain;
run;
SAS Libraries 9
Other SAS programs perform tasks such as sorting and managing data, which have no
visible results except for messages in the log. (All SAS programs produce log messages,
but some SAS programs produce only log messages.)
proc copy in=cert out=work;
select admit;
run;
SAS Libraries
Definition
A SAS library contains one or more files that are defined, recognized, and accessible by
SAS, and that are referenced and stored as a unit. One special type of file is called a
catalog. In SAS libraries, catalogs function much like subfolders for grouping other
members.
10 Chapter 2 • Basic Concepts
Defining Libraries
To define a library, you assign a library name to it and specify the location of the files,
such as a directory path.
You can also specify an engine, which is a set of internal instructions that SAS uses for
writing to and reading from files in a library.
You can define SAS libraries using programming statements. For information about how
to write LIBNAME statements to define SAS libraries, see Assigning Librefs on page
25.
TIP Depending on your operating environment and the SAS/ACCESS products that
you license, you can create libraries with various engines. Each engine enables you
to read a different file format, including file formats from other software vendors.
When you delete a SAS library, the pointer to the library is deleted, and SAS no longer
has access to the library. However, the contents of the library still exist in your operating
environment.
Temporary SAS libraries last only for the If you do not specify a library name when you
current SAS session. create a file, the file is stored in the temporary
SAS library, Work. If you specify the library
name Work, then the file is stored in the
temporary SAS library. When you end the
session, the temporary library and all of its
files are deleted.
Permanent SAS libraries are available to you To store files permanently in a SAS library,
during subsequent SAS sessions. specify a library name other than the default
library name Work.
In the example, when you specify the library
name Cert when you create a file, you are
specifying that the file is to be stored in a
permanent SAS library.
Alternatively, you can use a one-level name (the data set name only) to reference a file in
a temporary SAS library. When you specify a one-level name, the default libref Work is
assumed. For example, the one-level name Test references the SAS data set named Test
that is stored in the temporary SAS library Work.
By default, the following rules apply to the names of SAS data sets, variables, and
libraries:
• They must begin with a letter (A-Z, either uppercase or lowercase) or an underscore
(_).
Referencing SAS Files 13
VALIDVARNAME=System Option
SAS has various rules for variable names. You set these rules using the
VALIDVARNAME= system option. VALIDVARNAME specifies the rules for valid
SAS variable names that can be created and processed during a SAS session.
14 Chapter 2 • Basic Concepts
Syntax, VALIDVARNAME=
VALIDVARNAME= V7|UPCASE|ANY
V7 specifies that variable names must follow these rules:
• SAS variable names can be up to 32 characters long.
• The first character must begin with a letter of the Latin alphabet (A - Z, either uppercase or
lowercase) or an underscore (_). Subsequent characters can be letters of the Latin alphabet,
numerals, or underscores.
• Trailing blanks are ignored. The variable name alignment is left-justified.
• A variable name cannot contain blanks or special characters except for an underscore.
• A variable name can contain mixed-case letters. SAS stores and writes the variable name in
the same case that is used in the first reference to the variable. However, when SAS
processes a variable name, SAS internally converts it to uppercase. Therefore, you cannot
use the same variable name with a different combination of uppercase and lowercase letters
to represent different variables. For example, cat, Cat, and CAT all represent the same
variable.
• Do not assign variables the names of special SAS automatic variables (such as _N_ and
_ERROR_) or variable list names (such as _NUMERIC_, _CHARACTER_, and _ALL_) to
variables.
UPCASE specifies that the variable name follows the same rules as V7, except that the variable
name is uppercase, as in earlier versions of SAS.
ANY specifies that SAS variable names must follow these rules:
• The name can begin with or contain any characters, including blanks, national characters,
special characters, and multi-byte characters.
• The name can be up to 32 bytes long.
• The name cannot contain any null bytes.
• Leading blanks are preserved, but trailing blanks are ignored.
• The name must contain at least one character. A name with all blanks is not permitted.
• A variable name can contain mixed-case letters. SAS stores and writes the variable name in
the same case that is used in the first reference to the variable. However, when SAS
processes a variable name, SAS internally converts it to uppercase. Therefore, you cannot
use the same variable name with a different combination of uppercase and lowercase letters
to represent different variables. For example, cat, Cat, and CAT all represent the same
variable.
Note: If you use characters other than the ones that are valid when
VALIDVARNAME=V7, then you must express the variable name as a name literal
and set VALIDVARNAME=ANY. If the name includes either a percent sign (%) or
an ampersand (&), then use single quotation marks in the name literal to avoid
interaction with the SAS macro facility.
CAUTION:
Throughout SAS, using the name literal syntax with SAS member names that
exceed the 32-byte limit or have excessive embedded quotation marks might
cause unexpected results. The VALIDVARNAME=ANY system option enables
compatibility with other DBMS variable (column) naming conventions, such as
allowing embedded blanks and national characters.
Referencing SAS Files 15
VALIDMEMNAME=System Option
You can use the VALIDMEMNAME= system option to specify rules for naming SAS
data sets.
Syntax, VALIDMEMNAME=
VALIDMEMNAME= COMPATIBLE | EXTEND
Important: COMPATIBLE is the default system option for VALIDMEMNAME=.
COMPATIBLE specifies that a SAS data set name must follow these rules:
• The length of the names can be up to 32 characters long.
• Names must begin with a letter of the Latin alphabet (A- Z, a - z) or an underscore.
Subsequent characters can be letters of the Latin alphabet, numerals, or underscores.
• Names cannot contain blanks or special characters except for an underscore
• Names can contain mixed-case letters. SAS internally converts the member name to
uppercase. Therefore, you cannot use the same member name with a different combination
of uppercase and lowercase letters to represent different variables. For example,
customer, Customer, and CUSTOMER all represent the same member name. How the
name is saved on disk is determined by the operating environment.
EXTEND specifies that the data set name must follow these rules:
• Names can include national characters.
• The name can include special characters, except for the / \ * ? " < > |: - characters.
• The name must contain at least one character.
• The length of the name can be up to 32 bytes.
• Null bytes are not allowed.
• Names cannot begin with a blank or a ‘.’ ( period).
• Leading and trailing blanks are deleted when the member is created.
• Names can contain mixed-case letters. SAS internally converts the member name to
uppercase. Therefore, you cannot use the same member name with a different combination
of uppercase and lowercase letters to represent different variables. For example,
customer, Customer, and CUSTOMER all represent the same member name. How the
name appears is determined by the operating environment.
Descriptor Portion
The descriptor portion of a SAS data set contains information about the data set,
including the following:
• the name of the data set
• the date and time that the data set was created
• the number of observations
• the number of variables
SAS Data Sets 17
The table below lists part of the descriptor portion of the data set Cert.Insure, which
contains insurance information for patients who are admitted to a wellness clinic.
Engine: V9
Observations: 21
Variables: 7
Indexes: 0
Observation Length: 64
Our website is not just a platform for buying books, but a bridge
connecting readers to the timeless values of culture and wisdom. With
an elegant, user-friendly interface and an intelligent search system,
we are committed to providing a quick and convenient shopping
experience. Additionally, our special promotions and home delivery
services ensure that you save time and fully enjoy the joy of reading.
ebooknice.com