Learning SAS by Example

Book description

Learn to program SAS by example! If you like learning by example, then Learning SAS by Example: A Programmer's Guide makes it easy to learn SAS programming. In an instructive and conversational tone, author Ron Cody clearly explains each programming technique and then illustrates it with one or more real-life examples, followed by a detailed description of how the program works. The text is divided into four major sections: Getting Started; DATA Step Processing; Presenting and Summarizing Your Data; and Advanced Topics. Subjects addressed include: Reading data from external sources Learning details of DATA step programming Subsetting and combining SAS data sets Understanding SAS functions and working with arrays Creating reports with PROC REPORT and PROC TABULATE Learning to use the SAS Output Delivery System Getting started with the SAS macro language Introducing PROC SQL You can test your knowledge and hone your skills by solving the problems at the end of each chapter. (Solutions to odd-numbered problems are located at the back of this book. Solutions to all problems are available to instructors by visiting Ron Cody's author page for details.) This book is intended for beginners and intermediate users. Readers should know how to enter and submit a SAS program from their operating system. This book is part of the SAS Press program.

Table of contents

  1. Copyright
  2. Contents
    1. List of Programs
    2. Preface
    3. Acknowledgments
    4. Part 1 Getting Started
    5. Chapter 1 What Is SAS?
      1. 1.1 Introduction
      2. 1.2 Getting Data into SAS
      3. 1.3 A Sample SAS Program
      4. 1.4 SAS Names
      5. 1.5 SAS Data Sets and SAS Data Types
      6. 1.6 The SAS Display Manager and SAS Enterprise Guide
      7. 1.7 Problems
    6. Chapter 2 Writing Your First SAS Program
      1. 2.1 A Simple Program to Read Raw Data and Produce a Report
      2. 2.2 Enhancing the Program
      3. 2.3 More on Comment Statements
      4. 2.4 How SAS Works (a Look Inside the “Black Box”)
      5. 2.5 Problems
    7. Part 2 DATA Step Processing
    8. Chapter 3 Reading Raw Data from External Files
      1. 3.1 Introduction
      2. 3.2 Reading Data Values Separated by Blanks
      3. 3.3 Specifying Missing Values with List Input
      4. 3.4 Reading Data Values Separated by Commas (CSV Files)
      5. 3.5 Using an Alternative Method to Specify an External File
      6. 3.6 Reading Data Values Separated by Delimiters Other Than Blanks or Commas
      7. 3.7 Placing Data Lines Directly in Your Program (the DATALINES Statement)
      8. 3.8 Specifying INFILE Options with the DATALINES Statement
      9. 3.9 Reading Raw Data from Fixed Columns—Method 1: Column Input
      10. 3.10 Reading Raw Data from Fixed Columns—Method 2: Formatted Input
      11. 3.11 Using a FORMAT Statement in a DATA Step versus in a Procedure
      12. 3.12 Using Informats with List Input
      13. 3.13 Supplying an INFORMAT Statement with List Input
      14. 3.14 Using List Input with Embedded Delimiters
      15. 3.15 Problems
    9. Chapter 4 Creating Permanent SAS Data Sets
      1. 4.1 Introduction
      2. 4.2 SAS Libraries—The LIBNAME Statement
      3. 4.3 Why Create Permanent SAS Data Sets?
      4. 4.4 Examining the Descriptor Portion of a SAS Data Set Using PROC CONTENTS
      5. 4.5 Listing All the SAS Data Sets in a SAS Library Using PROC CONTENTS
      6. 4.6 Viewing the Descriptor Portion of a SAS Data Set Using the SAS Explorer
      7. 4.7 Viewing the Data Portion of a SAS Data Set Using PROC PRINT
      8. 4.8 Viewing the Data Portion of a SAS Data Set Using the SAS VIEWTABLE Window
      9. 4.9 Using a SAS Data Set as Input to a DATA Step
      10. 4.10 DATA _NULL_: A Data Set That Isn’t
      11. 4.11 Problems
    10. Chapter 5 Creating Formats and Labels
      1. 5.1 Adding Labels to Your Variables
      2. 5.2 Using Formats to Enhance Your Output
      3. 5.3 Regrouping Values Using Formats
      4. 5.4 More on Format Ranges
      5. 5.5 Storing Your Formats in a Format Library
      6. 5.6 Permanent Data Set Attributes
      7. 5.7 Accessing a Permanent SAS Data Set with User-Defined Formats
      8. 5.8 Displaying Your Format Definitions
      9. 5.9 Problems
    11. Chapter 6 Reading and Writing Data from an Excel Spreadsheet
      1. 6.1 Introduction
      2. 6.2 Using the Import Wizard to Convert a Spreadsheet to a SAS Data Set
      3. 6.3 Creating an Excel Spreadsheet from a SAS Data Set
      4. 6.4 Using an Engine to Read an Excel Spreadsheet
      5. 6.5 Using the SAS Output Delivery System to Convert a SAS Data Set to an Excel Spreadsheet
      6. 6.6 Problems
    12. Chapter 7 Performing Conditional Processing
      1. 7.1 Introduction
      2. 7.2 The IF and ELSE IF Statements
      3. 7.3 The Subsetting IF Statement
      4. 7.4 The IN Operator
      5. 7.5 Using a SELECT Statement for Logical Tests
      6. 7.6 Using Boolean Logic (AND, OR, and NOT Operators)
      7. 7.7 A Caution When Using Multiple OR Operators
      8. 7.8 The WHERE Statement
      9. 7.9 Some Useful WHERE Operators
      10. 7.10 Problems
    13. Chapter 8 Performing Iterative Processing: Looping
      1. 8.1 Introduction
      2. 8.2 DO Groups
      3. 8.3 The Sum Statement
      4. 8.4 The Iterative DO Loop
      5. 8.5 Other Forms of an Iterative DO Loop
      6. 8.6 DO WHILE and DO UNTIL Statements
      7. 8.7 A Caution When Using DO UNTIL Statements
      8. 8.8 LEAVE and CONTINUE Statements
      9. 8.9 Problems
    14. Chapter 9 Working with Dates
      1. 9.1 Introduction
      2. 9.2 How SAS Stores Dates
      3. 9.3 Reading Date Values from Raw Data
      4. 9.4 Computing the Number of Years between Two Dates
      5. 9.5 Demonstrating a Date Constant
      6. 9.6 Computing the Current Date
      7. 9.7 Extracting the Day of the Week, Day of the Month, Month, and Year from a SAS Date
      8. 9.8 Creating a SAS Date from Month, Day, and Year Values
      9. 9.9 Substituting the 15th of the Month when the Day Value Is Missing
      10. 9.10 Using Date Interval Functions
      11. 9.11 Problems
    15. Chapter 10 Subsetting and Combining SAS Data Sets
      1. 10.1 Introduction
      2. 10.2 Subsetting a SAS Data Set
      3. 10.3 Creating More Than One Subset Data Set in One DATA Step
      4. 10.4 Adding Observations to a SAS Data Set
      5. 10.5 Interleaving Data Sets
      6. 10.6 Combining Detail and Summary Data
      7. 10.7 Merging Two Data Sets
      8. 10.8 Omitting the BY Statement in a Merge
      9. 10.9 Controlling Observations in a Merged Data Set
      10. 10.10 More Uses for IN= Variables
      11. 10.11 When Does a DATA Step End?
      12. 10.12 Merging Two Data Sets with Different BY Variable Names
      13. 10.13 Merging Two Data Sets with Different BY Variable Data Types
      14. 10.14 One-to-One, One-to-Many, and Many-to-Many Merges
      15. 10.15 Updating a Master File from a Transaction File
      16. 10.16 Problems
    16. Chapter 11 Working with Numeric Functions
      1. 11.1 Introduction
      2. 11.2 Functions That Round and Truncate Numeric Values
      3. 11.3 Functions That Work with Missing Values
      4. 11.4 Setting Character and Numeric Values to Missing
      5. 11.5 Descriptive Statistics Functions
      6. 11.6 Computing Sums within an Observation
      7. 11.7 Mathematical Functions
      8. 11.8 Computing Some Useful Constants
      9. 11.9 Generating Random Numbers
      10. 11.10 Special Functions
      11. 11.11 Functions That Return Values from Previous Observations
      12. 11.12 Problems
    17. Chapter 12 Working with Character Functions
      1. 12.1 Introduction
      2. 12.2 Determining the Length of a Character Value
      3. 12.3 Changing the Case of Characters
      4. 12.4 Removing Characters from Strings
      5. 12.5 Joining Two or More Strings Together
      6. 12.6 Removing Leading or Trailing Blanks
      7. 12.7 Using the COMPRESS Function to Remove Characters from a String
      8. 12.8 Searching for Characters
      9. 12.9 Searching for Individual Characters
      10. 12.10 Searching for Words in a String
      11. 12.11 Searching for Character Classes
      12. 12.12 Using the NOT Functions for Data Cleaning
      13. 12.13 Describing a Real Blockbuster Data Cleaning Function
      14. 12.14 Extracting Part of a String
      15. 12.15 Dividing Strings into Words
      16. 12.16 Comparing Strings
      17. 12.17 Performing a Fuzzy Match
      18. 12.18 Substituting Characters or Words
      19. 12.19 Problems
    18. Chapter 13 Working with Arrays
      1. 13.1 Introduction
      2. 13.2 Setting Values of 999 to a SAS Missing Value for Several Numeric Variables
      3. 13.3 Setting Values of NA and ? to a Missing Character Value
      4. 13.4 Converting All Character Values to Lowercase
      5. 13.5 Using an Array to Create New Variables
      6. 13.6 Changing the Array Bounds
      7. 13.7 Temporary Arrays
      8. 13.8 Loading the Initial Values of a Temporary Array from a Raw Data File
      9. 13.9 Using a Multidimensional Array for Table Lookup
      10. 13.10 Problems
    19. Part 3 Presenting and Summarizing Your Data
    20. Chapter 14 Displaying Your Data
      1. 14.1 Introduction
      2. 14.2 The Basics
      3. 14.3 Changing the Appearance of Your Listing
      4. 14.4 Changing the Appearance of Values
      5. 14.5 Controlling the Observations That Appear in Your Listing
      6. 14.6 Adding Additional Titles and Footnotes to Your Listing
      7. 14.7 Changing the Order of Your Listing
      8. 14.8 Sorting by More Than One Variable
      9. 14.9 Labeling Your Column Headings
      10. 14.10 Adding Subtotals and Totals to Your Listing
      11. 14.11 Making Your Listing Easier to Read
      12. 14.12 Adding the Number of Observations to Your Listing
      13. 14.13 Double-Spacing Your Listing
      14. 14.14 Listing the First n Observations of Your Data Set
      15. 14.15 Problems
    21. Chapter 15 Creating Customized Reports
      1. 15.1 Introduction
      2. 15.2 Using PROC REPORT
      3. 15.3 Selecting Variables to Include in Your Report
      4. 15.4 Comparing Detail and Summary Reports
      5. 15.5 Producing a Summary Report
      6. 15.6 Demonstrating the FLOW Option of PROC REPORT
      7. 15.7 Using Two Grouping Variables
      8. 15.8 Changing the Order of Variables in the COLUMN Statement
      9. 15.9 Changing the Order of Rows in a Report
      10. 15.10 Applying the ORDER Usage to Two Variables
      11. 15.11 Creating a Multi-Column Report
      12. 15.12 Producing Report Breaks
      13. 15.13 Using a Nonprinting Variable to Order a Report
      14. 15.14 Computing a New Variable with PROC REPORT
      15. 15.15 Computing a Character Variable in a COMPUTE Block
      16. 15.16 Creating an ACROSS Variable with PROC REPORT
      17. 15.17 Modifying the Column Label for an ACROSS Variable
      18. 15.18 Using an ACROSS Usage to Display Statistics
      19. 15.19 Problems
    22. Chapter 16 Summarizing Your Data
      1. 16.1 Introduction
      2. 16.2 PROC MEANS—Starting from the Beginning
      3. 16.3 Adding a BY Statement to PROC MEANS
      4. 16.4 Using a CLASS Statement with PROC MEANS
      5. 16.5 Applying a Format to a CLASS Variable
      6. 16.6 Deciding between a BY Statement and a CLASS Statement
      7. 16.7 Creating Summary Data Sets Using PROC MEANS
      8. 16.8 Outputting Other Descriptive Statistics with PROC MEANS
      9. 16.9 Asking SAS to Name the Variables in the Output Data Set
      10. 16.10 Outputting a Summary Data Set: Including a BY Statement
      11. 16.11 Outputting a Summary Data Set: Including a CLASS Statement
      12. 16.12 Using Two CLASS Variables with PROC MEANS
      13. 16.13 Selecting Different Statistics for Each Variable
      14. 16.14 Problems
    23. Chapter 17 Counting Frequencies
      1. 17.1 Introduction
      2. 17.2 Counting Frequencies
      3. 17.3 Selecting Variables for PROC FREQ
      4. 17.4 Using Formats to Label the Output
      5. 17.5 Using Formats to Group Values
      6. 17.6 Problems Grouping Values with PROC FREQ
      7. 17.7 Displaying Missing Values in the Frequency Table
      8. 17.8 Changing the Order of Values in PROC FREQ
      9. 17.9 Producing Two-Way Tables
      10. 17.10 Requesting Multiple Two-Way Tables
      11. 17.11 Producing Three-Way Tables
      12. 17.12 Problems
    24. Chapter 18 Creating Tabular Reports
      1. 18.1 Introduction
      2. 18.2 A Simple PROC TABULATE Table
      3. 18.3 Describing the Three PROC TABULATE Operators
      4. 18.4 Using the Keyword ALL
      5. 18.5 Producing Descriptive Statistics
      6. 18.6 Combining CLASS and Analysis Variables in a Table
      7. 18.7 Customizing Your Table
      8. 18.8 Demonstrating a More Complex Table
      9. 18.9 Computing Row and Column Percentages
      10. 18.10 Displaying Percentages in a Two-Dimensional Table
      11. 18.11 Computing Column Percentages
      12. 18.12 Computing Percentages on Numeric Variables
      13. 18.13 Understanding How Missing Values Affect PROC TABULATE Output
      14. 18.14 Problems
    25. Chapter 19 Introducing the Output Delivery System
      1. 19.1 Introduction
      2. 19.2 Sending SAS Output to an HTML File
      3. 19.3 Creating a Table of Contents
      4. 19.4 Selecting a Different HTML Style
      5. 19.5 Choosing Other ODS Destinations
      6. 19.6 Selecting or Excluding Portions of SAS Output
      7. 19.7 Sending Output to a SAS Data Set
      8. 19.8 Problems
    26. Chapter 20 Generating High-Quality Graphics
      1. 20.1 Introduction
      2. 20.2 Some Basic Concepts
      3. 20.3 Producing Simple Bar Charts Using PROC GCHART
      4. 20.4 Creating Pie Charts
      5. 20.5 Creating Bar Charts for a Continuous Variable
      6. 20.6 Creating Charts with Values Representing Categories
      7. 20.7 Creating Bar Charts Representing Sums
      8. 20.8 Creating Bar Charts Representing Means
      9. 20.9 Adding Another Variable to the Chart
      10. 20.10 Producing Scatter Plots
      11. 20.11 Connecting Points
      12. 20.12 Connecting Points with a Smooth Line
      13. 20.13 Problems
    27. Part 4 Advanced Topics
    28. Chapter 21 Using Advanced INPUT Techniques
      1. 21.1 Introduction
      2. 21.2 Handling Missing Values at the End of a Line
      3. 21.3 Reading Short Data Lines
      4. 21.4 Reading External Files with Lines Longer Than 256 Characters
      5. 21.5 Detecting the End of the File
      6. 21.6 Reading a Portion of a Raw Data File
      7. 21.7 Reading Data from Multiple Files
      8. 21.8 Reading Data from Multiple Files Using a FILENAME Statement
      9. 21.9 Reading External Filenames from a Data File
      10. 21.10 Reading Multiple Lines of Data to Form One Observation
      11. 21.11 Reading Data Conditionally (the Single Trailing @ Sign)
      12. 21.12 More Examples of the Single Trailing @ Sign
      13. 21.13 Creating Multiple Observations from One Line of Input
      14. 21.14 Using Variable and Informat Lists
      15. 21.15 Using Relative Column Pointers to Read a Complex Data Structure Efficiently
      16. 21.16 Problems
    29. Chapter 22 Using Advanced Features of User-Defined Formats and Informats
      1. 22.1 Introduction
      2. 22.2 Using Formats to Recode Variables
      3. 22.3 Using Formats with a PUT Function to Create New Variables
      4. 22.4 Creating User-Defined Informats
      5. 22.5 Reading Character and Numeric Data in One Step
      6. 22.6 Using Formats (and Informats) to Perform Table Lookup
      7. 22.7 Using a SAS Data Set to Create a Format
      8. 22.8 Updating and Maintaining Your Formats
      9. 22.9 Using Formats within Formats
      10. 22.10 Multilabel Formats
      11. 22.11 Using the INPUTN Function to Perform a More Complicated Table Lookup
      12. 22.12 Problems
    30. Chapter 23 Restructuring SAS Data Sets
      1. 23.1 Introduction
      2. 23.2 Converting a Data Set with One Observation per Subject to a Data Set with Several Observations per Subject: Using a DATA Step
      3. 23.3 Converting a Data Set with Several Observations per Subject to a Data Set with One Observation per Subject: Using a DATA Step
      4. 23.4 Converting a Data Set with One Observation per Subject to a Data Set with Several Observations per Subject: Using PROC TRANSPOSE
      5. 23.5 Converting a Data Set with Several Observations per Subject to a Data Set with One Observation per Subject: Using PROC TRANSPOSE
      6. 23.6 Problems
    31. Chapter 24 Working with Multiple Observations per Subject
      1. 24.1 Introduction
      2. 24.2 Identifying the First or Last Observation in a Group
      3. 24.3 Counting the Number of Visits Using PROC FREQ
      4. 24.4 Counting the Number of Visits Using PROC MEANS
      5. 24.5 Computing Differences between Observations
      6. 24.6 Computing Differences between the First and Last Observation in a BY Group Using the LAG Function
      7. 24.7 Computing Differences between the First and Last Observation in a BY Group Using a RETAIN Statement
      8. 24.8 Using a Retained Variable to “Remember” a Previous Value
      9. 24.9 Problems
    32. Chapter 25 Introducing the SAS Macro Language
      1. 25.1 Introduction
      2. 25.2 Macro Variables: What Are They?
      3. 25.3 Some Built-In Macro Variables
      4. 25.4 Assigning Values to Macro Variables with a %LET Statement
      5. 25.5 Demonstrating a Simple Macro
      6. 25.6 A Word about Tokens
      7. 25.7 Another Example of Using a Macro Variable as a Prefix
      8. 25.8 Using a Macro Variable to Transfer a Value between DATA Steps
      9. 25.9 Problems
    33. Chapter 26 Introducing the Structured Query Language
      1. 26.1 Introduction
      2. 26.2 Some Basics
      3. 26.3 Joining Two Tables (Merge)
      4. 26.4 Left, Right, and Full Joins
      5. 26.5 Concatenating Data Sets
      6. 26.6 Using Summary Functions
      7. 26.7 Demonstrating an ORDER Clause
      8. 26.8 An Example of Fuzzy Matching
      9. 26.9 Problems
    34. Solutions to Odd-Numbered Problems
    35. Index
  3. List of Programs
    1. Programs in Chapter 1
      1. 1-1 A sample SAS program
      2. 1-2 An alternative version of Program 1-1
    2. Programs in Chapter 2
      1. 2-1 Your first SAS program
      2. 2-2 Enhancing the program
      3. 2-3 Example of a fancy comment using the asterisk style
      4. 2-4 Example of a fancy comment using the /* */ style
      5. 2-5 Incorrect nesting of /* */ style comments
    3. Programs in Chapter 3
      1. 3-1 Demonstrating list input with blanks as delimiters
      2. 3-2 Adding PROC PRINT to list the observations in the data set
      3. 3-3 Reading data from a comma-separated values (CSV) file
      4. 3-4 Using a FILENAME statement to identify an external file
      5. 3-5 Demonstrating the DATALINES statement
      6. 3-6 Using INFILE options with DATALINES
      7. 3-7 Demonstrating column input
      8. 3-8 Demonstrating formatted input
      9. 3-9 Demonstrating a FORMAT statement
      10. 3-10 Rerunning Program 3-9 with a different format
      11. 3-11 Using informats with list input
      12. 3-12 Supplying an INFORMAT statement with list input
      13. 3-13 Demonstrating the ampersand modifier for list input
    4. Programs in Chapter 4
      1. 4-1 Creating a permanent SAS data set
      2. 4-2 Using PROC CONTENTS to examine the descriptor portion of a SAS data set
      3. 4-3 Demonstrating the VARNUM option of PROC CONTENTS
      4. 4-4 Using a LIBNAME in a new SAS session
      5. 4-5 Using PROC CONTENTS to list the names of all the SAS data sets in a SAS library
      6. 4-6 Using PROC PRINT to list the data portion of a SAS data set
      7. 4-7 Using observations from a SAS data set as input to a new SAS data set
      8. 4-8 Demonstrating a DATA _NULL_ step
    5. Programs in Chapter 5
      1. 5-1 Adding labels to variables in a SAS data set
      2. 5-2 Using PROC FORMAT to create user-defined formats
      3. 5-3 Adding a FORMAT statement in PROC PRINT
      4. 5-4 Regrouping values using a format
      5. 5-5 Applying the new format to several variables with PROC FREQ
      6. 5-6 Creating a permanent format library
      7. 5-7 Adding LABEL and FORMAT statements in the DATA step
      8. 5-8 Running PROC CONTENTS on a data set with labels and formats
      9. 5-9 Using a user-defined format
      10. 5-10 Displaying format definitions in a user-created library
      11. 5-11 Demonstrating a SELECT statement with PROC FORMAT
    6. Programs in Chapter 6
      1. 6-1 Using PROC PRINT to list the first four observations in a data set
      2. 6-2 Using the FIRSTOBS= and OBS= options together
      3. 6-3 Reading a spreadsheet using an XLS engine
      4. 6-4 Using ODS to convert a SAS data set into a CSV file (to be read by Excel)
    7. Programs in Chapter 7
      1. 7-1 First attempt to group ages into age groups (incorrect)
      2. 7-2 Corrected program to group ages into age groups
      3. 7-3 An alternative to Program 7-2
      4. 7-4 Demonstrating a subsetting IF statement
      5. 7-5 Demonstrating a SELECT statement when a select-expression is missing
      6. 7-6 Combining various Boolean operators
      7. 7-7 A caution on the use of multiple OR operators
      8. 7-8 Using a WHERE statement to subset a SAS data set
    8. Programs in Chapter 8
      1. 8-1 Example of a program that does not use a DO group
      2. 8-2 Demonstrating a DO group
      3. 8-3 Attempt to create a cumulative total
      4. 8-4 Adding a RETAIN statement to Program 8-3
      5. 8-5 Third attempt to create cumulative total
      6. 8-6 Using a sum statement to create a cumulative total
      7. 8-7 Using a sum statement to create a counter
      8. 8-8 Program without iterative loops
      9. 8-9 Demonstrating an iterative DO loop
      10. 8-10 Using an iterative DO loop to make a table of squares and square roots
      11. 8-11 Using an iterative DO loop to graph an equation
      12. 8-12 Using character values for DO loop index values
      13. 8-13 Demonstrating a DO UNTIL loop
      14. 8-14 Demonstrating that a DO UNTIL loop always executes at least once
      15. 8-15 Demonstrating a DO WHILE statement
      16. 8-16 Demonstrating that DO WHILE loops are evaluated at the top
      17. 8-17 Combining a DO UNTIL and iterative DO loop
      18. 8-18 Demonstrating the LEAVE statement
      19. 8-19 Demonstrating a CONTINUE statement
    9. Programs in Chapter 9
      1. 9-1 Program to read dates from raw data
      2. 9-2 Adding a FORMAT statement to format each of the date values
      3. 9-3 Compute a person’s age in years
      4. 9-4 Demonstrating a date constant
      5. 9-5 Using the TODAY function to return the current date
      6. 9-6 Extracting the day of the week, day of the month, month, and year from a SAS date
      7. 9-7 Using the MDY function to create a SAS date from month, day, and year values
      8. 9-8 Substituting the 15th of the month when a day value is missing
      9. 9-9 Demonstrating the INTCK function
      10. 9-10 Using the INTNX function to compute dates 6 months after discharge
      11. 9-11 Demonstrating the SAMEDAY alignment with the INTNX function
    10. Programs in Chapter 10
      1. 10-1 Subsetting a SAS data set using a WHERE statement
      2. 10-2 Demonstrating a DROP= data set option
      3. 10-3 Creating two data sets in one DATA step
      4. 10-4 Using a SET statement to combine observations from two data sets
      5. 10-5 Using a SET statement on two data sets containing different variables
      6. 10-6 Interleaving data sets
      7. 10-7 Combining detail and summary data: using a conditional SET statement
      8. 10-8 Merging two SAS data sets
      9. 10-9 Demonstrating the IN= data set option
      10. 10-10 Using IN= variables to select IDs that are in both data sets
      11. 10-11 More examples of using IN= variables
      12. 10-12 Demonstrating when a DATA step ends
      13. 10-13 Merging two data sets by renaming a variable in one data set
      14. 10-14 Merging two data sets when the BY variables are different data types
      15. 10-15 An alternative to Program 10-14
      16. 10-16 Updating a master file from a transaction file
    11. Programs in Chapter 11
      1. 11-1 Demonstrating the ROUND and INT truncation functions
      2. 11-2 Testing for missing numeric and character values (without the missing function)
      3. 11-3 Demonstrating the MISSING function
      4. 11-4 Demonstrating the N, MEAN, MIN, and MAX functions
      5. 11-5 Finding the sum of the three largest values in a list of variables
      6. 11-6 Using the SUM function to compute totals
      7. 11-7 Demonstrating the ABS, SQRT, EXP, and LOG functions
      8. 11-8 Computing some useful constants with the CONSTANT function
      9. 11-9 Using the RANUNI function to randomly select observations
      10. 11-10 Using PROC SURVEYSELECT to obtain a random sample 200
      11. 11-11 Using the INPUT function to perform a character-to-numeric conversion
      12. 11-12 Demonstrating the PUT function
      13. 11-13 Demonstrating the LAG and LAGn functions
      14. 11-14 Demonstrating what happens when you execute a LAG function conditionally
      15. 11-15 Using the LAG function to compute interobservation differences
      16. 11-16 Demonstrating the DIF function
    12. Programs in Chapter 12
      1. 12-1 Determining the length of a character value
      2. 12-2 Changing values to uppercase
      3. 12-3 Converting multiple blanks to a single blank and demonstrating the PROPCASE function
      4. 12-4 Demonstrating the concatenation functions
      5. 12-5 Demonstrating the TRIM, LEFT, and STRIP functions
      6. 12-6 Using the COMPRESS function to remove characters from a string
      7. 12-7 Demonstrating the COMPRESS modifiers
      8. 12-8 Demonstrating the FIND and COMPRESS functions
      9. 12-9 Demonstrating the FINDW function
      10. 12-10 Demonstrating the ANYDIGIT function
      11. 12-11 Demonstrating the NOT functions for data cleaning
      12. 12-12 Using the VERIFY function for data cleaning
      13. 12-13 Using the SUBSTR function to extract substrings
      14. 12-14 Demonstrating the SCAN function
      15. 12-15 Using the SCAN function to extract the last name
      16. 12-16 Demonstrating the COMPARE function
      17. 12-17 Clarifying the use of the colon modifier with the COMPAREfunction
      18. 12-18 Using the SPEDIS function to perform a fuzzy match
      19. 12-19 Demonstrating the TRANSLATE function
      20. 12-20 Using the TRANWRD function to standardize an address
    13. Programs in Chapter 13
      1. 13-1 Converting values of 999 to a SAS missing value—without using arrays
      2. 13-2 Converting values of 999 to a SAS missing value—using arrays
      3. 13-3 Rewriting Program 13-2 using the CALL MISSING routine
      4. 13-4 Converting values of NA and ? to missing character values
      5. 13-5 Converting all character values in a SAS data set to lowercase
      6. 13-6 Using an array to create new variables
      7. 13-7 Changing the array bounds
      8. 13-8 Using a temporary array to score a test
      9. 13-9 Loading the initial values of a temporary array from a raw data file
      10. 13-10 Loading a two-dimensional, temporary array with data values
    14. Programs in Chapter 14
      1. 14-1 PROC PRINT using all the defaults
      2. 14-2 Controlling which variables appear in the listing
      3. 14-3 Using an ID statement to omit the Obs column
      4. 14-4 Adding a FORMAT statement to PROC PRINT
      5. 14-5 Controlling which observations appear in the listing (WHERE statement)
      6. 14-6 Using the IN operator in a WHERE statement
      7. 14-7 Adding titles and footnotes to your listing
      8. 14-8 Using PROC SORT to change the order of your observations
      9. 14-9 Demonstrating the DESCENDING option of PROC SORT
      10. 14-10 Sorting by more than one variable
      11. 14-11 Using labels as column headings with PROC PRINT
      12. 14-12 Using a BY statement in PROC PRINT
      13. 14-13 Adding totals and subtotals to your listing
      14. 14-14 Using an ID statement and a BY statement in PROC PRINT
      15. 14-15 Demonstrating the N= option with PROC PRINT
      16. 14-16 Double-spacing your listing
      17. 14-17 Listing the first five observations of your data set
      18. 14-18 Forcing variable labels to print horizontally
    15. Programs in Chapter 15
      1. 15-1 Listing of Medical using PROC PRINT
      2. 15-2 Using PROC REPORT (all defaults)
      3. 15-3 Adding a COLUMN statement to PROC REPORT
      4. 15-4 Using PROC REPORT with only numeric variables
      5. 15-5 Using DEFINE statements to define a display usage
      6. 15-6 Specifying a GROUP usage to create a summary report
      7. 15-7 Demonstrating the FLOW option with PROC REPORT
      8. 15-8 Explicitly defining usage for every variable
      9. 15-9 Demonstrating the effect of two variables with GROUP usage
      10. 15-10 Reversing the order of variables in the COLUMN statement
      11. 15-11 Demonstrating the ORDER usage of PROC REPORT
      12. 15-12 Applying the ORDER usage for two variables
      13. 15-13 Creating a multi-column report
      14. 15-14 Requesting a report break (RBREAK statement)
      15. 15-15 Demonstrating the BREAK statement of PROC REPORT
      16. 15-16 Using a nonprinting variable to order the rows of a report
      17. 15-17 Computing a new variable with PROC REPORT
      18. 15-18 Demonstrating an ACROSS usage in PROC REPORT
    16. Programs in Chapter 16
      1. 16-1 PROC MEANS with all the defaults
      2. 16-2 Adding a VAR statement and requesting specific statistics with PROC MEANS
      3. 16-3 Adding a BY statement to PROC MEANS
      4. 16-4 Using a CLASS statement with PROC MEANS
      5. 16-5 Demonstrating the effect of a formatted CLASS variable
      6. 16-6 Creating a summary data set using PROC MEANS
      7. 16-7 Outputting more than one statistic with PROC MEANS
      8. 16-8 Demonstrating the OUTPUT option AUTONAME
      9. 16-9 Adding a BY statement to PROC MEANS
      10. 16-10 Adding a CLASS statement to PROC MEANS
      11. 16-11 Adding the NWAY option to PROC MEANS
      12. 16-12 Using two CLASS variables with PROC MEANS
      13. 16-13 Adding the CHARTYPE procedure option to PROC MEANS
      14. 16-14 Using the _TYPE_ variable to select cell means
      15. 16-15 Using a DATA step to create separate summary data sets
      16. 16-16 Selecting different statistics for each variable using PROC MEANS
    17. Programs in Chapter 17
      1. 17-1 Counting frequencies: one-way tables using PROC FREQ
      2. 17-2 Adding a TABLES statement to PROC FREQ
      3. 17-3 Adding formats to Program 17-2
      4. 17-4 Using formats to group values
      5. 17-5 Demonstrating a problem in how PROC FREQ groups values
      6. 17-6 Fixing the grouping problem
      7. 17-7 Demonstrating the effect of the MISSING option of PROC FREQ
      8. 17-8 Demonstrating the ORDER= option of PROC FREQ
      9. 17-9 Demonstrating the ORDER= formatted, data, and freq options
      10. 17-10 Requesting a two-way table
      11. 17-11 Requesting a three-way table with PROC FREQ
    18. Programs in Chapter 18
      1. 18-1 PROC TABULATE with all the defaults and a single CLASS variable
      2. 18-2 Demonstrating concatenation with PROC TABULATE
      3. 18-3 Demonstrating table dimensions with PROC TABULATE
      4. 18-4 Demonstrating the nesting operator with PROC TABULATE
      5. 18-5 Adding the keyword ALL to your table request
      6. 18-6 Using PROC TABULATE to produce descriptive statistics
      7. 18-7 Specifying statistics on an analysis variable with PROC TABULATE
      8. 18-8 Specifying more than one descriptive statistic with PROC TABULATE
      9. 18-9 Combining CLASS and analysis variables in a table
      10. 18-10 Associating a different format with each variable in a table
      11. 18-11 Renaming keywords with PROC TABULATE
      12. 18-12 Eliminating the N column in a PROC TABULATE table
      13. 18-13 Demonstrating a more complex table
      14. 18-14 Computing percentages in a one-dimensional table
      15. 18-15 Improving the appearance of output from Program 18-14
      16. 18-16 Counts and percentages in a two-dimensional table
      17. 18-17 Using COLPCTN to compute column percentages
      18. 18-18 Computing percentages on a numeric value
      19. 18-19 Demonstrating the effect of missing values on CLASS variables
      20. 18-20 Missing values on a CLASS variable that is not used in the table
      21. 18-21 Adding the PROC TABULATE procedure option MISSING
      22. 18-22 Demonstrating the MISSTEXT= TABLES option
    19. Programs in Chapter 19
      1. 19-1 Sending SAS output to an HTML file
      2. 19-2 Creating a table of contents for HTML output
      3. 19-3 Choosing a style for HTML output
      4. 19-4 Using an ODS SELECT statement to restrict PROC UNIVARIATE output
      5. 19-5 Using the ODS TRACE statement to identify output objects
      6. 19-6 Using ODS to send procedure output to a SAS data set
      7. 19-7 Using an output data set to create a simplified report
    20. Programs in Chapter 20
      1. 20-1 Producing a simple bar chart using PROC GCHART
      2. 20-2 Creating a simple pie chart
      3. 20-3 Creating a bar chart for a continuous variable
      4. 20-4 Selecting your own midpoints for the chart
      5. 20-5 Demonstrating the need for the DISCRETE option of PROC GCHART
      6. 20-6 Demonstrating the DISCRETE option of PROC GCHART
      7. 20-7 Creating a bar chart where the height of the bars represents sums
      8. 20-8 Creating a bar chart where the height of the bars represents means
      9. 20-9 Adding another variable to the chart
      10. 20-10 Demonstrating the SUBGROUP= option
      11. 20-11 Creating a simple scatter plot using all the defaults
      12. 20-12 Changing the plotting symbol and controlling the axis ranges
      13. 20-13 Joining the points with straight lines (first attempt)
      14. 20-14 Using the JOIN option on a sorted data set
      15. 20-15 Drawing a smooth line through your data points
    21. Programs in Chapter 21
      1. 21-1 Missing values at the end of a line with list input
      2. 21-2 Reading a raw data file with short records
      3. 21-3 Demonstrating the INFILE PAD option
      4. 21-4 Demonstrating the END= option in the INFILE statement
      5. 21-5 Demonstrating the OBS= INFILE option to read the first three lines of data
      6. 21-6 Using the OBS= and FIRSTOBS= INFILE options together
      7. 21-7 Using the END= option to read data from multiple files
      8. 21-8 Reading external filenames from an external file
      9. 21-9 Reading external filenames using a DATALINES statement
      10. 21-10 Reading multiple lines of data to create one observation
      11. 21-11 Using an alternate method of reading multiple lines of data to form one SAS observation
      12. 21-12 Incorrect attempt to read a file of mixed record types
      13. 21-13 Using a trailing @ to read a file with mixed record types
      14. 21-14 Another example of a trailing @ sign
      15. 21-15 Creating one observation from one line of data
      16. 21-16 Creating several observations from one line of data
    22. Programs in Chapter 22
      1. 22-1 Using a format to recode a variable
      2. 22-2 Using a format and a PUT function to create a new variable
      3. 22-3 Demonstrating a user-written informat
      4. 22-4 Demonstrating informat options UPCASE and JUST
      5. 22-5 A traditional approach to reading a combination of character and numeric data
      6. 22-6 Using an enhanced numeric informat to read a combination of character and numeric data
      7. 22-7 Another example of an enhanced numeric informat
      8. 22-8 Using formats and informats to perform a table lookup
      9. 22-9 Creating a test data set that will be used to make a CNTLIN data set
      10. 22-10 Creating a CNTLIN data set from an existing SAS data set
      11. 22-11 Using the CNTLIN= created data set
      12. 22-12 Adding an OTHER category to your format
      13. 22-13 Updating an existing format using a CNTLOUT= data set option
      14. 22-14 Demonstrating nested formats
      15. 22-15 Using the nested format in a DATA step
      16. 22-16 Creating a MULTILABEL format
      17. 22-17 Using a MULTILABEL format with PROC MEANS
      18. 22-18 Using the PRELOADFMT, PRINTMISS, and MISSTEXT options with PROC TABULATE
      19. 22-19 Partial program showing how to create several informats
      20. 22-20 Creating several informats with a single CNTLIN data set
      21. 22-21 Using a SELECT statement to display the contents of two informats
      22. 22-22 Using user-defined informats to perform a table lookup using the INPUTN function
    23. Programs in Chapter 23
      1. 23-1 Creating a data set with several observations per subject from a data set with one observation per subject
      2. 23-2 Creating a data set with one observation per subject from a data set with several observations per subject
      3. 23-3 Using PROC TRANSPOSE to convert a data set with one observation per subject into a data set with several observations per subject (first attempt)
      4. 23-4 Using PROC TRANSPOSE to convert a data set with one observation per subject into a data set with several observations per subject
      5. 23-5 Using PROC TRANSPOSE to convert a SAS data set with several observations per subject into one with one observation per subject
    24. Programs in Chapter 24
      1. 24-1 Creating FIRST. and LAST. Variables
      2. 24-2 Counting the number of visits per patient using a DATA step
      3. 24-3 Using PROC FREQ to count the number of observations in a BY group
      4. 24-4 Using the RENAME= and DROP= data set options to control the output data set
      5. 24-5 Using PROC MEANS to count the number of observations in a BY group
      6. 24-6 Computing differences between observations
      7. 24-7 Computing differences between the first and last observation in a BY group
      8. 24-8 Demonstrating the use of retained variables
      9. 24-9 Using a retained variable to “remember” a previous value
    25. Programs in Chapter 25
      1. 25-1 Using an automatic macro variable to include a date and time in a title
      2. 25-2 Assigning a value to a macro variable with a %LET statement
      3. 25-3 Another example of using a %LET statement
      4. 25-4 Writing a simple macro
      5. 25-5 Program 25-4 with documentation added
      6. 25-6 Demonstrating a problem with resolving a macro variable
      7. 25-7 Program 25-6 corrected
      8. 25-8 Using a macro variable as a prefix (incorrect version)
      9. 25-9 Using a macro variable as a prefix (corrected version)
      10. 25-10 Using macro variables to transfer values from one DATA step to another
    26. Programs in Chapter 26
      1. 26-1 Demonstrating a simple query from a single data set
      2. 26-2 Using an asterisk to select all the variables in a data set
      3. 26-3 Using PROC SQL to create a SAS data set
      4. 26-4 Joining two tables (Cartesian product)
      5. 26-5 Renaming the two Subj variables
      6. 26-6 Using aliases to simplify naming variables
      7. 26-7 Performing an inner join
      8. 26-8 Demonstrating a left, right, and full join
      9. 26-9 Concatenating two tables
      10. 26-10 Using a summary function in PROC SQL
      11. 26-11 Demonstrating an ORDER clause
      12. 26-12 Using PROC SQL to perform a fuzzy match
  4. Acknowledgments
  5. Preface
  6. Part 1
  7. Chapter 1 What Is SAS?
    1. 1.1 Introduction
    2. 1.2 Getting Data into SAS
    3. 1.3 A Sample SAS Program
    4. 1.4 SAS Names
    5. 1.5 SAS Data Sets and SAS Data Types
    6. 1.6 The SAS Display Manager and SAS Enterprise Guide
    7. 1.7 Problems
  8. Chapter 2 Writing Your First SAS Program
    1. 2.1 A Simple Program to Read Raw Data and Produce a Report
    2. 2.2 Enhancing the Program
    3. 2.3 More on Comment Statements
    4. 2.4 How SAS Works (a Look Inside the “Black Box”)
    5. 2.5 Problems
  9. Part 2
  10. Chapter 3 Reading Raw Data from External Files
    1. 3.1 Introduction
    2. 3.2 Reading Data Values Separated by Blanks
    3. 3.3 Specifying Missing Values with List Input
    4. 3.4 Reading Data Values Separated by Commas (CSV Files)
    5. 3.5 Using an alternative Method to Specify an External File
    6. 3.6 Reading Data Values Separated by Delimiters Other Than Blanks or Commas
    7. 3.7 Placing Data Lines Directly in Your Program (the DATALINES Statement)
    8. 3.8 Specifying INFILE Options with the DATALINES Statement
    9. 3.9 Reading Raw Data from Fixed Columns—Method 1: Column Input
    10. 3.10 Reading Raw Data from Fixed Columns— Method 2: Formatted Input
    11. 3.11 Using a FORMAT Statement in a DATA Step versus in a Procedure
    12. 3.12 Using Informats with List Input
    13. 3.13 Supplying an INFORMAT Statement with List Input
    14. 3.14 Using List Input with Embedded Delimiters
    15. 3.15 Problems
  11. Chapter 4 Creating Permanent SAS Data Sets
    1. 4.1 Introduction
    2. 4.2 SAS Libraries—The LIBNAME Statement
    3. 4.3 Why Create Permanent SAS Data Sets?
    4. 4.4 Examining the Descriptor Portion of a SAS Data Set Using PROC CONTENTS
    5. 4.5 Listing All the SAS Data Sets in a SAS Library Using PROC CONTENTS
    6. 4.6 Viewing the Descriptor Portion of a SAS Data Set Using the SAS Explorer
    7. 4.7 Viewing the Data Portion of a SAS Data Set Using PROC PRINT
    8. 4.8 Viewing the Data Portion of a SAS Data Set Using the SAS VIEWTABLE Window
    9. 4.9 Using a SAS Data Set as Input to a DATA Step
    10. 4.10 DATA _NULL_: A Data Set That Isn’t
    11. 4.11 Problems
  12. Chapter 5 Creating Formats and Labels
    1. 5.1 Adding Labels to Your Variables
    2. 5.2 Using Formats to Enhance Your Output
    3. 5.3 Regrouping Values Using Formats
    4. 5.4 More on Format Ranges
    5. 5.5 Storing Your Formats in a Format Library
    6. 5.6 Permanent Data Set Attributes
    7. 5.7 Accessing a Permanent SAS Data Set with User-Defined Formats
    8. 5.8 Displaying Your Format Definitions
    9. 5.9 Problems
  13. Chapter 6 Reading and Writing Data from an Excel Spreadsheet
    1. 6.1 Introduction
    2. 6.2 Using the Import Wizard to Convert a Spreadsheet to a SAS Data Set
    3. 6.3 Creating an Excel Spreadsheet from a SAS Data Set
    4. 6.4 Using an Engine to Read an Excel Spreadsheet
    5. 6.5 Using the SAS Output Delivery System to Convert a SAS Data Set to an Excel Spreadsheet
    6. 6.6 Problems
  14. Chapter 7 Performing Conditional Processing
    1. 7.1 Introduction
    2. 7.2 The IF and ELSE IF Statements
    3. 7.3 The Subsetting IF Statement
    4. 7.4 The IN Operator
    5. 7.5 Using a SELECT Statement for Logical Tests
    6. 7.6 Using Boolean Logic (AND, OR, and NOT Operators)
    7. 7.7 A Caution When Using Multiple OR Operators
    8. 7.8 The WHERE Statement
    9. 7.9 Some Useful WHERE Operators
    10. 7.10 Problems
  15. Chapter 8 Performing Iterative Processing: Looping
    1. 8.1 Introduction
    2. 8.2 DO Groups
    3. 8.3 The Sum Statement
    4. 8.4 The Iterative DO Loop
    5. 8.5 Other Forms of an Iterative DO Loop
    6. 8.6 DO WHILE and DO UNTIL Statements
    7. 8.7 A Caution When Using DO UNTIL Statements
    8. 8.8 LEAVE and CONTINUE Statements
    9. 8.9 Problems
  16. Chapter 9 Working with Dates
    1. 9.1 Introduction
    2. 9.2 How SAS Stores Dates
    3. 9.4 Computing the Number of Years between Two Dates
    4. 9.5 Demonstrating a Date Constant
    5. 9.6 Computing the Current Date
    6. 9.7 Extracting the Day of the Week, Day of the Month, Month, and Year from a SAS Date
    7. 9.8 Creating a SAS Date from Month, Day, and Year Values
    8. 9.9 Substituting the 15th of the Month when the Day Value Is Missing
    9. 9.10 Using Date Interval Functions
    10. 9.11 Problems
  17. Chapter 10 Subsetting and Combining SAS Data Sets
    1. 10.1 Introduction
    2. 10.2 Subsetting a SAS Data Set
    3. 10.3 Creating More Than One Subset Data Set in One DATA Step
    4. 10.4 Adding Observations to a SAS Data Set
    5. 10.5 Interleaving Data Sets
    6. 10.6 Combining Detail and Summary Data
    7. 10.7 Merging Two Data Sets
    8. 10.8 Omitting the BY Statement in a Merge
    9. 10.9 Controlling Observations in a Merged Data Set
    10. 10.10 More Uses for IN= Variables
    11. 10.11 When Does a DATA Step End?
    12. 10.12 Merging Two Data Sets with Different BY Variable Names
    13. 10.13 Merging Two Data Sets with Different BY Variable Data Types
    14. 10.14 One-to-One, One-to-Many, and Many-to-Many Merges
    15. 10.15 Updating a Master File from a Transaction File
    16. 10.16 Problems
  18. Chapter 11 Working with Numeric Functions
    1. 11.1 Introduction
    2. 11.2 Functions That Round and Truncate Numeric Values
    3. 11.3 Functions That Work with Missing Values
    4. 11.4 Setting Character and Numeric Values to Missing
    5. 11.5 Descriptive Statistics Functions
    6. 11.6 Computing Sums within an Observation
    7. 11.7 Mathematical Functions
    8. 11.8 Computing Some Useful Constants
    9. 11.9 Generating Random Numbers
    10. 11.10 Special Functions
    11. 11.11 Functions That Return Values from Previous Observations
    12. 11.12 Problems
  19. Chapter 12 Working with Character Functions
    1. 12.1 Introduction
    2. 12.2 Determining the Length of a Character Value
    3. 12.3 Changing the Case of Characters
    4. 12.4 Removing Characters from Strings
    5. 12.5 Joining Two or More Strings Together
    6. 12.6 Removing Leading or Trailing Blanks
    7. 12.7 Using the COMPRESS Function to Remove Characters from a String
    8. 12.8 Searching for Characters
    9. 12.10 Searching for Words in a String
    10. 12.11 Searching for Character Classes
    11. 12.12 Using the NOT Functions for Data Cleaning
    12. 12.13 Describing a Real Blockbuster Data Cleaning Function
    13. 12.14 Extracting Part of a String
    14. 12.15 Dividing Strings into Words
    15. 12.16 Comparing Strings
    16. 12.17 Performing a Fuzzy Match
    17. 12.18 Substituting Characters or Words
    18. 12.19 Problems
  20. Chapter 13 Working with Arrays
    1. 13.1 Introduction
    2. 13.2 Setting Values of 999 to a SAS Missing Value for Several Numeric Variables
    3. 13.3 Setting Values of NA and ? to a Missing Character Value
    4. 13.4 Converting All Character Values to Lowercase
    5. 13.5 Using an Array to Create New Variables
    6. 13.6 Changing the Array Bounds
    7. 13.7 Temporary Arrays
    8. 13.8 Loading the Initial Values of a Temporary Array from a Raw Data File
    9. 13.9 Using a Multidimensional Array for Table Lookup
    10. 13.10 Problems
  21. Chapter 14 Displaying Your Data
    1. 14.1 Introduction
    2. 14.2 The Basics
    3. 14.3 Changing the Appearance of Your Listing
    4. 14.4 Changing the Appearance of Values
    5. 14.5 Controlling the Observations That Appear in Your Listing
    6. 14.6 Adding Additional Titles and Footnotes to Your Listing
    7. 14.7 Changing the Order of Your Listing
    8. 14.8 Sorting by More Than One Variable
    9. 14.9 Labeling Your Column Headings
    10. 14.10 Adding Subtotals and Totals to Your Listing
    11. 14.11 Making Your Listing Easier to Read
    12. 14.12 Adding the Number of Observations to Your Listing
    13. 14.13 Double-Spacing Your Listing
    14. 14.14 Listing the First n Observations of Your Data Set
    15. 14.15 Problems
  22. Part 3
  23. Chapter 15 Creating Customized Reports
    1. 15.1 Introduction
    2. 15.2 Using PROC REPORT
    3. 15.3 Selecting the Variables to Include in Your Report
    4. 15.4 Comparing Detail and Summary Reports
    5. 15.5 Producing a Summary Report
    6. 15.6 Demonstrating the FLOW Option of PROC REPORT
    7. 15.7 Using Two Grouping Variables
    8. 15.8 Changing the Order of Variables in the COLUMN Statement
    9. 15.9 Changing the Order of Rows in a Report
    10. 15.10 Applying the ORDER Usage to Two Variables
    11. 15.11 Creating a Multi-Column Report
    12. 15.12 Producing Report Breaks
    13. 15.13 Using a Nonprinting Variable to Order a Report
    14. 15.14 Computing a New Variable with PROC REPORT
    15. 15.15 Computing a Character Variable in a COMPUTE Block
    16. 15.16 Creating an ACROSS Variable with PROC REPORT
    17. 15.17 Modifying the Column Label for an ACROSS Variable
    18. 15.18 Using an ACROSS Usage to Display Statistics
    19. 15.19 Problems
  24. Chapter 16 Summarizing Your Data
    1. 16.1 Introduction
    2. 16.2 PROC MEANS—Starting from the Beginning
    3. 16.3 Adding a BY Statement to PROC MEANS
    4. 16.4 Using a CLASS Statement with PROC MEANS
    5. 16.5 Applying a Format to a CLASS Variable
    6. 16.6 Deciding between a BY Statement and a CLASS Statement
    7. 16.7 Creating Summary Data Sets Using PROC MEANS
    8. 16.8 Outputting Other Descriptive Statistics with PROC MEANS
    9. 16.9 Asking SAS to Name the Variables in the Output Data Set
    10. 16.10 Outputting a Summary Data Set: Including a BY Statement
    11. 16.11 Outputting a Summary Data Set: Including a CLASS Statement
    12. 16.12 Using Two CLASS Variables with PROC MEANS
    13. 16.13 Selecting Different Statistics for Each Variable
    14. 16.14 Problems
  25. Chapter 17 Counting Frequencies
    1. 17.1 Introduction
    2. 17.2 Counting Frequencies
    3. 17.4 Using Formats to Label the Output
    4. 17.5 Using Formats to Group Values
    5. 17.6 Problems Grouping Values with PROC FREQ
    6. 17.7 Displaying Missing Values in the Frequency Table
    7. 17.8 Changing the Order of Values in PROC FREQ
    8. 17.9 Producing Two-Way Tables
    9. 17.11 Producing Three-Way Tables
    10. 17.12 Problems
  26. Chapter 18 Creating Tabular Reports
    1. 18.1 Introduction
    2. 18.2 A Simple PROC TABULATE Table
    3. 18.3 Describing the Three PROC TABULATE Operators
      1. 18.3.1 Concatenation
      2. 18.3.2 Table Dimensions (Page, Row, and Column)
      3. 18.3.3 Nesting
    4. 18.4 Using the Keyword ALL
    5. 18.5 Producing Descriptive Statistics
    6. 18.6 Combining CLASS and Analysis Variables in a Table
    7. 18.7 Customizing Your Table
    8. 18.8 Demonstrating a More Complex Table
    9. 18.9 Computing Row and Column Percentages
    10. 18.10 Displaying Percentages in a Two-Dimensional Table
    11. 18.11 Computing Column Percentages
    12. 18.12 Computing Percentages on Numeric Variables
    13. 18.13 Understanding How Missing Values Affect PROC TABULATE Output
    14. 18.14 Problems
  27. Chapter 19 Introducing the Output Delivery System
    1. 19.1 Introduction
    2. 19.2 Sending SAS Output to an HTML File
    3. 19.3 Creating a Table of Contents
    4. 19.4 Selecting a Different HTML Style
    5. 19.5 Choosing Other ODS Destinations
    6. 19.6 Selecting or Excluding Portions of SAS Output
    7. 19.7 Sending Output to a SAS Data Set
    8. 19.8 Problems
  28. Part 4
  29. Chapter 20 Generating High-Quality Graphics
    1. 20.1 Introduction
    2. 20.2 Some Basic Concepts
    3. 20.3 Producing Simple Bar Charts Using PROC GCHART
    4. 20.4 Creating Pie Charts
    5. 20.5 Creating Bar Charts for a Continuous Variable
    6. 20.6 Creating Charts with Values Representing Categories
    7. 20.7 Creating Bar Charts Representing Sums
    8. 20.8 Creating Bar Charts Representing Means
    9. 20.9 Adding Another Variable to the Chart
    10. 20.10 Producing Scatter Plots
    11. 20.11 Connecting Points
    12. 20.13 Problems
  30. Chapter 21 Using Advanced INPUT Techniques
    1. 21.1 Introduction
    2. 21.2 Handling Missing Values at the End of a Line
    3. 21.3 Reading Short Data Lines
    4. 21.4 Reading External Files with Lines Longer Than 256 Characters
    5. 21.5 Detecting the End of the File
    6. 21.6 Reading a Portion of a Raw Data File
    7. 21.7 Reading Data from Multiple Files
    8. 21.8 Reading Data from Multiple Files Using a FILENAME Statement
    9. 21.9 Reading External Filenames from a Data File
    10. 21.10 Reading Multiple Lines of Data to Form One Observation
    11. 21.11 Reading Data Conditionally (the Single Trailing @ Sign)
    12. 21.12 More Examples of the Single Trailing @ Sign
    13. 21.13 Creating Multiple Observations from One Line of Input
    14. 21.14 Using Variable and Informat Lists
    15. 21.15 Using Relative Column Pointers to Read a Complex Data Structure Efficiently
  31. Chapter 22 Using Advanced Features of User-Defined Formats and Informats
    1. 22.1 Introduction
    2. 22.2 Using Formats to Recode Variables
    3. 22.3 Using Formats with a PUT Function to Create New Variables
    4. 22.4 Creating User-Defined Informats
    5. 22.5 Reading Character and Numeric Data in One Step
    6. 22.6 Using Formats (and Informats) to Perform Table Lookup
    7. 22.7 Using a SAS Data Set to Create a Format
    8. 22.8 Updating and Maintaining Your Formats
    9. 22.9 Using Formats within Formats
    10. 22.10 Multilabel Formats
    11. 22.11 Using the INPUTN Function to Perform a More Complicated Table Lookup
    12. 22.12 Problems
  32. Chapter 23 Restructuring SAS Data Sets
    1. 23.1 Introduction
    2. 23.2 Converting a Data Set with One Observation per Subject to a Data Set with Several Observations per Subject: Using a DATA Step
    3. 23.3 Converting a Data Set with Several Observations per Subject to a Data Set with One Observation per Subject: Using a DATA Step
    4. 23.4 Converting a Data Set with One Observation per Subject to a Data Set with Several Observations per Subject: Using PROC TRANSPOSE
    5. 23.5 Converting a Data Set with Several Observations per Subject to a Data Set with One Observation per Subject: Using PROC TRANSPOSE
    6. 23.6 Problems
  33. Chapter 24 Working with Multiple Observations per Subject
    1. 24.1 Introduction
    2. 24.2 Identifying the First or Last Observation in a Group
    3. 24.3 Counting the Number of Visits Using PROC FREQ
    4. 24.4 Counting the Number of Visits Using PROC MEANS
    5. 24.5 Computing Differences between Observations
    6. 24.6 Computing Differences between the First and Last Observation in a BY Group Using the LAG Function
    7. 24.7 Computing Differences between the First and Last Observation in a BY Group Using a RETAIN Statement
    8. 24.8 Using a Retained Variable to “Remember” a Previous Value
    9. 24.9 Problems
  34. Chapter 25 Introducing the SAS Macro Language
    1. 25.1 Introduction
    2. 25.2 Macro Variables: What Are They?
    3. 25.3 Some Built-In Macro Variables
    4. 25.4 Assigning Values to Macro Variables with a %LET Statement
    5. 25.5 Demonstrating a Simple Macro
    6. 25.6 A Word about Tokens
    7. 25.7 Another Example of Using a Macro Variable as a Prefix
    8. 25.8 Using a Macro Variable to Transfer a Value between DATA Steps
    9. 25.9 Problems
  35. Chapter 26 Introducing the Structured Query Language
    1. 26.1 Introduction
    2. 26.2 Some Basics
    3. 26.3 Joining Two Tables (Merge)
    4. 26.4 Left, Right, and Full Joins
    5. 26.5 Concatenating Data Sets
    6. 26.6 Using Summary Functions
    7. 26.7 Demonstrating an ORDER Clause
    8. 26.8 An Example of Fuzzy Matching
    9. 26.9 Problems
    10. Chapter 1 Solutions
    11. Chapter 2 Solutions
    12. Chapter 3 Solutions
    13. Chapter 4 Solutions
    14. Chapter 5 Solutions
    15. Chapter 6 Solutions
    16. Chapter 7 Solutions
    17. Chapter 8 Solutions
    18. Chapter 9 Solutions
    19. Chapter 10 Solutions
    20. Chapter 11 Solutions
    21. Chapter 12 Solutions
    22. Chapter 13 Solutions
    23. Chapter 14 Solutions
    24. Chapter 15 Solutions
    25. Chapter 16 Solutions
    26. Chapter 17 Solutions
    27. Chapter 18 Solutions
    28. Chapter 19 Solutions
    29. Chapter 20 Solutions
    30. Chapter 21 Solutions
    31. Chapter 22 Solutions
    32. Chapter 23 Solutions
    33. Chapter 24 Solutions
    34. Chapter 25 Solutions
    35. Chapter 26 Solutions
  36. Index
    1. A
    2. B
    3. C
    4. D
    5. E
    6. F
    7. G
    8. H
    9. I
    10. J
    11. K
    12. L
    13. M
    14. N
    15. O
    16. P
    17. Q
    18. R
    19. S
    20. T
    21. U
    22. V
    23. W
    24. X
    25. Y
    26. Z
    27. Symbols

Product information

  • Title: Learning SAS by Example
  • Author(s): EdD Ron Cody
  • Release date: March 2007
  • Publisher(s): SAS Institute
  • ISBN: 9781599944265