100% found this document useful (4 votes)
16 views

Step by Step Programming with Base SAS 9 4 Second Edition Sas Institute instant download

The document is a promotional and informational piece about the book 'Step-by-Step Programming with Base SAS 9.4, Second Edition' published by SAS Institute. It includes links to download the book and other related SAS programming resources. Additionally, it provides bibliographic details, copyright information, and an overview of the book's contents.

Uploaded by

bramebovate9
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
100% found this document useful (4 votes)
16 views

Step by Step Programming with Base SAS 9 4 Second Edition Sas Institute instant download

The document is a promotional and informational piece about the book 'Step-by-Step Programming with Base SAS 9.4, Second Edition' published by SAS Institute. It includes links to download the book and other related SAS programming resources. Additionally, it provides bibliographic details, copyright information, and an overview of the book's contents.

Uploaded by

bramebovate9
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 69

Step by Step Programming with Base SAS 9 4

Second Edition Sas Institute download

https://textbookfull.com/product/step-by-step-programming-with-
base-sas-9-4-second-edition-sas-institute/

Download more ebook from https://textbookfull.com


We believe these products will be a great fit for you. Click
the link to download now, or visit textbookfull.com
to discover even more!

SAS Certification Prep Guide Base Programming for SAS 9


4th Edition Sas Institute

https://textbookfull.com/product/sas-certification-prep-guide-
base-programming-for-sas-9-4th-edition-sas-institute/

SAS Certified Specialist Prep Guide Base Programming


Using SAS 9 4 Sas

https://textbookfull.com/product/sas-certified-specialist-prep-
guide-base-programming-using-sas-9-4-sas/

SAS certification prep guide base programming for SAS 9


Fifth Edition. Edition Sas Sas Sas

https://textbookfull.com/product/sas-certification-prep-guide-
base-programming-for-sas-9-fifth-edition-edition-sas-sas-sas/

Python Programming A Step By Step Guide From Beginner


To Advance Second Edition Eddison

https://textbookfull.com/product/python-programming-a-step-by-
step-guide-from-beginner-to-advance-second-edition-eddison/
Learn to Program with Python 3: A Step-by-Step Guide to
Programming Irv Kalb

https://textbookfull.com/product/learn-to-program-with-
python-3-a-step-by-step-guide-to-programming-irv-kalb/

Learn to Program with Python 3: A Step-by-Step Guide to


Programming, 2nd Edition Irv Kalb

https://textbookfull.com/product/learn-to-program-with-
python-3-a-step-by-step-guide-to-programming-2nd-edition-irv-
kalb/

ANSI C Programming Learn ANSI C Step by Step 1st


Edition Yashavant Kanetkar

https://textbookfull.com/product/ansi-c-programming-learn-ansi-c-
step-by-step-1st-edition-yashavant-kanetkar/

Serial Attached SCSI 4 SAS 4 r10b 6777

https://textbookfull.com/product/serial-attached-
scsi-4-sas-4-r10b-6777/

Visual Basic For Kids A Step by Step Computer


Programming Tutorial Philip Conrod

https://textbookfull.com/product/visual-basic-for-kids-a-step-by-
step-computer-programming-tutorial-philip-conrod/
Step-by-Step Programming with
Base SAS 9.4 ®

Second Edition

