Saving Time and Money Using SAS 1st Edition Philip R. Holland instant download
Saving Time and Money Using SAS 1st Edition Philip R. Holland instant download
https://ebookfinal.com/download/saving-time-and-money-using-
sas-1st-edition-philip-r-holland/
https://ebookfinal.com/download/sas-stored-processes-1st-ed-edition-
philip-mason/
https://ebookfinal.com/download/using-sas-for-data-management-
statistical-analysis-and-graphics-1st-edition-ken-kleinman/
https://ebookfinal.com/download/a-handbook-of-statistical-analyses-
using-sas-third-edition-der/
https://ebookfinal.com/download/more-java-pitfalls-50-new-time-saving-
solutions-and-workarounds-1st-edition-michael-c-daconta/
Logistic Regression Using the SAS System Theory and
Application 1st Edition Paul D. Allison
https://ebookfinal.com/download/logistic-regression-using-the-sas-
system-theory-and-application-1st-edition-paul-d-allison/
PROC SQL Beyond the Basics Using SAS 2nd edition Edition
Lafler
https://ebookfinal.com/download/proc-sql-beyond-the-basics-using-
sas-2nd-edition-edition-lafler/
https://ebookfinal.com/download/sas-and-r-data-management-statistical-
analysis-and-graphics-1st-edition-ken-kleinman/
https://ebookfinal.com/download/analysis-of-clinical-trials-using-sas-
a-practical-guide-1st-edition-alex-dmitrienko/
https://ebookfinal.com/download/survival-analysis-using-sas-a-
practical-guide-second-edition-paul-d-allison/
Saving Time and Money Using SAS 1st Edition Philip R.
Holland Digital Instant Download
Author(s): Philip R. Holland
ISBN(s): 9781590475744, 1590475747
Edition: 1st
File Details: PDF, 1.73 MB
Year: 2007
Language: english
Praise from the Experts
“At first glance I thought that this might be just another book of SAS coding examples.
Not so! A closer inspection shows that this book is all about the problems and issues,
some big and some small, that are sure to cause heartburn when they are encountered. It
provides both standard and nonstandard solutions to a wide variety of production
situations. Before you pull your hair out, grab this book…it will save you both time and
money.”
Art Carpenter
California Occidental Consultants
“Phil Holland’s unique, valuable book covers not only fundamental concerns common to
all programmers (such as disk space usage and processing run times), but also their
potential needs (for example, accessing SAS data without SAS code and transporting data
between SAS and databases without using SAS/ACCESS). There is wise advice to enable
you to get the most out of your hardware when using SAS. But most remarkable are the
creative ideas and ingenious methods of this versatile author, eminently skilled in both
SAS and other software, that can help you to get the most out of your existing SAS
software by integrating it with other software that you might already have. This book is a
resource without equal.”
“His fully worked code examples and detailed explanations should enable readers not
only to create their own programs when using these techniques but also to understand
how and why their programs work. Use this guide to explore the capabilities of the SAS
software you license, and you will surely enhance the value of those assets.”
Steve Morton
Principal Consultant
Applied System Knowledge Ltd.
“I've enjoyed reading Phil’s book. It has a good mix of text and illustrations, making the
book readable and instantly usable. Phil’s sound, experienced advice is all very practical,
and there’s something in the book for everyone from SAS novices to metadata and macro
masters. My copy of the book is now well-thumbed and stays within easy reach.”
Andrew Ratcliffe
RTSL.eu (“Solutions in SAS”)
“I like Phil Holland’s new book because it is quick and easy to use. You can dive in and
find useful examples of code that you can incorporate immediately to craft your own
solutions. With the combination of this functionality and the many step-by-step
instructions and screen shots, this book will pay for itself in the amount of time it saves. I
also really like the mix of topics and SAS products used, which goes where the topic
leads and incorporates everything from SAS Enterprise Guide to DB2, and Base SAS to
DB2 on z/OS. I highly recommend this book, which I think will be used by SAS
programmers very frequently as they go about their day-to-day programming tasks.”
Phil Mason
Independent SAS Consultant and Author
Saving Time
and Money
Using SAS
®
Philip R. Holland
The correct bibliographic citation for this manual is as follows: Holland, Philip R. 2007. Saving Time and
Money Using SAS®. Cary, NC: SAS Institute Inc.
ISBN 978-1-59047-574-4
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.
U.S. Government Restricted Rights Notice: Use, duplication, or disclosure of this software and related
documentation by the U.S. government is subject to the Agreement with SAS Institute and the restrictions set
forth in FAR 52.227-19, Commercial Computer Software-Restricted Rights (June 1987).
SAS Institute Inc., SAS Campus Drive, Cary, North Carolina 27513.
SAS® Publishing provides a complete selection of books and electronic products to help customers use SAS
software to its fullest potential. For more information about our e-books, e-learning products, CDs, and hard-
copy books, visit the SAS Publishing Web site at support.sas.com/pubs or call 1-800-727-3228.
®
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 registered trademarks or trademarks of their respective companies.
Contents
Acknowledgments ix
Introduction xi
Index 213
viii Contents
Acknowledgments
My wife, Angela, and my three daughters, Sarah, Rachel, and Jessica, for their
tolerance and encouragement.
Bruce Bovill, formerly of SAS UK, for introducing me to SAS software while
we were both working at the University of London Computer Centre.
Jeremy Rankcom, SAS Australia (formerly of SAS UK), for his advice on SAS
Enterprise Guide software.
LeRoy Bessler, Assurant Health, for his advice on SAS/GRAPH software.
Keefe Hayes, SAS Institute, for his invaluable assistance in running mainframe
SAS with DB2.
Julie Platt and Donna Faircloth, SAS Publishing, for encouraging and supporting
my writing, and the editing and production teams for their work on my final
manuscript.
VIEWS committee members, for giving me the chance to present my ideas at
VIEWS conferences and in VIEWS News.
x
Introduction
When selecting a technical book for myself I tend to choose one where there are lots of
examples and sample code snippets that I can use and adapt for my own development
projects. I wanted to write a book that I could use for reference myself, so I have tried to
make sure there are code snippets wherever possible.
Instead of licensing additional SAS components at your site, I believe you will continue
to use SAS software for longer if you have a deeper knowledge of your existing
components. Most of the recently introduced SAS components have functionality that
can be provided using your existing components. Introducing new components may save
maintenance costs, but at the expense of valuable programming expertise.
As a former performance analyst, I still look at any programs I write to see if I can make
them smaller, quicker, and/or easier to maintain. Resources may appear to be limitless,
but there will inevitably come a day when a program needs more, e.g., WORK disk
space, memory, processing power, faster disk access, etc. Looking at your existing
programs will move that day further into the future, saving money on resources and
maintenance. I have spent the majority of my time as an independent consultant assisting
my clients to make better use of their existing components by demonstrating new
features, improving their coding efficiency, and helping them to develop applications
that are easier to maintain. I want this book to continue this work.
Some of the chapters look at the way information stored in SAS data sets can be viewed
using applications other than SAS, e.g., with the SAS ODBC driver, with SAS
Integration Technologies, and with graphical report files from SAS/GRAPH programs.
Other chapters concentrate on techniques to optimize specific tasks, e.g., merging data
from SAS data sets and external database tables, and the use of disk space.
The remaining chapters demonstrate how to accomplish a particular task without having
to license a new SAS component, e.g., reading data from and writing data to databases
and spreadsheets without the need to license SAS/ACCESS software, and developing
SAS programs on a PC without having Base SAS software installed there.
During the research I carried out while writing this book I greatly increased my
knowledge of SAS. I hope that by reading this book and experimenting with the
examples, you can increase your understanding of SAS software too, and that the book
will help you to get full value out of the SAS components you are licensing.
The following sections provide brief overviews of the chapters in this book.
xii Introduction
Chapter 1: Accessing SAS Data without Using SAS Code (Windows only)
Recent developments in SAS for Windows have provided users with routes to SAS data
and applications without having to write SAS code using SAS. This chapter describes
three very different interfaces to SAS: ODBC, DDE, and SAS Integration Technologies,
which could place SAS at the center of any application development for the Windows
platform. I have tried to select a diverse range of applications other than SAS to
demonstrate the scope of this integration.
Chapter 2: Out of Space with SAS Software? (z/OS, with Windows and UNIX
Examples)
When running SAS programs on a PC, users need to worry only about how much free
space there is on the PC they are using. However, when SAS programs are run under
z/OS on a mainframe machine, the correct use of disk space for WORK and permanent
SAS data libraries is more complex, but essential to their smooth running. This chapter
describes various methods of exploiting the space available on a mainframe, but also
considers how some of these methods can be applied to other platforms such as Windows
and UNIX.
Now there are more requirements for storing graphical reports in files so that they can be
distributed around an organization as individual pictures, or as part of illustrated reports
from word processors or on Web pages, as universal access to SAS software installations
is no longer as common. This chapter discusses a number of methods of producing
portable graphic report formats using SAS/GRAPH, none of which require SAS/GRAPH
software to be installed on the recipient’s system.
Introduction xiii
Final Thoughts
It has taken a very long time to write this book. This has, in part, been due to project
commitments to my clients, but mostly due to my unwillingness to let an interesting
topic go. There are still a number of topics in most of the chapters in this book that have
not been fully explored. However, because fully exploring all the interesting topics
would have meant never finishing the book, I have reluctantly decided to call time on my
writing efforts.
I am sure that you will have questions that are not fully answered, or that are not even
covered in this book. Therefore, as I have not been discouraged from writing more, I
would welcome comments and suggestions for topics and ideas for a future book,
particularly if you enjoy reading this book or, at least, find this book helpful. My hope is
that this book will encourage you to continue to use SAS coding to develop your
business processes, rather than relying on black box applications.
xiv
C h a p t e r 1
Accessing SAS Data without Using SAS Code
1.1 Abstract 2
1.2 Introduction 2
1.3 ODBC 2
1.3.1 Setting Up a SAS Server for the SAS ODBC Driver 3
1.3.2 Microsoft Access 2000 8
1.3.3 Microsoft Excel 2000 17
1.3.4 Visual Basic 6.0 22
1.3.5 Lotus Approach Version 9 26
1.3.6 OpenOffice.org 2.1 27
1.4 Dynamic Data Exchange 43
1.4.1 Visual Basic 6.0 45
1.5 SAS Integration Technologies 45
1.5.1 Visual Basic 6.0 46
1.5.2 LotusScript Version 9 54
1.5.3 OpenOffice.org 2.1 55
2 Saving Time and Money Using SAS
1.6 Conclusions 59
1.7 Recommended Reading 59
1.1 Abstract
Recent developments in SAS for Windows have provided users with routes to SAS data
and applications without having to write SAS code using SAS. This chapter describes
three examples of these interfaces: ODBC, DDE, and SAS Integration Technologies,
which could place SAS at the center of any application development for the Windows
platform.
1.2 Introduction
In the past, SAS has been used to read data from other Windows data sources,
e.g., Microsoft Access tables using SAS/ACCESS for ODBC, and to control other
external Windows applications using Dynamic Data Exchange (DDE). SAS is, of course,
available as a Windows application itself and can now be used as an external application
for those other Windows applications. This role reversal expands the range of uses for
SAS in the Windows environment in areas where SAS has not been traditionally the first-
choice application. The ability of SAS to read and maintain data from a wide range of
sources can now be used throughout the Windows arena.
Further discussion on SAS Enterprise Guide, a thin-client application for the Windows
client platform that uses SAS Integration Technologies to communicate with SAS
installations on remote servers, can be found in Chapter 6 “Developing SAS Applications
Using SAS Enterprise Guide.”
1.3 ODBC
The SAS ODBC driver has been supplied with Base SAS for Windows since SAS 6.10 to
provide an interface to SAS data libraries for other Windows applications. Each
application has its own particular uses and limitations for the ODBC interface. This
section describes the practicalities of using the SAS ODBC driver 9.1 with Microsoft
Chapter 1: Accessing SAS Data without Using SAS Code 3
Access 2000, Microsoft Excel 2000, Visual Basic 6.0, Lotus Approach Version 9, and
OpenOffice.org 2.1. It should be noted here that StarOffice 8 is functionally equivalent to
OpenOffice.org 2.1, and so all future references to OpenOffice.org 2.1 can be assumed to
include StarOffice 8.
Single ODBC access to SAS data on the same machine that the user accesses uses the
ODBCSERV procedure, which is supplied with Base SAS, running in a single SAS
region. Multiple ODBC access to SAS data, or ODBC access to a remote machine,
requires SAS/SHARE, and possibly SAS/SHARE*NET as well.
Other features of the ODBC data source definitions include the following:
The SAS ODBC server must be added to the SERVICES file (found in
C:\WINDOWS or C:\WINNT\SYSTEM32\DRIVERS\ETC, depending on the
Windows platform used) prior to using the ODBC Administrator, as the SAS
ODBC driver uses a TCP/IP connection to communicate with the SAS ODBC
server. The additional lines should look like the following line, with a unique
number greater than 1024 and the columns separated by tab characters:
sasuser32 7001/tcp #SAS OBDC Server
Command line options when invoking SAS (e.g., -AUTOEXEC, -NOLOGO,
etc.).
SAS data library names used for importing into external Windows applications.
Changes to the library references in a running SAS ODBC server can be made
for subsequent ODBC connections.
Library references within SAS 8 are limited to eight characters, which are not
case sensitive. The names cannot include blanks or punctuation, must start with
an alphabetic or underscore character, and the second and subsequent characters
may be numeric characters.
Discovering Diverse Content Through
Random Scribd Documents
goal. What’s your line?”
“Line? Oh, goal, too, I think. Crowell seemed to think I’d better try
that.”
“Hah! Me hated rival!” exclaimed the other beamingly. “‘Tucker
versus Creel, or The Struggle for Goal!’ Sounds exciting, doesn’t it?
Know what Crowell’s going to spring on us in a minute?”
Toby shook his head, smiling. He found Creel amusing.
“Well, he’s going to inform us that to-morrow afternoon we’re
expected to go down and build the rink. Last winter I was horribly ill
that day.” Sid Creel winked knowingly. “Had a beastly cold. If I was
you I’d sneeze a few times and blow my nose. That gives you a
chance of coming down with grippe before to-morrow.”
“Oh, I guess I shan’t mind helping,” laughed Toby. “How do we do
it?”
“You lug a lot of planks from under the grand-stand and nail ’em
together and drive posts into the ground, which is always frozen
solid, and then you shovel dirt up outside the planks. It’s all right if
you’re strong and healthy, but to one of my weak constitution it’s
fierce. After you get the dirt shoveled up—Did you ever shovel
frozen dirt? No? Well, it’s no fun. Last year they had to pick it first.
You’d think they’d make the rink before it gets cold, wouldn’t you?”
“Why, yes, I should,” agreed Toby. “Why don’t they?”
Creel shook his head sadly. “No one knows. It’s a sort of—sort of
impenetrable mystery. I guess it just isn’t done. Anyway, after you
get the dirt piled up outside the planks you hitch a hose to the
hydrant and turn the water on and wait for it to freeze.”
“Well, that part sounds easy,” said Toby.
“It may sound easy, but it isn’t,” responded the other boy
lugubriously. “Because you have to stand around and watch the
bank you’ve made. You see, the dirt’s mostly in chunks and of
course the water oozes out under the bottom of the planks and you
have to yell for help and shovel more dirt on and puddle it down
with your feet. And while you’re choking up one leak about thirty-
eleven others start. Oh, it’s a picnic—not!”
“But look here,” objected Toby, puzzled. “If you were sick last time
how do you know so much about it?”
Creel gazed sadly across the cage and made no answer for a
moment. Then he sighed deeply, and: “They came up to the room
and pulled me out,” he answered sadly. “Unfeeling brutes!”
Toby’s laughter was interrupted by Captain Crowell, who called for
attention. “There won’t be any practice this afternoon, fellows,”
announced Crowell. “And I don’t believe there will be any more until
we get the rink ready. We’re going to do that to-morrow afternoon.
Every one be on hand as near three as possible so we can get the
work done before dark. It doesn’t take long if we all show up. If any
of you fellows develop colds between now and then you needn’t
report again. We don’t want fellows on the teams who are as
delicate as that.” Toby thought Crowell’s gaze dwelt a moment on
Sid Creel’s innocent countenance. “A lot of you are new to the game
and I want to tell you right now, so there won’t be any kick coming
later, that if you put your names down for hockey you’ll have to
show up regularly or you’ll be dropped. We mean to turn out the
best seven this year that has ever played for Yardley, and if we are
to do that you’ll simply have to make up your minds to come out
regularly for practice and work as hard as you know how. That
means the second team candidates as well as the first. As soon as
we get ice the class teams will be made up, and any fellow that
shows good hockey with his class team will have a chance to show
what he can do on the school squad. You fellows who haven’t put
your names down will please do it before you leave. Halliday is
manager and he will take them. I guess that’s about all, fellows.
Only if you really want to make the teams, show it by doing your
best. Listen to what is told you and do your best right from the start.
We play our first outside game in a little more than a week, so, you
see, there isn’t much time to get together. I hope you’ll all pull hard
for a victory over Broadwood this year. We owe her two lickings and
we might as well start out this winter and give her the first one.
Don’t forget to-morrow afternoon at three sharp, fellows.”
Toby gave his name to Ted Halliday and found Arnold waiting for
him at the door of the cage in conversation with Frank Lamson.
Frank hailed Toby jovially. “Going to be a hockey star, Toby?” he
asked. “Well, we need a few earnest youths like you. Have a good
time on your vacation? You and Arn must have been mighty busy, I
guess. I called up twice on the ’phone and each time they told me
that you were out doing the town. How’s Greenhaven? Say, that
must be a dreary hole in winter, isn’t it? Is your sister well?”
“Fine, thanks. Going back, Arn?”
“N—no, I guess I’ll loaf around here awhile. See you at supper,
Toby.”
Arnold and Frank parted from him on the steps and Toby made his
way across the yard, past the sun-dial at the meeting of the paths in
front of Dudley and, finally, through the colonnade that joined
Oxford and Whitson and so around to the entrance of his dormitory.
As he went he puzzled again over the friendship that existed
between Arnold and Frank. Personally, he thought Frank Lamson the
most unlikeable fellow he had ever met. Perhaps, though, he
reflected, Frank possessed some qualities apparent to Arnold and
not to him. The two had been friends, though never exactly chums,
for several years, while Toby and Arnold had known each other only
since the preceding June. Probably when you had known a fellow
three or four years you got to like him in spite of his—his faults.
Toby almost said “meannesses,” but charitably substituted the other
word. Of course, there was no reason why Arn shouldn’t go with
Frank if he wished to, only—well, for a fortnight or so preceding
Christmas recess Arn had spent a good deal more time with Frank
than he had with Toby, and the latter wondered, as he climbed the
twilight stairways to his room, whether Arn was beginning to get
tired of him. He was very fond of Arnold and the contingency made
him feel rather sad and lonely.
He shed his sweater and cap and seated himself at the deal table,
which just now was a study desk and not an ironing-board, and
drew a book toward him. But his thoughts refused to interest
themselves in Cæsar and he was soon staring out the window and
drumming a slow tattoo on his teeth with the rubber tip of his pencil.
Perhaps it was only imagination, but, looking back on the last two
weeks of vacation, it seemed to him now that Arnold had been less
chummy, that something of the wonderful friendship of the summer
had been lacking. Of course, Arnold had been perfectly splendid to
him, had given him an awfully good time in New York and had
probably given up other good times in order to spend that week-end
with him at Greenhaven. And there were the gold cuff-links, too.
Toby arose and got them from a hidden corner of the top drawer in
the bureau and took them back to the window and looked at them
admiringly and even curiously, as though striving to draw
reassurance from them. In the end he laid them on the table and
sank back into his chair. They were handsome and costly, but they
meant little, after all. Arnold had heaps of money to spend; as much,
perhaps, as any fellow in school. Doubtless he would have given him
something equally as fine had their friendship been far less close.
Why, for all he knew, Arn might have given just such a Christmas
present to Frank Lamson! A wave of something very much like
jealousy went over him and he scowled at the cuff-links quite
ferociously and pushed them distastefully aside. Just that afternoon
he had noticed a new pin in Frank’s tie, a moonstone, he thought it
was, held in a gold claw. It was just the sort of a thing that Arnold
would select. In fact, now that he thought of it, Arnold had a pin
very much like it! There was no doubt in the world that that
moonstone scarf-pin had been Arnold’s Christmas present to Frank,
and Toby suddenly felt very, very miserable.
The daylight faded and the words on the pages of the open book
were no longer legible, although that was a matter of indifference to
Toby since he wasn’t looking at them. What Toby was doing was
something far less commendable and useful than studying his Latin.
He was imagining all sorts of uncharitable things about Arnold and
trying to recall all the faults that Frank Lamson had ever exhibited
and making himself extremely miserable. And finally he arose with a
shrug of his broad shoulders and lighted the gas and pulled down
the shade. After that he scooped the cuff-links up contemptuously
and tossed them back into the bureau drawer.
“Let him,” he muttered. “Who cares, anyway? He’s not the only
fellow in school! I guess I can find some one else to chum with if I
make up my mind to do it.” He closed the bureau drawer with a
bang. “He won’t ever see me wearing those things. Maybe he
bought them for Frank and Frank didn’t like them, or something! He
can have ’em if he wants ’em. I’m sure I don’t!”
After that, since there were no clothes to be cleaned or pressed
this afternoon, he resolutely tried to study, and really did manage to
imbibe a certain amount of knowledge by the time the supper hour
came. He and Arnold had managed to secure seats at the same
table in commons (Yardley Hall, founded by an English schoolmaster,
still retained a few English terms); but they had not been able to get
seats together, and save on infrequent occasions when some boy’s
absence made a rearrangement possible they were divided by the
width of the table. Supper was usually a jolly and enjoyable meal for
Toby, as it was for most others, but to-night he was plainly out of
sorts, and when Arnold came in a trifle late and sank into his chair
looking flushed and happy, he became more morose than ever.
Arnold’s greeting was answered coldly, but Arnold failed to notice the
fact and went to work with a good will on the cold meat and baked
potatoes which formed the principal course. There was a good deal
of talk and laughter that evening amongst the ten occupants of
Table 14, and consequently Toby’s silence and gloom went unnoted
by any one until supper was almost over. Then Arnold, appealing to
Toby for confirmation of a story he had been narrating, was met
with such a chilling response that he paused open-mouthed and
stared across at his friend.
“Well, what’s wrong with you, T. Tucker?” he asked wonderingly.
“Nothing,” replied Toby, very haughtily.
Several other fellows turned to observe him and the younger of
the two Curran brothers laughed and said: “Oh, Tucker’s peeved
because trade’s fallen off. Every fellow had his trousers pressed at
home, I guess.”
Jack Curran frowned at his brother. “Cut that out, Will,” he
growled. “Try to act like a gentleman even if it hurts you. I say, Glad,
I found that book I told you about. If you want it, come around, will
you?”
Gladwin replied and conversation became general again. But now
and then Arnold cast a puzzled glance across at Toby’s lowered head
and wondered what had happened to the usually even-tempered
chum. By that time Toby was angry with himself for having shown
his feelings. He wouldn’t have had the other fellows at the table
guess the reason for his glumness for anything in the world. Nor did
he want Arnold to guess it. He had meant to treat the latter with
chill indifference; he hadn’t intended to act like a sulky kid. When he
left the table Arnold followed him to join him on the way out as was
usual, but to-night Toby skirted another table, reached the corridor
in advance of Arnold and, without a glance, pushed through the
swinging door to the stairway and mounted swiftly to his room. Once
there he paused on the threshold and listened. If he had thought to
hear Arnold’s footsteps in pursuit he was mistaken, for Arnold,
viewing his friend’s singular behavior, had merely shrugged his
shoulders a bit irritably and let him go.
In his room again, Toby turned up the light, which had been
reduced to a mere pin-point of flame, dragged the chair to the table
again and, settling his head in his hands, determinedly attacked his
Latin. But for a long while, although he kept his eyes on the page,
his ears were strained for the sound of Arnold’s footsteps. Other
footsteps echoed down the corridor and several doors opened and
shut. Roy Stillwell, across the corridor, was singing a football song,
keeping time with his heels on the floor:
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.
ebookfinal.com