SAS Documentation
®
The correct bibliographic citation for this manual is as follows: SAS Institute Inc. 2016. Step-by-Step Programming
with Base SAS® 9.4, Second Edition. Cary, NC: SAS Institute Inc.
Step-by-Step Programming with Base SAS® 9.4, Second Edition
Copyright © 2016, SAS Institute Inc., Cary, NC, USA
ISBN 978-1-62959-894-9 (Hard copy)
ISBN 978-1-62960-806-8 (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
November 2016
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.
SAS software may be provided with certain third-party software, including but not limited to open-source software,
which is licensed under its applicable third-party software license agreement. For license information about third-
party software distributed with SAS software, refer to http://support.sas.com/thirdpartylicenses.
9.4-P2:basess
Contents

About This Book . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiii


What’s New in Step-by-Step Programming with Base SAS 9.4 . . . . . . . . . . . . . . . . . . . xix
Accessibility Features of Step-by-Step Programming with Base SAS 9.4 . . . . . . . . . . . xxi

PART 1 Introduction to the SAS System 1

Chapter 1 • What is the SAS System? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3


Introduction to the SAS System . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Components of Base SAS Software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
Output Produced by the SAS System . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Ways to Run SAS Programs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Running Programs in the SAS Windowing Environment . . . . . . . . . . . . . . . . . . . . . . . 13
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Learning More . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

Chapter 2 • Working with Output Defaults . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17


Working with Output Defaults Starting in SAS 9.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
Learning More . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

PART 2 Getting Your Data into Shape 25

Chapter 3 • Introduction to DATA Step Processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27


Introduction to DATA Step Processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
The SAS Data Set: Your Key to the SAS System . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
How the DATA Step Works: A Basic Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
Supplying Information to Create a SAS Data Set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
Learning More . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48

Chapter 4 • Starting with Raw Data: The Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51


Introduction to Raw Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
Examine the Structure of the Raw Data: Factors to Consider . . . . . . . . . . . . . . . . . . . . 52
Reading Unaligned Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
Reading Data That Is Aligned in Columns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
Reading Data That Requires Special Instructions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
Reading Unaligned Data with More Flexibility . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
Mixing Styles of Input . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
Learning More . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69

Chapter 5 • Starting with Raw Data: Beyond the Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71


Introduction to Beyond the Basics with Raw Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
Testing a Condition Before Creating an Observation . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
Creating Multiple Observations from a Single Record . . . . . . . . . . . . . . . . . . . . . . . . . 73
Reading Multiple Records to Create a Single Observation . . . . . . . . . . . . . . . . . . . . . . 77
iv Contents

Problem Solving: When an Input Record Unexpectedly Does Not


Have Enough Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
Learning More . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89

Chapter 6 • Starting with SAS Data Sets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91


Introduction to Starting with SAS Data Sets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
Understanding the Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
Input SAS Data Set for Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
Reading Selected Observations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
Reading Selected Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
Creating More Than One Data Set in a Single DATA Step . . . . . . . . . . . . . . . . . . . . . . 99
Using the DROP= and KEEP= Data Set Options for Efficiency . . . . . . . . . . . . . . . . . 101
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
Learning More . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103

PART 3 Basic Programming 105

Chapter 7 • Understanding DATA Step Processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107


Overview of DATA Step Processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
Input SAS Data Set for Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
Adding Information to a SAS Data Set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
Defining Enough Storage Space for Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
Conditionally Deleting an Observation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
Learning More . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116

Chapter 8 • Working with Numeric Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117


Introduction to Working with Numeric Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
About Numeric Variables in SAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
Input SAS Data Set for Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
Calculating with Numeric Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
Comparing Numeric Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
Storing Numeric Variables Efficiently . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
Learning More . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128

Chapter 9 • Working with Character Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129


Introduction to Working with Character Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
Input SAS Data Set for Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
Identifying Character Variables and Expressing Character Values . . . . . . . . . . . . . . . 131
Setting the Length of Character Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
Handling Missing Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
Creating New Character Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
Saving Storage Space by Treating Numbers as Characters . . . . . . . . . . . . . . . . . . . . . 142
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
Learning More . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144

Chapter 10 • Acting on Selected Observations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147


Introduction to Acting on Selected Observations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
Input SAS Data Set for Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
Selecting Observations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
Constructing Conditions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
Comparing Characters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
Contents v

Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
Learning More . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166

Chapter 11 • Creating Subsets of Observations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169


Introduction to Creating Subsets of Observations . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
Input SAS Data Set for Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
Selecting Observations for a New SAS Data Set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
Conditionally Writing Observations to One or More SAS Data Sets . . . . . . . . . . . . . . 175
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
Learning More . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181

Chapter 12 • Working with Grouped or Sorted Observations . . . . . . . . . . . . . . . . . . . . . . . . . . 183


Introduction to Working with Grouped or Sorted Observations . . . . . . . . . . . . . . . . . . 183
Input SAS Data Set for Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184
Working with Grouped Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
Working with Sorted Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
Learning More . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197

Chapter 13 • Using More Than One Observation in a Calculation . . . . . . . . . . . . . . . . . . . . . . . 199


Introduction to Using More Than One Observation in a Calculation . . . . . . . . . . . . . 199
Input File and SAS Data Set for Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
Accumulating a Total for an Entire Data Set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
Obtaining a Total for Each BY Group . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204
Writing to Separate Data Sets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206
Using a Value in a Later Observation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212
Learning More . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213

Chapter 14 • Finding Shortcuts in Programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215


Introduction to Shortcuts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
Input File and SAS Data Set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216
Performing More Than One Action in an IF-THEN Statement . . . . . . . . . . . . . . . . . . 217
Performing the Same Action for a Series of Variables . . . . . . . . . . . . . . . . . . . . . . . . . 219
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222
Learning More . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223

Chapter 15 • Working with Dates in the SAS System . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225


Introduction to Working with Dates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
Understanding How SAS Handles Dates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
Input File and SAS Data Set for Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
Entering Dates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
Displaying Dates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
Using Dates in Calculations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
Using SAS Date Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239
Comparing Durations and SAS Date Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243
Learning More . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244

PART 4 Combining SAS Data Sets 247

Chapter 16 • Methods of Combining SAS Data Sets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249


Introduction to Combining SAS Data Sets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249
Definition of Concatenating . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250
vi Contents

Definition of Interleaving . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250


Definition of Merging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251
Definition of Updating . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252
Definition of Modifying . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253
Comparing Modifying, Merging, and Updating Data Sets . . . . . . . . . . . . . . . . . . . . . . 254
Learning More . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255

Chapter 17 • Concatenating SAS Data Sets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257


Introduction to Concatenating SAS Data Sets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257
Concatenating Data Sets with the SET Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258
Concatenating Data Sets By Using the APPEND Procedure . . . . . . . . . . . . . . . . . . . . 274
Choosing between the SET Statement and the APPEND Procedure . . . . . . . . . . . . . . 278
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279
Learning More . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280

Chapter 18 • Interleaving SAS Data Sets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281


Introduction to Interleaving SAS Data Sets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281
Understanding BY-Group Processing Concepts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282
Interleaving Data Sets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286
Learning More . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287

Chapter 19 • Merging SAS Data Sets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289


Introduction to Merging SAS Data Sets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289
Understanding the MERGE Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290
One-to-One Merging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290
Match-Merging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296
Choosing between One-to-One Merging and Match-Merging . . . . . . . . . . . . . . . . . . . 310
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315
Learning More . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315

Chapter 20 • Updating SAS Data Sets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317


Introduction to Updating SAS Data Sets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317
Understanding the UPDATE Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318
Understanding How to Select BY Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318
Updating a Data Set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319
Updating with Incremental Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324
Understanding the Differences between Updating and Merging . . . . . . . . . . . . . . . . . 326
Handling Missing Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333
Learning More . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333

Chapter 21 • Modifying SAS Data Sets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335


Introduction to Modifying SAS Data Sets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335
Input SAS Data Set for Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336
Modifying a SAS Data Set: The Simplest Case . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337
Modifying a Master Data Set with Observations from a Transaction Data Set . . . . . . 338
Understanding How Duplicate BY Variables Affect File Update . . . . . . . . . . . . . . . . 343
Handling Missing Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347
Learning More . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348

Chapter 22 • Conditionally Processing Observations from Multiple SAS Data Sets . . . . . . . . 349
Introduction to Conditional Processing from Multiple SAS Data Sets . . . . . . . . . . . . 349
Input SAS Data Sets for Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350
Determining Which Data Set Contributed the Observation . . . . . . . . . . . . . . . . . . . . . 353
Contents vii

Combining Selected Observations from Multiple Data Sets . . . . . . . . . . . . . . . . . . . . 358


Performing a Calculation Based on the Last Observation . . . . . . . . . . . . . . . . . . . . . . 359
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361
Learning More . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362

PART 5 Debugging SAS Programs 363

Chapter 23 • Analyzing Your SAS Session with the SAS Log . . . . . . . . . . . . . . . . . . . . . . . . . . 365
Introduction to Analyzing Your SAS Session with the SAS Log . . . . . . . . . . . . . . . . . 366
Understanding the SAS Log . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 366
Locating the SAS Log . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369
Understanding the Log Structure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369
Writing to the SAS Log . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375
Suppressing Information in the SAS Log . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 382
Changing the Appearance of the Log . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387
Learning More . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 388

Chapter 24 • Directing SAS Output and the SAS Log . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391


Introduction to Directing SAS Output and the SAS Log . . . . . . . . . . . . . . . . . . . . . . . 391
Input File and SAS Data Set for Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392
Routing the Output and the SAS Log with PROC PRINTTO . . . . . . . . . . . . . . . . . . . 393
Storing the Output and the SAS Log in the SAS Windowing Environment . . . . . . . . 395
Redefining the Default Destination in a Batch or Noninteractive Environment . . . . . 396
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 397
Learning More . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 398

Chapter 25 • Diagnosing and Avoiding Errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 399


Introduction to Diagnosing and Avoiding Errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 399
Understanding How the SAS Supervisor Checks a Job . . . . . . . . . . . . . . . . . . . . . . . . 400
Understanding How SAS Processes Errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 400
Distinguishing Types of Errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 401
Diagnosing Errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402
Using a Quality Control Checklist . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412
Learning More . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412

Chapter 26 • Finding Logic Errors in Your Program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415


Finding Logic Errors in Your Program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415
Using the DATA Step Debugger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 416
Basic Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 416
Using the Macro Facility with the Debugger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 418
Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 419

PART 6 Producing Reports 431

Chapter 27 • Producing Detail Reports with the PRINT Procedure . . . . . . . . . . . . . . . . . . . . . . 433


Introduction to Producing Reports with the PRINT Procedure . . . . . . . . . . . . . . . . . . 434
Input File and SAS Data Sets for Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 434
Creating Simple Reports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 436
Creating Enhanced Reports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 446
Creating Customized Reports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 458
viii Contents

Making Your Reports Easy to Change . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 465


Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 469
Learning More . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 472

Chapter 28 • Creating Summary Tables with the TABULATE Procedure . . . . . . . . . . . . . . . . . 473


Introduction to Creating Summary Tables with the TABULATE Procedure . . . . . . . . 474
Understanding Summary Table Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 474
Understanding the Basics of the TABULATE Procedure . . . . . . . . . . . . . . . . . . . . . . . 476
Input File and SAS Data Set for Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 479
Creating Simple Summary Tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 480
Creating More Sophisticated Summary Tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 485
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 496
Learning More . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 499

Chapter 29 • Creating Detail and Summary Reports with the REPORT Procedure . . . . . . . . . 501
Introduction to Creating Detail and Summary Reports with the REPORT Procedure . 501
Understanding How to Construct a Report . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 502
Input File and SAS Data Set for Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 504
Creating Simple Reports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 505
Creating More Sophisticated Reports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 514
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 523
Learning More . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 527

PART 7 Producing Plots and Charts 529

Chapter 30 • Plotting the Relationship between Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 531


Introduction to Plotting the Relationship between Variables . . . . . . . . . . . . . . . . . . . . 531
Input File and SAS Data Set for Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 532
Plotting One Set of Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 535
Enhancing the Plot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 537
Plotting Multiple Sets of Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 541
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 547
Learning More . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 549

Chapter 31 • Producing Charts to Summarize Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 551


Introduction to Producing Charts to Summarize Variables . . . . . . . . . . . . . . . . . . . . . 552
Understanding the Charting Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 552
Input File and SAS Data Set for Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 553
Charting Frequencies with the CHART Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . 555
Customizing Frequency Charts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 563
Creating High-Resolution Histograms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 574
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 586
Learning More . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 590

PART 8 Designing Your Own Output 593

Chapter 32 • Writing Lines to the SAS Log or to an Output File . . . . . . . . . . . . . . . . . . . . . . . . 595


Introduction to Writing Lines to the SAS Log or to an Output File . . . . . . . . . . . . . . . 595
Understanding the PUT Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 596
Writing Output without Creating a Data Set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 596
Writing Simple Text . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 597
Contents ix

Writing a Report . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 603


Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 610
Learning More . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 611

Chapter 33 • Understanding and Customizing SAS Output: The Basics . . . . . . . . . . . . . . . . . 613


Introduction to the Basics of Understanding and Customizing SAS Output . . . . . . . . 614
Understanding Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 614
Input SAS Data Set for Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 616
Locating Procedure Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 617
Making Output Informative . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 618
Controlling Output Appearance of Listing Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . 624
Controlling the Appearance of Pages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 627
Representing Missing Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 638
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 641
Learning More . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 642

Chapter 34 • Understanding and Customizing SAS Output: The Output


Delivery System (ODS) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 643
Introduction to Customizing SAS Output By Using the Output Delivery System . . . . 644
Input Data Set for Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 644
Understanding ODS Output Formats and Destinations . . . . . . . . . . . . . . . . . . . . . . . . 645
Selecting an Output Format . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 647
Creating Formatted Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 648
Selecting the Output That You Want to Format . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 661
Customizing ODS Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 667
Storing Links to ODS Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 678
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 680
Learning More . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 683

PART 9 Storing and Managing Data in SAS Files 685

Chapter 35 • Understanding SAS Libraries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 687


Introduction to Understanding SAS Libraries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 687
What Is a SAS Library? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 688
Accessing a SAS Library . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 688
Storing Files in a SAS Library . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 690
Referencing SAS Data Sets in a SAS Library . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 691
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 693
Learning More . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 694

Chapter 36 • Managing SAS Libraries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 695


Introduction to Managing SAS Libraries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 695
Choosing Your Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 695
Understanding the DATASETS Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 696
Looking at a PROC DATASETS Session . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 697
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 698
Learning More . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 698

Chapter 37 • Getting Information about Your SAS Data Sets . . . . . . . . . . . . . . . . . . . . . . . . . . . 701


Introduction to Getting Information about Your SAS Data Sets . . . . . . . . . . . . . . . . . 701
Input Data Library for Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 702
Requesting a Directory Listing for a SAS Library . . . . . . . . . . . . . . . . . . . . . . . . . . . . 702
Requesting Contents Information about SAS Data Sets . . . . . . . . . . . . . . . . . . . . . . . . 704
Requesting Contents Information in Different Formats . . . . . . . . . . . . . . . . . . . . . . . . 708
x Contents

Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 710
Learning More . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 710

Chapter 38 • Modifying SAS Data Set Names and Variable Attributes . . . . . . . . . . . . . . . . . . . 713
Introduction to Modifying SAS Data Set Names and Variable Attributes . . . . . . . . . . 713
Input Data Library for Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 714
Renaming SAS Data Sets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 714
Modifying Variable Attributes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 716
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 723
Learning More . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 724

Chapter 39 • Copying, Moving, and Deleting SAS Data Sets . . . . . . . . . . . . . . . . . . . . . . . . . . . 725


Introduction to Copying, Moving, and Deleting SAS Data Sets . . . . . . . . . . . . . . . . . 725
Input Data Libraries for Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 726
Copying SAS Data Sets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 727
Copying Specific SAS Data Sets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 730
Moving SAS Libraries and SAS Data Sets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 731
Deleting SAS Data Sets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 734
Deleting All Files in a SAS Library . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 735
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 736
Learning More . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 737

PART 10 Understanding Your SAS Environment 739

Chapter 40 • Introducing the SAS Environment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 741


Introduction to the SAS Environment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 741
Starting a SAS Session . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 742
Selecting a SAS Processing Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 743
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 749
Learning More . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 751

Chapter 41 • Using the SAS Windowing Environment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 753


Introduction to Using the SAS Windowing Environment . . . . . . . . . . . . . . . . . . . . . . 754
Getting Organized . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 755
Finding Online Help . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 758
Using SAS Windowing Environment Command Types . . . . . . . . . . . . . . . . . . . . . . . . 758
Working with SAS Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 761
Working with Text . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 766
Working with Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 770
Working with SAS Programs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 775
Working with Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 781
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 790
Learning More . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 792

Chapter 42 • Customizing the SAS Environment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 793


Introduction to Customizing the SAS Environment . . . . . . . . . . . . . . . . . . . . . . . . . . . 794
Customizing Your Current Session . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 795
Customizing Session-to-Session Settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 798
Customizing the SAS Windowing Environment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 802
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 807
Learning More . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 809
Contents xi

PART 11 Appendix 811

Appendix 1 • Complete DATA Steps for Selected Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . 813


Complete DATA Steps for Selected Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 813
The CITY Data Set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 814
The UNIVERSITY_TEST_SCORES Data Set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 815
The YEAR_SALES Data Set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 816
The HIGHLOW Data Set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 817
The GRADES Data Set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 818
The USCLIM Data Sets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 819
The CLIMATE, PRECIP, and STORM Data Sets . . . . . . . . . . . . . . . . . . . . . . . . . . . . 820

Appendix 2 • DATA Step Debugger Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 823


Dictionary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 823

Glossary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 839
Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 859
xii Contents
xiii

About This Book

Syntax Conventions for the SAS Language

Overview of Syntax Conventions for the SAS Language


SAS uses standard conventions in the documentation of syntax for SAS language
elements. These conventions enable you to easily identify the components of SAS
syntax. The conventions can be divided into these parts:
• syntax components
• style conventions
• special characters
• references to SAS libraries and external files

Syntax Components
The components of the syntax for most language elements include a keyword and
arguments. For some language elements, only a keyword is necessary. For other
language elements, the keyword is followed by an equal sign (=). The syntax for
arguments has multiple forms in order to demonstrate the syntax of multiple arguments,
with and without punctuation.
keyword
specifies the name of the SAS language element that you use when you write your
program. Keyword is a literal that is usually the first word in the syntax. In a CALL
routine, the first two words are keywords.
In these examples of SAS syntax, the keywords are bold:
CHAR (string, position)
CALL RANBIN (seed, n, p, x);
ALTER (alter-password)
BEST w.
REMOVE <data-set-name>
In this example, the first two words of the CALL routine are the keywords:
CALL RANBIN(seed, n, p, x)
The syntax of some SAS statements consists of a single keyword without arguments:
DO;
xiv About This Book

... SAS code ...


END;
Some system options require that one of two keyword values be specified:
DUPLEX | NODUPLEX
Some procedure statements have multiple keywords throughout the statement syntax:
CREATE <UNIQUE> INDEX index-name ON table-name (column-1 <,
column-2, …>)
argument
specifies a numeric or character constant, variable, or expression. Arguments follow
the keyword or an equal sign after the keyword. The arguments are used by SAS to
process the language element. Arguments can be required or optional. In the syntax,
optional arguments are enclosed in angle brackets ( < > ).
In this example, string and position follow the keyword CHAR. These arguments are
required arguments for the CHAR function:
CHAR (string, position)
Each argument has a value. In this example of SAS code, the argument string has a
value of 'summer', and the argument position has a value of 4:
x=char('summer', 4);

In this example, string and substring are required arguments, whereas modifiers and
startpos are optional.
FIND(string, substring <, modifiers> <, startpos>
argument(s)
specifies that one argument is required and that multiple arguments are allowed.
Separate arguments with a space. Punctuation, such as a comma ( , ) is not required
between arguments.
The MISSING statement is an example of this form of multiple arguments:
MISSING character(s);
<LITERAL_ARGUMENT>argument-1<<LITERAL_ARGUMENT>argument-2 ... >
specifies that one argument is required and that a literal argument can be associated
with the argument. You can specify multiple literals and argument pairs. No
punctuation is required between the literal and argument pairs. The ellipsis (...)
indicates that additional literals and arguments are allowed.
The BY statement is an example of this argument:
BY <DESCENDING> variable-1 <<DESCENDING> variable-2 …>;
argument-1 <option(s)> <argument-2 <option(s)> ...>
specifies that one argument is required and that one or more options can be
associated with the argument. You can specify multiple arguments and associated
options. No punctuation is required between the argument and the option. The
ellipsis (...) indicates that additional arguments with an associated option are
allowed.
The FORMAT procedure PICTURE statement is an example of this form of multiple
arguments:
PICTURE name <(format-option(s))>
<value-range-set-1 <(picture-1-option(s))>
<value-range-set-2 <(picture-2-option(s))> …>>;
Syntax Conventions for the SAS Language xv

argument-1=value-1 <argument-2=value-2 ...>


specifies that the argument must be assigned a value and that you can specify
multiple arguments. The ellipsis (...) indicates that additional arguments are allowed.
No punctuation is required between arguments.
The LABEL statement is an example of this form of multiple arguments:
LABEL variable-1=label-1 <variable-2=label-2 …>;
argument-1 <, argument-2, ...>
specifies that one argument is required and that you can specify multiple arguments
that are separated by a comma or other punctuation. The ellipsis (...) indicates a
continuation of the arguments, separated by a comma. Both forms are used in the
SAS documentation.
Here are examples of this form of multiple arguments:
AUTHPROVIDERDOMAIN (provider-1:domain-1 <, provider-2:domain-2, …>
INTO :macro-variable-specification-1 <, :macro-variable-specification-2, …>
Note: In most cases, example code in SAS documentation is written in lowercase with a
monospace font. You can use uppercase, lowercase, or mixed case in the code that
you write.

Style Conventions
The style conventions that are used in documenting SAS syntax include uppercase bold,
uppercase, and italic:
UPPERCASE BOLD
identifies SAS keywords such as the names of functions or statements. In this
example, the keyword ERROR is written in uppercase bold:
ERROR <message>;
UPPERCASE
identifies arguments that are literals.
In this example of the CMPMODEL= system option, the literals include BOTH,
CATALOG, and XML:
CMPMODEL=BOTH | CATALOG | XML |
italic
identifies arguments or values that you supply. Items in italic represent user-supplied
values that are either one of the following:
• nonliteral arguments. In this example of the LINK statement, the argument label
is a user-supplied value and therefore appears in italic:
LINK label;
• nonliteral values that are assigned to an argument.
In this example of the FORMAT statement, the argument DEFAULT is assigned
the variable default-format:
FORMAT variable(s) <format > <DEFAULT = default-format>;

Special Characters
The syntax of SAS language elements can contain the following special characters:
xvi About This Book

=
an equal sign identifies a value for a literal in some language elements such as
system options.
In this example of the MAPS system option, the equal sign sets the value of MAPS:
MAPS=location-of-maps
<>
angle brackets identify optional arguments. A required argument is not enclosed in
angle brackets.
In this example of the CAT function, at least one item is required:
CAT (item-1 <, item-2, …>)
|
a vertical bar indicates that you can choose one value from a group of values. Values
that are separated by the vertical bar are mutually exclusive.
In this example of the CMPMODEL= system option, you can choose only one of the
arguments:
CMPMODEL=BOTH | CATALOG | XML
...
an ellipsis indicates that the argument can be repeated. If an argument and the ellipsis
are enclosed in angle brackets, then the argument is optional. The repeated argument
must contain punctuation if it appears before or after the argument.
In this example of the CAT function, multiple item arguments are allowed, and they
must be separated by a comma:
CAT (item-1 <, item-2, …>)
'value' or "value"
indicates that an argument that is enclosed in single or double quotation marks must
have a value that is also enclosed in single or double quotation marks.
In this example of the FOOTNOTE statement, the argument text is enclosed in
quotation marks:
FOOTNOTE <n> <ods-format-options 'text' | "text">;
;
a semicolon indicates the end of a statement or CALL routine.
In this example, each statement ends with a semicolon:
data namegame;
length color name $8;
color = 'black';
name = 'jack';
game = trim(color) || name;
run;

References to SAS Libraries and External Files


Many SAS statements and other language elements refer to SAS libraries and external
files. You can choose whether to make the reference through a logical name (a libref or
fileref) or use the physical filename enclosed in quotation marks. If you use a logical
name, you typically have a choice of using a SAS statement (LIBNAME or
FILENAME) or the operating environment's control language to make the reference.
Syntax Conventions for the SAS Language xvii

Several methods of referring to SAS libraries and external files are available, and some
of these methods depend on your operating environment.
In the examples that use external files, SAS documentation uses the italicized phrase
file-specification. In the examples that use SAS libraries, SAS documentation uses the
italicized phrase SAS-library enclosed in quotation marks:
infile file-specification obs = 100;
libname libref 'SAS-library';
xviii About This Book
xix

What’s New in Step-by-Step


Programming with Base SAS 9.4

Overview

Step-by-Step Programming with Base SAS 9.4 shows you how to create SAS programs
step by step. You are provided with conceptual information and examples that illustrate
the SAS concepts. You can execute the programs in this document and view the results.
This document contains the basic information that you need to begin writing and
debugging your SAS code.
The following enhancements have been made to the documentation:
• additional information about debugging SAS programs
• new method of concatenating SAS variables
• updated sections on Output Delivery System (ODS)
In the third maintenance release for SAS 9.4, the following enhancements have been
made to the documentation:
• discussion of the DSD option was added to the documentation about list input
• directions for viewing ODS style templates were updated (see “Customizing ODS
Output at the Level of a SAS Job” on page 667)
• discussion of the IN= data set option was added to the documentation about merging
data sets

Debugging SAS Programs

Additional information and examples of SAS log output have been added. Items in the
SAS log are explained so that you can more easily debug your own SAS programs.
Documentation for the DATA step debugger has been added. The DATA step debugger
is a tool that enables you to find logic errors in your program. A description of the tool
and examples are provided. A list of commands that you use with the debugger is also
provided.
xx Step-by-Step Programming

Concatenating SAS Variables

A preferred method of concatenating SAS variables has been introduced. You use the
CAT function to return a concatenated character string.

Output Delivery System (ODS)

The sections about the Output Delivery System (ODS) have been updated, and new
information has been added. ODS gives you greater flexibility in generating, storing, and
reproducing SAS procedure and DATA step output along with a wide range of
formatting options. ODS provides formatting functionality that is not available when
using individual procedures or the DATA step without ODS.
Beginning with SAS 9.3, the default destination in the SAS windowing environment is
HTML, and ODS Graphics is enabled by default. These new defaults have several
advantages. Graphs are integrated with tables, and all output is displayed in the same
HTML file using a new style. This new style, HTMLBlue, is an all-color style that is
designed to integrate tables and modern statistical graphics. The examples in this
document now show HTML output.
xxi

Accessibility Features of Step-by-


Step Programming with Base SAS
9.4

Overview
For information about the accessibility of Base SAS, see the SAS 9.4 Companion for
Windows.
xxii Accessibility Features of Step-by-Step Programming with Base SAS 9.4
1

Part 1

Introduction to the SAS System

Chapter 1
What is the SAS System? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

Chapter 2
Working with Output Defaults . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2
3

Chapter 1
What is the SAS System?

Introduction to the SAS System . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3


Components of Base SAS Software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
Overview of Base SAS Software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
Data Management Facility . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
Programming Language . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Data Analysis and Reporting Utilities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
Output Produced by the SAS System . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Traditional Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Output from the Output Delivery System (ODS) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Ways to Run SAS Programs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Selecting an Approach . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
SAS Windowing Environment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
SAS/ASSIST Software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
Noninteractive Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
Batch Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
Interactive Line Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
Running Programs in the SAS Windowing Environment . . . . . . . . . . . . . . . . . . . . 13
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Procedures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Learning More . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

Introduction to the SAS System


SAS is an integrated system of software solutions that enables you to perform the
following tasks:
• data entry, retrieval, and management
• report writing and graphics design
• statistical and mathematical analysis
• business forecasting and decision support
• operations research and project management
• applications development
4 Chapter 1 • What is the SAS System?

How you use SAS depends on what you want to accomplish. Some people use many of
the capabilities of the SAS System, and others use only a few.
At the core of the SAS System is Base SAS software, which is the software product that
you will learn to use in this documentation. This section presents an overview of Base
SAS. It introduces the capabilities of Base SAS, addresses methods of running SAS, and
outlines various types of output.

Components of Base SAS Software

Overview of Base SAS Software


Base SAS software contains the following:
• a data management facility
• a programming language
• data analysis and reporting utilities
Learning to use Base SAS enables you to work with these features of SAS. It also
prepares you to learn other SAS products, because all SAS products follow the same
basic rules.

Data Management Facility


SAS organizes data into a rectangular form or table that is called a SAS data set. The
following figure shows a SAS data set. The data describes participants in a 16-week
weight program at a health and fitness club. The data for each participant includes an
identification number, name, team name, and weight (in U.S. pounds) at the beginning
and end of the program.

Figure 1.1 Rectangular Form of a SAS Data Set

variable

IdNumber Name Team StartWeight EndWeight

1 1023 David Shaw red 189 165

2 1049 Amelia Serrano yellow 145 124 observation

3 1219 Alan Nance red 210 192

4 1246 Ravi Sinha yellow 194 177 data value

5 1078 Ashley McKnight red 127 118

data value

In a SAS data set, each row represents information about an individual entity and is
called an observation. Each column represents the same type of information and is called
a variable. Each separate piece of information is a data value. In a SAS data set, an
observation contains all the data values for an entity; a variable contains the same type of
data value for all entities.
Components of Base SAS Software 5

To build a SAS data set with Base SAS, you write a program that uses statements in the
SAS programming language. A SAS program that begins with a DATA statement and
typically creates a SAS data set or a report is called a DATA step.
The following SAS program creates a SAS data set named WEIGHT_CLUB from the
health club data:
data weight_club; 1
input IdNumber 1-4 Name $ 6-24 Team $ StartWeight EndWeight; 2
Loss=StartWeight-EndWeight; 3
datalines; 4
1023 David Shaw red 189 165 5
1049 Amelia Serrano yellow 145 124 5
1219 Alan Nance red 210 192 5
1246 Ravi Sinha yellow 194 177 5
1078 Ashley McKnight red 127 118 5
;6

The following list corresponds to the numbered items in the preceding program:
1 The DATA statement tells SAS to begin building a SAS data set named
WEIGHT_CLUB.
2 The INPUT statement identifies the fields to be read from the input data and names
the SAS variables to be created from them (IdNumber, Name, Team, StartWeight,
and EndWeight).
3 The third statement is an assignment statement. It calculates the weight each person
lost and assigns the result to a new variable, Loss.
4 The DATALINES statement indicates that data lines follow.
5 The data lines follow the DATALINES statement. This approach to processing raw
data is useful when you have only a few lines of data. (Later sections show ways to
access larger amounts of data that are stored in files.)
6 The semicolon signals the end of the raw data, and is a step boundary. It tells SAS
that the preceding statements are ready for execution.

Note: By default, the data set WEIGHT_CLUB is temporary. It exists only for the
current job or session. For information about how to create a permanent SAS data
set, see “Introduction to DATA Step Processing” on page 27.

Programming Language

Elements of the SAS Language


The statements that created the data set WEIGHT_CLUB are part of the SAS
programming language. The SAS language contains statements, expressions, functions
and CALL routines, options, formats, and informats – elements that many programming
languages share. However, the way you use the elements of the SAS language depends
on certain programming rules. The most important rules are listed in the next two
sections.

Rules for SAS Statements


The conventions that are shown in the programs in this documentation, such as indenting
of subordinate statements, extra spacing, and blank lines, are for the purpose of clarity
and ease of use. They are not required by SAS. There are only a few rules for writing
SAS statements:
6 Chapter 1 • What is the SAS System?

• SAS statements end with a semicolon.


• You can enter SAS statements in lowercase, uppercase, or a mixture of the two.
• You can begin SAS statements in any column of a line and write several statements
on the same line.
• You can begin a statement on one line and continue it on another line, but you cannot
split a word between two lines.
• Words in SAS statements are separated by blanks or by special characters (such as
the equal sign and the minus sign in the calculation of the Loss variable in the
WEIGHT_CLUB example).

Rules for Most SAS Names


SAS names are used for SAS data set names, variable names, and other items. The
following rules apply:
• A SAS name can contain from one to 32 characters.
• The first character must be a letter or an underscore (_).
• Subsequent characters must be letters, numbers, or underscores.
• Blank spaces cannot appear in SAS names.

Special Rules for Variable Names


For variable names only, SAS remembers the combination of uppercase and lowercase
letters that you use when you create the variable name. Internally, the case of letters does
not matter. “CAT,” “cat,” and “Cat” all represent the same variable. But for presentation
purposes, SAS remembers the initial case of each letter and uses it to represent the
variable name when printing it.

Data Analysis and Reporting Utilities


The SAS programming language is both powerful and flexible. You can program any
number of analyses and reports with it. SAS can also simplify programming for you with
its library of built-in programs known as SAS procedures. SAS procedures use data
values from SAS data sets to produce preprogrammed reports, requiring minimal effort
from you.
For example, the following SAS program produces a report that displays the values of
the variables in the SAS data set WEIGHT_CLUB. Weight values are presented in U.S.
pounds.
proc print data=weight_club;
title 'Health Club Data';
run;
Components of Base SAS Software 7

This procedure, known as the PRINT procedure, displays the variables in a simple,
organized form. The following output displays the results:

Figure 1.2 Displaying the Values in a SAS Data Set

To produce a table showing mean starting weight, ending weight, and weight loss for
each team, use the TABULATE procedure.
proc tabulate data=weight_club;
class team;
var StartWeight EndWeight Loss;
table team, mean*(StartWeight EndWeight Loss);
title 'Mean Starting Weight, Ending Weight,';
title2 'and Weight Loss';
run;

The following output displays the results:

Figure 1.3 Table of Mean Values for Each Team

A portion of a SAS program that begins with a PROC (procedure) statement and ends
with a RUN statement (or is ended by another PROC or DATA statement) is called a
PROC step. Both of the PROC steps that create the previous two outputs comprise the
following elements:
• a PROC statement, which includes the word PROC, the name of the procedure that
you want to use, and the name of the SAS data set that contains the values. (If you
omit the DATA= option and data set name, the procedure uses the SAS data set that
was most recently created in the program.)
• additional statements that give SAS more information about what you want to do, for
example, the CLASS, VAR, TABLE, and TITLE statements.
• a RUN statement, which indicates that the preceding group of statements is ready to
be executed.
Another Random Scribd Document
with Unrelated Content
CHAPTER NINE
THE JUDGEMENT OF SOLOMON
"The King hailed his keeper, an Arab
As glossy and black as a scarab,
And bade him make sport and at once stir
Up and out of his den the old monster....

One's whole blood grew curdling and creepy


To see the black mane, vast and heapy,
The tail in the air stiff and straining,
The wide eyes, nor waxing nor waning....

'How he stands!,' quoth the King....


'We exercise wholesome discretion
'In keeping aloof from his threshold....
'But who's he would prove so fool-hardy?
'Not the best man of Marignan, pardie!'

The sentence no sooner was uttered


Than over the rails a glove fluttered,
Fell close to the lion, and rested:
The dame 'twas, who flung it and jested
With life so, De Lorge had been wooing
For months past; he sat there pursuing
His suit, weighing out with nonchalance
Fine speeches like gold from a balance.

Sound the trumpet, no true knight's a tarrier!


De Lorge made one leap at the barrier,
Walked straight to the glove,—while the lion
Ne'er moved, kept his far-reaching eye on
The palm-tree-edged desert-spring's sapphire,
And the musky oiled skin of the Kaffir,—
Picked it up, and...."

Robert Browning: "The Glove."


Though he seemed to be leading the way, Barbara urged Jack by
suggestion up a side-staircase and through a billiard-room to a
broad loggia overlooking Greenhill Gardens. There were two chairs
and a table with cigarettes and champagne cup; the night air blew
chillingly with a scent of spring leaves, and the music reached them
as a reverberation mingling with the distant traffic of Piccadilly.
"I say, you won't catch cold, will you?" Jack asked.
Barbara smiled to herself. He would never have thought of the wind
or of her, if his match had not been blown out.
"Oh, we shan't be here long enough for that."
Jack lighted the cigarettes and settled himself elaborately in his
chair, with one leg thrown over the other.
"I wanted to talk to you. I think you know what it's about."
She had intended to be thrown off her balance with surprise, but the
bluntness of his opening did not invite ingenuousness.
"I hope I'm not in disgrace," she answered meekly. "You—rather
frighten me, when you're so mysterious. You're not going to say
anything unpleasant?"
"I hope you won't find it unpleasant. Look here, the best thing will
be for me to say what I've got to say, ... and then you.... I mean, if
you interrupt, you'll throw me out of my stride. Barbara, I've told
you what I'm earning; and one naturally hopes that it will increase
almost automatically year by year. As you know, I'm not a Catholic
——"
"Jack——"
He flapped one hand at her with nervous impatience, drew furiously
at his cigarette and looked away over the garden and house-tops to
the shadowy Park.
"You mustn't put me off my stroke, Barbara.... These are the two big
obstacles that all the world will see. Well, I can assure you that I
shouldn't be talking to you like this, if you hadn't—in a way—given
me the right to.... At first I couldn't stand you at any price
whatsoever. Then there was a night when I said to myself that I
should have to be careful. It was when you rang me up and invited
me to dine with you alone—after that business in Webster's rooms.
At first I was perfectly furious; you seemed to be taking that luckless
girl's death so calmly and thinking only of the hole you were in. And
then—I don't know; something changed. I began to feel sorry for
you, I felt extraordinarily fond of you; I told myself that I should
have to watch out. Then—something you said—it was when you
invited me to one of your own special parties at the Abbey; I got the
feeling that you liked me, rather. Was I right?"
The question came so suddenly in the middle of his halting narrative
that Barbara started. So far the scene was not developing at all as
she had expected. She could interrupt, confuse, stop him; but there
was no way of bringing in the open-eyed amazement which she had
planned; he seemed to be putting the responsibility on her. And,
when he brusquely told her not to interrupt, she felt strangely
disposed to obey him.
"Was I right?" he repeated, turning to look at her.
The customary self-satisfied smile had disappeared, and he was
frowning. Barbara chose to fancy that he must take on the same
expression with a fighting case in court.
"Yes, I quite liked you," she answered. "I always liked you, when
you're not trying to shew me that everything I say and do——"
He cut her short with a quick uplift of one finger.
"Good! Well, when you shewed me that, I took stock and began to
look at things from another point of view. I suggested to you—as
fairly and fully as I could—the chief obstacles; money ... and so
forth. If you—or your people, through you—had thought that
insuperable, then there was nothing more to be said. I felt I must
give you the opportunity of entering a caveat. I need hardly say
that, knowing you as I did.... I mean, if you wanted to marry a man,
you wouldn't mind if he were a beggar. Would you?"
The new question again startled her by its abruptness. She had a
misgiving that he was pressing her into a corner.
"Would you?" he repeated; and she half expected to hear him
browbeating her. "It's a simple question.... Yes or no.... I want you
to tell the jury.... Remember you are on your oath. Come now ... yes
or no...."
"Of course not. But, Jack——"
He stopped her with another jerk, as she had foreseen.
"I knew that. The next thing was—I suppose 'suitability' is the best
word. I mean we lead different lives, our outlook's different in some
ways. I had to consider what chance of success we should have
together. Well, you sometimes say that I find fault with everything
you do; I think you see now that I've never said a word that your
father hasn't said to you a hundred times. It's what everybody was
saying, and I think everybody's glad to see that you've come round
to their point of view. We all felt that you were too big, you know...."
He hesitated and looked away, frowning again as he tried to
remember the sequence of his argument. Barbara shivered
instinctively at his hackneyed, hated phrase, but she was struck
silent by the sheer audacity of his patronizing assumptions.
"Jack——" she began, but he again held up his hand.
"I don't know whether I ought to have gone to your father," he
resumed. "It seemed rather getting hold of the wrong end of the
stick to talk to a woman's father before you've talked to the woman
herself. Of course, one naturally goes to him for his assent. I happen
to know that your people, like you, saw what was in the wind, and,
as they were good enough not to pitch me into the street...."
"Jack! Please!"
Barbara leaned to him with her hands appealingly outstretched. In a
little while he would rob her of her last cue. By no abuse of language
could such pleading be associated with passion, but he was quoting
her against herself until it seemed as if she had almost begged him
to marry her.
"I've nearly done," he said, smiling for the first time; then he paused
to collect himself for a concise summary, and she could have
laughed hysterically at the spectacle of a plodding young barrister
trying to argue her into marriage. His voice had never changed in
timbre; and, if he had occasionally hesitated over a word, he had
never lost the train of thought. His chair was as discreetly remote as
when he first sat down, one leg thrown comfortably over the other;
and he had not thought fit to use one whisper of endearment.
"I don't want to hear any more!"
"You must."
"But, Jack, you're not in love with me!"
He laughed good-naturedly, as though he were humouring a child.
"I expect I'm the best judge of that. Well, you admit that I'm not
wholly repellent to you; the difference in religion can be
accommodated; I'm not altogether penniless. I want you to marry
me, Babs."
"I can't."
She flung out the words as soon as he gave her a chance of
speaking. With his dogged, relentless attack, it was surprising that
he left her an opportunity of answering; she would hardly have been
astonished if he had taken her firmly by the arm and led her home
to announce their engagement.
"That means you don't care for me?"
There was no sign of perturbation; but he was watching her closely.
One careless word would enable him to demonstrate that she had
coquetted with him for her vanity's sake; his memory was relentless,
and she could not pretend to convince herself that she had behaved
merely as if she "quite liked" him, when a hundred people were
gossiping about them.... And he had a passion for demonstrating
things; he seemed to be addressing an invisible jury beyond the
pillars of the loggia.
"My dear Jack, how could you ever dream of marrying me—thinking
of me, as you do?" she demanded with a breathless attempt to start
her speech and to overwhelm his massive arguments with rhetoric
and drama.
"Let's stick to facts. I do dream of it. I want to."
"But you disapprove of everything I do, you think I'm vulgar, cheap.
Oh, you've said it, Jack; you've used those words. They hurt much
too much for me to forget them easily."
"I'm sorry to have hurt you," he interrupted. "But I think you have
come round to my way of thinking."
"I'll forget them—I'll try to," she went on, gabbling her speech
murderously. "This is much too important for us to think about our
own wretched little amour propre; and, when you say I'm "big," I
always hope it means that I'm generous, forgiving. But, Jack, you
despise me—or you did—the woman that you want to be the mother
of your children——"
"You have changed. Otherwise I shouldn't want to marry you."
Barbara walked to the edge of the loggia and stood with her hands
on the stone parapet, looking down on to the shadowy foliage of the
gardens. She could no longer force into service the speech that she
had rehearsed and at any moment she might expect to hear him say
—in his horrible jury voice—"Then am I to understand that you
never meant anything seriously, that this was all an elaborate trick?
Was that your means of vindicating yourself? And do you feel that it
has been successful?" He shewed a disconcerting mastery and a no
less disconcerting restraint; she was not allowed to interrupt, and,
when he had posed a question, he held her to it, waiting silently for
an answer and blocking the loop-holes of irrelevancy.
"Why do you say you can't marry me?"
She turned to find that he was still by the table; he had risen as she
rose, but without following her, without disturbing his deadly,
businesslike composure.
"We should be miserable."
"D'you mean I'm wrong? Don't you care for me?"
"'Care'? I'm thinking about love! You don't know what love is! All the
time you've been talking.... So cold and collected.... If you were in
love with me, you'd want to take me in your arms, you'd be
transfigured, there'd be radiance, glory in your eyes, you'd hold me
as if you never meant to let me go!... You—you talked like a leading
article; you never even said you loved me."
"I thought we might take that as read."
"But look at you now! If you loved me, you wouldn't want to keep
away; you wouldn't be able to."
"I've got a certain amount of self-control."
"To resist something that's not a temptation?"
She came slowly back to him and stood gazing up into his face. As
on the night when she had darted from him at the Croxton Ball, her
cheeks were white and hollow, her eyes were nearly black; it was
the morbid, feverish beauty of a consumptive kept alive by force of
will. The spray of orchids rose and fell with her breathing, and he
could have caught and encircled her slender, boyish figure with one
arm.
"You're looking divine to-night," he murmured.
"Is that all you've got to say?"
"No! I'm responsible for you at this moment. And, if I were you, I
should think twice before you blaspheme against the Holy Ghost
again. You don't doubt that I love you."
Barbara pressed her hands against her cheeks, throwing her head
back and closing her eyes.
"I wish I could," she whispered. "I was trying to, trying to make you
doubt it so that you wouldn't mind so much. If I could have made
you think that we were just friends.... Jack, you must—before it's too
late. You've made a mistake, you're exaggerating everything! Just
because you've hardly met a girl before, you think you're in love with
me. Because I'm pretty, because I amuse you ... I'll be ever so
humble! I'm nothing—nothing but a great friend. If you go away,
you'll see it like that; when you come back, we shall still be friends,
but you'll wonder how you ever imagined you were in love with me.
You're not, Jack! You must tell yourself you're not."
"I don't understand, Barbara."
"I'm trying to help you. I can never marry you; and I want you to
see that you're not losing anything. You don't really want me. Oh,
you don't, Jack!"
"Why do you say you can never marry me? Don't you love me?"
Barbara had expected the question for so long that it had lost half its
force before reaching her. Her mind moved quickly, as it had done all
the evening, and she could anticipate Jack's slow change of
expression, his dawning realization and then her punishment. There
was no give-and-take, when he lectured or attacked; no neatness of
phrase, no delicacy of sarcasm or irony, no intellectual joy of battle.
He dealt the bludgeon blows of one who seemed to boast that he
was not clever but tried to be honest. She felt suddenly frightened
for her pride and for herself; and she knew that he would beat her
as conscientiously as he had tried to win her.
"Love isn't everything," she answered.
"I'm waiting to be told what the obstacle is."
In another moment he would have summarized for the third time all
possible objections to the marriage and his own complacent disposal
of them. She could not bear that again.
"Jack, you're not a Catholic," she cried.
"I know. I told you that from the first. But we can arrange that; I'll
do whatever is necessary. It's a nuisance, because I expect your
people loathe the idea of your marrying a heretic as much as mine
loathe the idea of my marrying a Catholic. Fortunately, we can
ignore them."
"I could never marry a man who wasn't a Catholic."
She clutched wildly at the promise of escape, and Jack betrayed
emotion for the first time in a gape of astonishment.
"But your own church—if you still call yourself a Catholic—doesn't go
as far as that."
"I don't care. It should. It's lying to your soul, if you believe one
thing and let children believe something else that you know to be
false. There's no sympathy of spirit when each thinks the other
wrong and sneers privately.... I can't talk about this, but you see
now why I tried to stop you.... Jack, do take me home! I feel as if I
couldn't stand any more!"
She turned convulsively and hurried back to the parapet of the
loggia. Jack picked up a cigarette, which he regarded absently,
frowning again.
"You could never marry a man who wasn't a Catholic?" he repeated.
"No. Jack, don't let's talk about this any more! If I'm to blame for
making you unhappy.... Oh, try to forgive me! If you let me think I'd
spoiled your life—— Please take me home."
He roused himself from contemplation of the gilt name and address
on the cigarette and walked with her into the house.
"Is your car coming back for you?" he asked with a detachment that
she admired.
"Yes. You can take it on, if you like. Or perhaps you'd rather not
come with me.... I suppose you won't be coming to the Abbey to-
morrow?"
"I intended to."
"Jack, it can't do any good!"
"Do you withdraw the invitation?"
"I'd rather you didn't come. Later on we may be able to meet.... You
won't believe me now, but time is a wonderful healer——"
He interrupted her with a laugh of grating boisterousness.
"Is there anything to heal?"
It was after four o'clock when Barbara returned home alone from
Ross House; but, though she went quietly to bed, Lady Crawleigh
interrupted her undressing. The Duchess of Ross was the latest
busybody to wonder audibly whether young Waring was serious, and
it was high time for the girl to know that people were talking about
her.
"There was such a mob that, when Jack and I had got away from it,
we didn't go back," sighed Barbara wearily, to explain her lateness.
"I wish Eleanor Ross didn't know quite so many people. Oh, mother,
Jack can't come to the Abbey this week-end. He's writing to you, but
he asked me to give you that message."
Lady Crawleigh picked up a pendant, head-band and bracelet of fire-
opals from their scattered hiding-places on the floor, trying not to
seem either too much surprised or too indifferent. Then she knelt,
with a cracking of knee-joints, to search for the missing half of a pair
of ear-rings. Barbara, she reflected, had evidently done one thing—
or perhaps the other—or even neither; mercifully she could not do
both.
"He's really no business to chop and change like that at the last
moment," she complained. "What's happened?"
"He's kept in London," Barbara answered. "Don't bother to look for
those things, mother; Merton will be so disappointed, if there's
nothing for her to tidy. She always waits till I'm fast asleep, really
tired, and then throws tepid tea at me with one hand and knocks
over all the furniture with the other.... I can hardly keep my eyes
open. You'll let me go to sleep, won't you?"
Lady Crawleigh scrambled to her feet and came to the side of the
bed, an undignified, shrunken figure in a blue peignoir and satin
slippers, with grey-black hair secured in thick short plaits.
"My child, is anything the matter?"
Barbara was lying with one bare arm over her eyes, as though the
light hurt her. She had not waited to brush her hair, and the room
was littered with furiously scattered clothes.
"I'm only tired," she said. "I've never known anything so hot as that
place."
"Well, go to sleep." Lady Crawleigh shewed no sign of leaving the
bedside. "On the whole perhaps it's just as well that he isn't coming
to the Abbey. Some one was saying to-night——"
"Mother, I'm not going to marry Jack!"
Lady Crawleigh's eyes opened with innocent surprise.
"My darling, who ever said anything about it?"
Barbara laughed hardly.
"You were going to, weren't you? I thought I'd save time. Jack....
I've had a—remarkable evening, but I don't think I want to talk
about it."
Lady Crawleigh changed the lights, but she continued to hover
between the bed and the door, picking up a glove here and a
stocking there, glancing stealthily at Barbara and flogging her
imagination to guess what had taken place. The girl was a little
exacting with men, and there might have been a quarrel; but it was
rather drastic for Jack to default from the Abbey at the last moment.
He had possibly received an unexpected rebuff; but then the rebuff
was unexpected by every one, for Barbara had shewn him all the
encouragement that a woman could give. Possibly she had
encouraged him too much and received a rebuff herself....
"Darling——"
"I'm so tired, mother."
She seemed without resistance or power to assert herself, as though
she had been bullied and beaten. Lady Crawleigh felt a need to
protect her, as she had not felt it for ten years; Barbara was usually
stoical with bodily pains, and a wound to her pride or an ache at her
heart was shared with no one.
"Yes, darling, I won't keep you awake, but has there been any
unpleasantness? I mean, I have to think about the future—about
inviting him here."
"Oh, there's no reason why you shouldn't invite him. He can please
himself whether he comes or not."
Lady Crawleigh hesitated a moment longer, then tip-toed to the door
and turned off the lights. Nothing was to be learned from Barbara at
present.
No elucidation came from the letter of apology which she received
from Jack next day. He was unexpectedly detained in London, but
hoped that he might be forgiven and invited again some time later in
the summer. It was a question of private business, which would keep
him very fully occupied for some weeks. He would have given longer
warning, if possible, but the business had only come to him in the
middle of the night, as it were.... Lady Crawleigh tore up the letter
impatiently, then pieced it together and read it with perplexed
attention. If there had been no quarrel, no rebuff, no
unpleasantness, he would not underline this private business and
hint that he did not want to be invited to the house for the present;
if there had been a quarrel, it was incomprehensible that he should
ask to be given another chance later in the summer.
But for the phrase, "I've had a remarkable evening, but I don't think
I want to talk about it," Barbara might simply be tired. Certainly, she
was in excellent spirits next day, and the whole party at the Abbey
revolved round her and shone with her radiance. On their return to
London she threw herself as insatiably as ever into all that was going
on. The only difference now was that she never danced with Jack,
because he had disappeared; and she never mentioned his name.
Others also remarked his disappearance, and, though the excuse of
private business was bravely presented, they at least were not
satisfied. Lady Crawleigh suggested inviting him to a musical party,
from which it might have been noticeable to exclude him; Barbara
raised no objection, but Jack replied from his chambers that he was
unfortunately compelled to refuse all invitations at present.
It was mysterious and annoying, for an absurd amount of gossip
was swirling and eddying among the weary, chilled women who sat
night after night round ball-room walls. Deganway professed to have
seen an impertinent paragraph in the column of The Sphinx headed
"Riddles for Our Readers"; and, for every one who enquired what
had happened to Jack, Lady Crawleigh knew that a dozen must be
asking themselves why Barbara had made so public an exhibition of
herself, if she did not mean to let anything come of it. And there was
an added mystery and vexation when Jim Loring said: "I've the best
reason for knowing there's nothing to worry about," in a tone which
shewed that he was himself deeply worried.
He met his aunt on the morrow of a confession which lasted from
ten o'clock until two next morning. Jack had invited himself to dinner
at Loring House, stipulated that no one else should be present and
pledged his host to secrecy.
"I can't quite trust my own judgement," he drawled, when they were
alone after dinner. "A new factor, you know.... I haven't quite
adjusted myself to it.... I don't suppose it's any news to you that I
want to marry your cousin Barbara? Well, I've every reason to think
she would marry me to-morrow but for the unfortunate circumstance
that she's a Catholic and I'm not."
Loring involuntarily winced and looked away, recalling his own
shipwreck on a similar rock, the months of dull agony and the empty
years of wandering, which had but lately come to an end. It was the
first time that they had met alone, and Jim was more than three
years older; new lines were visible at the corners of his eyes, his
face and body were heavier and more inelastic. A note of bitterness
broke over-often through the habitual irony of his voice, as though
his spirit were still raw under its dressing of tolerant boredom.
"If any one knows anything on that subject," he murmured, "you've
come to the right man. Have you—actually put it to her?"
"Oh, yes. We're hung up on that. Barbara says that she could never
marry a man who wasn't a Catholic."
"But that's absurd! The Church itself——"
"So I told her, but she goes one better than her Church. Jim, I feel
that there's the makings of a first-class tragedy, if we're not very
careful ... and very clever. I want to marry her more than anything in
the world. There's nothing—I think there's literally nothing I wouldn't
do to bring it off. She—well, we went into it pretty thoroughly the
other night. I could see she was torn in two.... I—didn't press it. I
knew that, if she felt as strongly as that—in her bones—, I shouldn't
sweep her off her feet, however much she seemed to be convinced
at the moment. It didn't look like being permanent. I had to find
some other way out."
He paused and relit his cigar. The door was ajar, and Loring got up
to close it; then, instead of going back to his chair, he took a turn up
and down the library, with his chin on his chest and his hands thrust
deep into his pockets. Three years ago he had come back to that
room from his last farewell with Sonia Dainton; he has distractedly
summoned George Oakleigh to advise him and had paced up and
down, up and down, flinging half-smoked cigarettes into the fire-
place. And Oakleigh, whom he had invoked for help, would only tell
him brutally that love was over and that he must set his teeth and
face it.... Now again no other advice was possible.
"I'm dam' sorry, Jack," he muttered.
His voice quavered in sympathy, because their tragedies had so
much in common. He had never lost his heart to any one but Sonia,
as Jack had lost his only to Babs Neave; they had been immune for
the first thirty years of their life, and they were paying for their self-
denial and their affronting indifference to woman. Jack probably
enjoyed exposing his soul as little as he had done with George.
"It's rather a mess, isn't it?" said Jack.
"What are you going to do? Look here, we're old enough friends for
me to talk freely to you. It hurts like hell at the time, but one does
get over it. As you know, I went abroad for some years and tried to
forget. I should be—embarrassed, if I sat next to Sonia at dinner to-
night, but I shouldn't get the same tug at the heart that I got when I
just saw her for a moment in the distance—at the Coronation. You'd
better go away."
Jack smiled and then turned his head, finally resting his chin on one
fist and staring at the empty fire-place so that his face should be
hidden.
"I'm not going away," he answered. "I've every intention of marrying
Barbara. I feel that we were made for each other."
"But what are you going to do?" Loring repeated, as he paused
again.
"I propose to become a Catholic."
Loring started and sat down on the arm of a chair without speaking.
Jack's natural stolidity was a guarantee against melodrama.
"You can't do that, Jack," he said at length.
"We know several people who have."
"I won't criticize them, because they may already have been
Catholics in everything but name. They're entitled to the benefit of
the doubt. But you and I have talked religion a hundred times. It
wouldn't be straight dealing."
"Then I'm glad I've not talked religion with any one else. There'll be
no one else to give me away. I'm entitled to the benefit of the
doubt."
"No one would believe you; Barbara certainly wouldn't; and you'd
never be able to impose on yourself. You'd always feel dishonoured,
Jack."
There was a long silence, in which Loring was visibly the more
embarrassed. Jack smoked his cigar tranquilly, looking ahead of him
at the fire-place and not striving to pose either as hero or as cynic.
"My dear Jim," he answered at length, "if this were an easy
question, where I could trust my own judgement, I wouldn't inflict
my troubles on you like this. I won't pretend I like it. If you could
suggest a better way.... Now, when once the thing's done, there's no
discussion; I don't question Barbara's bona fides and I won't let her
question mine. Any children will be full-blooded Catholics, and the
question will never be raised again. I've completed a formality; she
will in fact marry a Catholic, which is what she's sticking out for, and
I'll see to it that no shadow of difference ever arises from religion.
It's not easy, God knows. Incidentally, the entire world will say I'm
marrying her for her money and getting converted so that she shan't
forfeit it. Always a pleasant thing to hear.... However, necessity
knows no law."
"That's tied round the neck of every crime and immorality in the
world's history."
Jack looked up with the first sign of interest that his face had shewn.
"You really think that would be a crime? I've come to you for your
opinion. A crime against Barbara?"
"Against yourself. I don't think it would affect her. Do you know
anything about the course of preparation before you're received into
the Church? You'll have to tell one lie after another, weeks and
weeks of them. And, when you've been received, you'll have to
continue. D'you propose to go regularly to Mass? Will you go to
Confession?"
Barbara's reputation for laxity was widely known and disapproved.
"I'll do whatever my wife does," Jack promised.
Though he pretended to keep an open mind, he was inviting
criticism only for the satisfaction of demolishing it. Loring was still
shocked and doubly shocked that he could make no impression on
his friend's stubborn insensibility.
"Have you discussed it with your people?" he asked.
"I've discussed it with no one. It'll be hell for them, of course."
"They won't be taken in."
Jack smiled a little ruefully and took up his position in front of the
fire-place, facing his friend.
"They won't be taken in," he agreed. "They'll hate it. I hate it. It's a
lie, a chain of lies. I don't expect that I shall ever be able to invent
excuses or tell myself a fairy-tale to get round it. The best I can say
is that it's the only means and that the end must justify the means. I
can't defend myself, Jim."
It was difficult to reason with a man who admitted every charge in
advance, and Loring was puzzled to know why they were arguing at
all.
"You're committing a crime against yourself—and making your family
perfectly miserable," he pointed out. "I know people rob and murder,
when they're in love, but why come and tell me about it?"
"I wanted you as a barometer—for my own sanity. Have I lost touch
with reality?"
"I think you're quite mad. I've been through it myself; and I was just
as mad. The best advice I can give you is to go away from Babs for
three or six months and see how you feel. If it's as bad as ever at
the end.... No, I'm damned if I take the responsibility of encouraging
you; I feel as badly about it as that."
Both started guiltily as the butler came in with a tray of decanters
and glasses, and Jack murmured, "Jove! It's getting late." When
they were alone again, he took a second cigar and flung himself into
an arm-chair.
"We might make a present of this to Eric Lane," he said grimly, "for
one of his plays. I've never before been up against a thing where
there was so little chance of compromise. Or, if I have, I've always
said, "There's only one possible thing to do," and I've tried to do it.
D'you remember Raney's cheerful prophecy my last night in Oxford?
Within ten years we should all have made such fools of ourselves
that we should wish we were dead. Nine years ago. Your
undergraduate is a sexless creature; we none of us thought then
that a mere woman could mess up our lives.... Well, I've had a run
for my money."
"There's only one possible thing to do here," said Loring
emphatically, holding him back as he tried to change the subject.
"You weren't such a sea-green incorruptible three years ago."
"When I made a fool of myself.... There's no comparison. I was
prepared to flout the Church and marry without dispensation; it
wouldn't have been a valid marriage in the eyes of the Church, and
the whole of Catholic society would have cut me. But I never offered
Sonia to change one faith for another or to pretend that I had."
Jack sprang violently out of his chair and strode to Loring's sofa,
standing over him with legs apart and arms akimbo.
"But if she'd insisted? You've got to be honest about this."
Loring looked up at the unwontedly white face and burning eyes
above him; then he looked away, whistled to himself and shrugged
his shoulders.
"I'd have done it," he answered.
"Well, that's how I feel now."
"And if Babs were married already?"
Jack turned away with a mirthless laugh.
"Damn you, Jim!" he cried.
"Not a bit of it! You would stop short of some things."
"But then I should be injuring another man."
"He might rejoice to be rid of her. And here you're injuring yourself."
There was a long silence, and Loring tried to ease it by filling two
tumblers with brandy and soda. Jack returned to his chair, drawing
furiously at his cigar and rapidly smoothing the back of his head.
"I'm not going to give her up," he said at length.
"You can at least go away and think it over. Don't meet her. Work as
you've never worked before. Mark you, the best thing is to go right
away. She won't help you a bit. Women are cruel and women are
selfish. If she's made up her mind that she can't marry you, she'll do
the next best thing for herself and take good care that she gets all
the time, attention, affection that she can out of you. And your
nerves will crack. If you live within telephoning or writing distance,
you're done for. I saw that for myself. When I got back to England a
few months ago, I only consented to stay in London when I heard
that Sonia had gone abroad. She'd have tried to get on some kind of
terms with me. If I'd still been smashed up, she'd have wanted to
have a look at her handiwork; if I'd completely recovered, she'd
want to see whether she still had the power to cast a spell over me.
And, if she felt she'd done me a great wrong, she'd have wanted to
vindicate herself. Women drown bad consciences in self-justification.
Will you go away?"
"I'll think about it. Jim, did you know that Babs took her religion so
seriously?"
"No, but then I don't know her at all well."
"I'm taking all she says at face-value, allowing for a little natural
rhetoric——"
"Well, I shouldn't—with any woman," Loring interrupted. "Look here,
Jack. You and Babs have got yourselves into a tangle. You can get
out of it by refusing to see her again—which you won't entertain; or
by perjuring yourself—which I hope and pray you won't do; or by
her climbing down a bit. One of you has to make the sacrifice; and
I'm inclined to think Solomon would have said that, if she's not
prepared to climb down—you're not asking her to do anything that
the Church forbids—she's not in earnest, she's not worth having.
Solomon would have said that, if she put you in the second place,
she didn't want you.... I wonder whether she does. For all I know
she's just made up her mind to add your scalp to her belt. Why the
deuce did she let you propose to her—you did actually, didn't you?—
if she meant to bring up this objection at the last minute?"
"It was only when I began to trot out the objections that she
recognized them. Jim, this is a question of instinct; whether a
woman's really in love with you or whether she's only pretending
may be felt, but no one can prove it. I take it—though I've had no
experience—that there's always a moment when a woman
surrenders, not only in words but with all her being. If you'd ever
broken in a horse, you'd know what I mean. It's like that with her."
Loring raised his eyebrows in passing surprise at the comparison no
less than at Jack's assurance.
"Well, I'm glad to hear it," he said without conviction. "If you're
right, she'll climb down. If she won't climb down, it means she
doesn't want you."
Jack pondered for a while without answering; then he looked at his
watch and jumped up with a murmur of dismay.
"Jim, d'you know it's just on two?"
"I wonder what time it was when I'd finished pouring out my
troubles to George that night! I hope it's going to be all right, Jack,
though a mixed marriage is a hideous gamble. And Babs is a fair
gamble in herself. And I wish I felt as certain of her as you do. Mind,
three months——"
"I don't commit myself to any specific period," Jack interrupted, as
they went into the hall. Barbara had the obstinate vanity of a spoilt
and wilful child; after refusing to yield on one point, she was capable
of sacrificing even her own happiness to sustain her refusal.
"If she holds out for three months," said Loring gravely, "it'll mean
that there's something in her life bigger than you."
Jack laughed and ran down the steps into Curzon Street. That she
wanted him was never in doubt since her first advances at the
Croxton ball.
"Good-night, Jim, and many thanks. You'll hear from me before I
die."
"Best of luck, old man," Loring called back, with such heartiness as
he could force into his voice.
CHAPTER TEN
VINDICATION

"Casilda: But it's so undignified—it's so degrading! A Grandee of


Spain turned into a public company! Such a thing was
never heard of!
Duke: My child, the Duke of Plaza-Toro does not follow fashions
—he leads them."
W. S. Gilbert: "The Gondoliers."

At the beginning of June Jack received a letter in a well-known


hand-writing from a familiar address.

"Pump Court, Temple, E. C.


"Have you ever done your duty by the University of Oxford? I
mean, have you ever taken your M. A.? I haven't, though I
ought to have years ago, and I'm sure you haven't, either. What
do you think about going up next Degree Day? I'll find out when
it is and order rooms and pack your suit-case and take it to
Paddington and buy a ticket and generally nursemaid you, as I
used to do in the days before you were a social success. I never
see you nowadays either on the Winchester train or in London;
they say that you have deserted your various clubs for the
gilded saloons of Mayfair. Let me know what's happened to you.
Ever yours,
Eric Lane."

Jack welcomed the diversion and wrote an enthusiastic acceptance.


For some months he had been too much occupied with Barbara to
spare regrets for Eric, but he was sorry to feel that they were
drifting apart. And the invitation gave him an excuse for spending a
long week-end out of London. Since the Ross House ball he had held
no communication with Barbara; since his unburdening of soul to
Jim Loring he had avoided every one who might ask him why he was
in hiding or report to her that he had been tracked down. Lady
Knightrider tried once or twice to secure him for dinner, but after a
few failures she accepted his plea of private work. And very soon the
inquisitive had other food for their curiosity. Arden concentrated his
attention on a possible match between Loring and Miss Hunter-
Oakleigh; Summertown threw needful light on a newly discovered
intrigue between Mrs. Welman and Sir Deryk Lancing; and
Deganway confined his energies to scandalous speculation about a
motor tour which Sir Adolf Erckmann was conducting in South
Europe with his sister, young Webster, Sonia Dainton and others of
less stable reputation.
"Delighted to come" Jack wrote to Eric. "Let me know the day and
the train; everything else I leave to you. It's ages since I saw you."
However far the gossip had spread, it was unlikely to have reached
Pump Court. But, if he felt secure from impertinent questions, Jack
would have paid a high price to meet any one who could give him
tidings of Barbara. Until six months before, he had been content
with his own company, but the daily close intimacy had set up an
itch for confidences. He wanted to know how she was and what she
was doing, whether she was missing him. In three weeks there had
been no sign of capitulation. And he depended for news of her on
chance paragraphs in the illustrated papers. Eric entered the train at
Paddington with the current number of the Catch, containing a full-
page photograph of her in eastern dress. There was also an Albert
Hall group in which she figured with half a dozen of the very people
who were not good enough for her. It was disappointing, and others
were disappointed too.
"I've no news for you, but I've been thinking over this business a
good deal," Loring had written two days earlier. "I can promise you a
very friendly reception from the family, if and when you do adjust
your differences with Barbara. My aunt, Kathleen Knightrider, is in
despair; she says you were the only person who ever had any
influence over Babs. Now that you've disappeared, she's picking up
with all the old lot. Crawleigh's afraid to protest, because he doesn't
want to precipitate a row. She comes of age in a few weeks, and
then no one can stop her...."
Jack was wondering with vague dissatisfaction how much more time
to give her for making a move, when his hand was forced. On
returning to London after the week-end, he lighted on a photograph
with the description, "Lady Barbara Neave, Who is Giving a
Sensational Ball. See p. 7." He turned to the page indicated and read
a gossipy half-column over the signature of "A Woman About Town."
"A mad world, my masters! But an amusing one, don't you think?
The oldsters say 'What next, what next?' but the youngsters always
have 'next' up their sleeves, and it's always better than the last.
Youth for ever! We had the Shakespeare Ball, and the Regency Ball
threw it into the shade. Then the Young Bachelors took the field—
and were driven from it (with full honours of war, and all thanks to
you, dear young bachelors, for a glorious evening) by The Rest. Mrs.
Leo Butler gave her Night in a Persian Garden, and Lady Hessler
retaliated with her Daybreak Dance, which started at four—it's still
going on, for all I know. A mad world! And the oldsters are being
attacked by the madness. These 'boy-and-girl' dances were
squeezing them into the cold, so they gave a ball to themselves
where only the married could hope for admission. 'The Hags' Hop,'
said irreverent Youth and bided its time for revenge. And now it is
coming—in Ascot Week. I rub my eyes, for the World and His Wife
will be at the Bodmin Lodge ball, as they have always been and as
their fathers and mothers were before them. Ascot Week? Bodmin
Lodge? One would as soon compete with the Royal Enclosure as
with the Bodmin Lodge ball. Yet—it is not the whisper of my faithful
little bird, but an engraved card—'Lady Barbara Neave, At Home.'
Fancy Dress, she says in one corner. At the Empire Hotel. And my
little bird tells me that it will rival and outshine the Jubilee Ball at
Devonshire House, when we were all tiny tots. If I know anything of
Lady Barbara, it will be the ball of the season. Youth for ever! But it
is a mad world. 'What are our girls coming to?' the oldsters ask. 'A
girl giving a ball!' 'And a wonderful ball it will be,' say I. Best wishes,
Lady Barbara!"
Jack assumed that Barbara must be organizing a ball for some
charity and thought no more of the announcement until he met
Loring at the County Club that night before dinner and was hurried
into the cool and deserted billiard-room.
"I say, have you seen about my precious cousin's latest freak?"
Loring began. "There's been the most colossal row!"
"I saw an announcement about a ball in one of the papers," Jack
answered.
"One of them! She's got it in every rag in the kingdom, morning and
evening, penny plain and twopence coloured. Barbara's thorough; I'll
say that for her. There's no going back."
He paused to fan himself and ring for a glass of sherry.
"What exactly was the row?" asked Jack.
"Well, you know, she's coming of age next week; and the Crawleighs
thought it was a good opportunity for working off old scores.
Nominally it was to be Barbara's party, but, when they started on
their list, she found that some of her more objectionable friends
were being cut out. I've no doubt Crawleigh did it as tactlessly as
possible, and Barbara took it as a challenge. Both sides fought the
question on principle, Crawleigh lost his temper on principle, Babs—
on principle—kept hers and said that, if her friends couldn't come to
the house, she'd give a party for them elsewhere."
"Characteristic," Jack murmured.
"Very. It sounded like an empty threat, but that little devil—she is a
little devil, Jack. If I were in your place, I'd no more think of
marrying her than of marrying a wild animal—well, she was going to
make this an Austerlitz or a Waterloo—no drawn battles for Babs;
she deliberately chose the night of the Bodmin Lodge ball and
invited everybody she'd ever heard of. I got my card within twenty
hours of the original row."
"Are you going?"
Loring laughed grimly and postponed answering the question.
"She's thorough!" he repeated. "I was still at breakfast, when she
came in; I gather she's doing a house-to-house canvass. 'Jim
darling, you're coming to my party, aren't you?' she said. 'I want it to
be a success.' 'I am not,' I said. 'I heard about the row and I think
you're behaving abominably.' 'It'll look bad, if my own—loving—
cousin stops away from my coming-of-age ball,' she said, her eyes
simply gleaming with devilry. 'Jim, if you all go against me, you'll
spoil my party, and father'll think he's won. Then I shall go away and
live by myself; and that would make a scandal, which you'd hate.' I
told her that she was a little devil—in case she didn't know it before.
Then she came behind my chair and put her arms round my neck;
and I called her a number of other things. Mark you, I dislike her; I
think she's intrinsically unsound, but I'm not in the least surprised
that you fell in love with her; she knows her job so well. She said
with a tear in her voice—and in her eyes; if you ever see her blinking
quickly, it's just to make herself cry.... All right, but you may as well
know these things before you marry her—she said, 'Jim darling, I
love you, but you do make it hard for us to be friends.' I told her
again that I wasn't coming to her ball. She sighed and began putting
on her gloves. At the door she turned round and said, 'Jim, you
know the little paragraph "Among those present ..."? Sometimes it's
"Among those who accepted invitations...." I'm going to have a
special paragraph—"Among those who refused invitations was the
Marquess Loring."' Then she became a hundred per cent. devil; she
was thoroughly enjoying herself. 'I won't let it stop at that! I'm going
to have this thing properly advertised. In the morning you'll see
wonderful descriptions and pictures of the ball—and that paragraph.
And the evening papers will comment on it—all the disreputable
ones; I'm the greatest friends with all the really disreputable papers.
And next day you'll see pictures of yourself in the disreputable daily
papers—"Lord Loring, Who is Reported to have said 'Damned if I
do!' when his cousin Lady Barbara Neave invited him to her ball." I
don't want to do it; it'll be a great deal of trouble; but this quarrel
has been forced on me, and, if you drive me to it, I shall go through
to the end.'" Loring sighed and fanned himself again. "You can't
argue with a woman, when she's like that. I said I'd come. My
mother and Amy came in, and she talked them over inside two
minutes—left them with the idea that the Crawleighs habitually tied
her to the bed-post and took a cat-o'-nine-tails to her (I wish they
would); then she went off to continue the house-to-house canvass.
It's heart-breaking!"
Jack listened with relief to the end of the tale. He had feared
something worse, but he would almost rather hear of Barbara's
misbehaving herself than not hear of her at all.
"There's no great harm done," he suggested.
"It's a toss-up. She can't blackmail everybody as she blackmailed
me. God knows! you can do most things in the year of grace 1914,
but an unmarried girl, with parents living, doesn't give balls on her
own. Any number of people have rather raised their eyebrows in
talking to me about it. If it's a success, there's about a six-to-four
odds-on chance that people will think it rather a joke, Barbara's
latest freak. But, if the thing's a failure, if any one starts a
movement against it, then Barbara will declare war on society. Don't
make any mistake; this isn't a fit of temper, it's a phase in her
natural development. I've seen it coming for a long time; she wants
to be in the position where a thing becomes right because she does
it; she's always disregarded the law and now she wants to make the
law. If the girl only had sisters! They might keep her in order.... You
know, there's a certain magnificence about her; she's surrounded
herself with every natural difficulty she could find—Bodmin Lodge;
she's raiding the Pebbleridge preserve in broad day-light, she's asked
Lady Pebbleridge to come on after her own party. Fancy dress—she's
set herself to rival the Devonshire House ball.... Jack, is that the girl
you want to marry? D'you imagine you'll ever be able to control her?
If you'd seen her standing by the door—it was Joan of Arc giving the
signal for battle."
"She can't blackmail me."
"What else is she doing now? She's blackmailing every one."
"Well, obviously I can't stop it until communications are re-
established."
"Then for the love of Heaven——No, I won't say that."
"Go on."
Loring looked at him closely and shrugged his shoulders.
"I wonder whether you're responsible for this new outbreak of hers?
This is the way she used to behave a year ago and for some time
before that. Then she dropped it. Now she's started again.... My
difficulty is that I don't know if she cares for you, if she's capable of
caring for any one. This may be her vindication—to shew that she
can do anything. Or she may be fond of you, she may feel she's lost
you. She's got the pride of a spoilt child. I think now, though I didn't
think it when you dined with me, that she'll never climb down
voluntarily. Possibly she's trying to forget you."
Jack roused with a jerk and then dropped his head between his
hands. He had never imagined that she was as lonely as he had
been.
"What d'you suggest, Jim?"
"I don't know. If she's gone Berserk on your account, I warn you
that she's in the mood to marry the first man in the street who's
kind to her. I felt like that after the break-up with Sonia. This ball is
only a symptom."
Loring ceased staring out of the window and glanced down at his
companion. Jack was still sitting with his fists pressed against his
temples, motionless and silent. A member flung open the door,
peered round the room and withdrew. As the clock chimed eight,
Loring looked at his watch, scribbled a telephone message and rang
for a page.
"You've shifted your ground since last we discussed this subject,"
Jack observed at length.
"I don't know...."
"Oh, yes. You want me to stop the Berserk phase. You think I'm at
the bottom of it? Well, I've got my share of pride or vanity or
whatever you like to call it. I've asked her once, and she turned me
down because I wasn't a Catholic. I'm not going to call daily, like a
milkman. Do you want me to go to her and say I'm a Catholic?"
Loring shook his head resolutely.
"I'm not going to take the responsibility of that."
"Responsibility be damned! You've taken the responsibility of saying
that I've brought about all this trouble and that, apparently, I'm the
only person who can stop it. You're not naturally sanctimonious, Jim,
but you've got a wonderful passion for not committing yourself. Will
you take the responsibility of not repeating our conversation to
anybody?"
Loring looked up with startled eyes, but the door slammed before he
could answer.
For perhaps three days the success of "The Children's Party," as
Barbara's costume ball came to be designated, hung in the balance.
Some of those who might not have objected to the ball itself disliked
Barbara's association with it and the salvo of press welcome which
advertised a private party as though it were a public charity. But,
while her critics murmured, Barbara was telephoning, writing and
driving round London to divide and win over the enemy, always
using the promises of her first victims to persuade the others. If
Lady Loring consented to come, who less exalted had the right to
raise her voice? Because it had never been done before, was that a
reason why it should not be done now? Novelty and organization
effected much, curiosity more; for Deganway, with his genius for
discovering other people's secrets, published abroad that there had
been civil war in Berkeley Square and that the ball was Barbara's
declaration of independence.
"The Crawleighs simply don't know what to do!" he exclaimed
gleefully on the fourth day of the campaign. "Positively everybody's
coming—except the Pebbleridges, of course; I saw Harriet
Pebbleridge yesterday, and she's perfectly furious."
"One was told that the parents were formally invited," said Val
Arden, "but it was made clear that they must comport themselves as
guests. Lady Lilith would receive alone. You are thinking of looking
in, George? Yes? One had some difficulty in deciding on a suitable
costume. A Modern Financier—after our good Sir Adolf Erckmann?
Were one's health more robust, one would be tempted to give a
party 'As Others See Us' and to insist that one's guests should each
personate a friend. Chastening, chastening! One would expose
oneself to indifferent parodies by Lady Maitland, whom one has had
the ill fortune to offend...."
For ten days the theatrical costumiers were kept busy. Historic
dresses were disinterred, chain armour was taken down from the
walls; and there was bitter rivalry between those who simultaneously
selected the same character. When every one had made his choice,
Barbara intimated that she would like photographs of all; and for
another week the studios were thronged. It was agreed at the
outset that no one would go to Bodmin Lodge and the Empire Hotel
on the same night; and, as the discussion of costumes ruled out
every other interest, Barbara found herself besieged with requests
for invitations; to be omitted was to be disgraced; and she had the
gratification of sending belated cards to more than one critic who in
the first excited hours had protested that brute force alone would
send her to the Empire Hotel under such auspices.
"It's her Austerlitz and my uncle's Waterloo," said Loring to Jack,
when they met two days before the ball. He was careful not to ask
what his friend had been doing since last they met. "It's her great
vindication; Crawleigh's asked to be allowed to come—to avoid a
scandal. She's stampeded London; everybody's accepted, and I
believe they'll all come for fear people will think they've not been
invited. It's as bad as that."
"There's one person who didn't accept," said Jack, with a crooked
smile.
"She invited you? Well, it would have been rather pointed to leave
you out. And she wouldn't be human, if she didn't want you to see
her in her triumph."
"I shall depend on you to tell me all about it," said Jack.
"Oh, I shall just shake hands with her and then go straight home to
bed."
As the day approached, the excitement redoubled until Barbara
herself began to fear an anticlimax. Only the need of registering her
triumph prevailed over physical exhaustion and sustained her in the
stifling hostility of Berkeley Square. Her father and mother drove
with her to the hotel and were formally announced. They would
have liked to loiter near her and to suggest that they were the hosts
and were indulging their daughter's whim, but Barbara urged them
into the ball-room and returned alone to her place at the head of the
stairs. There for an hour she received and tried to keep count of her
guests. Congratulations poured in upon her; she was complimented
on her enterprise, her looks, her dress.
"No one but you would have thought of doing such a thing," cried
Lady Maitland admiringly.
"Oh, I expect a great many people thought of it, but I was the only
one who did it," she answered, and the phrase comforted her.
Bobbie Pentyre, who had been sent to spy out the nakedness of
Bodmin Lodge, arrived late with the report that it was almost
deserted and that Lady Pebbleridge, black with rage, had announced
that she would never give another ball, if people deserted her at the
last moment like this.
"She said that your leavings weren't good enough for her," he
added. "I thought that was rather rude to the people who had toiled
all the way out to Knightsbridge, so I handed it on to any one who I
thought would be interested, and that emptied the house quicker
than ever."
"I'm sorry if her party's a failure," said Barbara, "but—if people
prefer coming to me...?"
She walked with him to the door of the ball-room. The crowd was
too great for dancing, and her guests were parading four abreast,
until she should give the signal and march at their head to supper.
Inside the doorway her father was standing in the robes of John,
first baron, Lord High Chancellor of England. She went up to him
and slipped her arm through his.
"Am I forgiven, father?" she asked with a smile. "You know how I
hate people to be angry with me."
"It's all very well to ask for forgiveness when you've got your own
way," said Lord Crawleigh with a vengeful tug at his blonde
moustache.
"But, if I want my own way, haven't I inherited that from you?" she
asked gently. "It's no good trying to bully me, because I won't be
bullied. You admit now that there was nothing very sinful in this
ball?"
"I didn't say it was sinful," Lord Crawleigh returned sharply. "I said
that such a thing had never been done before. There was no
precedent."
"But every one will do it now!" she cried proudly. "That you won't
see, father; I establish precedents."
"I don't see it and I won't see it."
Barbara sighed and looked down on him with half-closed eyes and
drooping mouth.
"Don't you like to see me happy, father? Won't you kiss me and say
I'm forgiven?"
Lord Crawleigh stiffened and drew away, as Loring came up from
behind, pushing open his visor.
"Well, I've kept my promise, Barbara," he began coldly. "The
prodigal daughter scene didn't go with much of a swing, I thought."
"The prodigal son never promised not to be prodigal again. He was
tired and hungry, poor boy, and nobody cared for him. I'm tired, too;
I've been standing ever since a quarter past ten. And I'm hungry.
Would you like to take me down to supper?"
Her pleading voice seemed to bring to the surface everything that
was hard in Loring's kindly nature.
"Not in the least, thank you, Barbara," he said, "after the way you
blackmailed me into coming here. I've kept my promise and I should
be half-way home by now if I hadn't run into Violet Hunter-Oakleigh.
I'm having supper with her."
"Ah, I invited her specially to please you. Every one says you're in
love with each other. She's a dear girl, but I think she's got fatty
degeneration of the conscience." She looked thoughtfully at her
cousin, and her face lit up with a mischievous smile. "Jim, darling! I
only said that to see if it would make you angry. So you are in love
with her? Well, I'm really very fond of Violet, even if she does cross
herself when I come into the room.... If you knew how absurd it was
Welcome to our website – the ideal destination for book lovers and
knowledge seekers. With a mission to inspire endlessly, we offer a
vast collection of books, ranging from classic literary works to
specialized publications, self-development books, and children's
literature. Each book is a new journey of discovery, expanding
knowledge and enriching the soul of the reade

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.

Let us accompany you on the journey of exploring knowledge and


personal growth!

textbookfull.com

You might also like