108
Accessing Data Accessing Data Last Updated : 29 June, 2004 Center of Excellence Data Warehousing

22280710 SAS Accessing Data

Embed Size (px)

Citation preview

Page 1: 22280710 SAS Accessing Data

Accessing DataAccessing Data

Last Updated : 29 June, 2004

Center of Excellence

Data Warehousing

Page 2: 22280710 SAS Accessing Data

AgendaAgenda

Creating datasets using DATA step.

Infile statement

Different input styles.

Combining datasets using DATA step

Page 3: 22280710 SAS Accessing Data

What Is the SAS System? What Is the SAS System?

The SAS System is an integrated system of software products that enables you to perform

data entry, retrieval, and management

report writing and graphics

statistical and mathematical analysis

business planning, forecasting, and decision support

operations research and project management

quality improvement

applications development.

Page 4: 22280710 SAS Accessing Data

What Is the SAS System?What Is the SAS System?

In addition, you can integrate with SAS many SAS business solutions that enable you to perform large scale business functions, such as

Data Warehousing and Data Mining

Human Resources Management and Decision Support

Financial Management and Decision Support

Page 5: 22280710 SAS Accessing Data

Overview of Base SAS SoftwareOverview of Base SAS Software

The core of the SAS System is base SAS software SAS language

a programming language that you use to manage your data.

SAS procedures software tools for data analysis and reporting.

Macro facility a tool for extending and customizing SAS software

programs and for reducing text in your programs.DATA step debugger

a programming tool that helps you find logic problems in DATA step programs.

Output Delivery System (ODS) a system that delivers output in a variety of easy-to-

access formats, such as SAS data sets, listing files, or Hypertext Markup Language (HTML).

Page 6: 22280710 SAS Accessing Data

Base SASBase SAS

data access management analysis presentation

Page 7: 22280710 SAS Accessing Data

Components of the SAS LanguageComponents of the SAS LanguageSAS Files Files with formats or structures known to SAS. All SAS files reside in a SAS data library.

SAS data set is structured in a format that SAS can process.

SAS catalog Many different kinds of information that are used in a SAS

job are stored in SAS catalogs, such as instructions for reading and printing data values, or function key settings that you use in the SAS windowing environment.

SAS stored program contains compiled code that you create and save for

repeated use.

Page 8: 22280710 SAS Accessing Data

Components of the SAS LanguageComponents of the SAS LanguageSAS Data Sets SAS data file

both describes and physically stores data values. descriptor portion

– describes the contents of the SAS data set to SAS. Data portion

– data that has been collected or calculated.– An observation is a collection of data values that usually

relate to a single object. A variable is the set of data values that describe a given characteristic.

SAS data view does not actually store values but create logical SAS

data sets without using the storage space required by SAS data files.

Page 9: 22280710 SAS Accessing Data

Structure of SAS Data SetsStructure of SAS Data SetsSAS Data Set

DescriptorPortion

DataPortion

General Data Set Information

*Label*Date/Time Created

Number of Obs.Number of Variables

Information for Each Variable

IDNUM NAME WAGECAT WAGERATE

1351 Farr, Sue S 3392.50161 S 5093.75212 Moore, Ron S .2512 Ruth, G H S 1572.50

... ...5151 Coxe, Susan S 3163.00

...

*Label *Informat*Format

Name Length PositionType

Name

Storage Information

Page 10: 22280710 SAS Accessing Data

Components of the SAS LanguageComponents of the SAS LanguageExternal Files

Data files that you use to read and write data, but which are in a structure unknown to SAS.

External files can be used for storing raw data that you want to read into a SAS data file SAS program statements procedure output

Database Management System Files SAS software is able to read and write data to and from

other vendors' software, such as many common database management system (DBMS) files.

In addition to base SAS software, you must license the SAS/ACCESS software for your DBMS and operating environment.

Page 11: 22280710 SAS Accessing Data

Components of the SAS LanguageComponents of the SAS LanguageSAS Language Elements

DATA step consists of a group of statements in the SAS language that

reads raw data or existing SAS data sets to create a SAS data set.

PROC step A group of procedure statements used to analyze data in

SAS data sets to produce statistics, tables, reports, charts, and plots, to create SQL queries, and to perform other analyses and operations on your data. They also provide ways to manage and print SAS files.

SAS Macro Facility a powerful programming tool for extending and customizing

your SAS programs, and for reducing the amount of code that you must enter to do common tasks. Macros are SAS files that contain compiled macro program statements and stored text.

Page 12: 22280710 SAS Accessing Data

What Can the DATA Step Do?What Can the DATA Step Do?

You can use the DATA step in the following ways to transform your information:

Read from a raw data file into the SAS system.SAS Data Set

Descriptor

DATA Step

Raw Data File

Page 13: 22280710 SAS Accessing Data

What Can the DATA Step Do?What Can the DATA Step Do?

Create multiple SAS data sets in one DATA step.

DATA Step

Page 14: 22280710 SAS Accessing Data

What Can the DATA Step Do?What Can the DATA Step Do?

Combine existing data sets.

DATA Step

SAS Data Set 2SAS Data Set 1

Page 15: 22280710 SAS Accessing Data

What Can the DATA Step Do?What Can the DATA Step Do?

You can also add or augment information in a variety of ways.

Create accumulating totals.

Sale SaleDate Amt

01APR2001 498.4902APR2001 946.5003APR2001 994.9704APR2001 564.5905APR2001 783.01

Sale SaleDate Amt

01APR2001 498.4902APR2001 946.5003APR2001 994.9704APR2001 564.5905APR2001 783.01

Mth2Dte

498.491444.992439.963004.553787.56

Mth2Dte

498.491444.992439.963004.553787.56

Page 16: 22280710 SAS Accessing Data

What Can the DATA Step Do?What Can the DATA Step Do?

Manipulate numeric values.

SAS Function

BirthDay4253

Age30

Page 17: 22280710 SAS Accessing Data

What Can the DATA Step Do?What Can the DATA Step Do?

Summarize data sets.

Salary Div

42000 HUMRES34000 FINACE27000 FLTOPS20000 FINACE19000 FINACE19000 FLTOPS

Salary Div

42000 HUMRES34000 FINACE27000 FLTOPS20000 FINACE19000 FINACE19000 FLTOPS

Div DivSal

FINACE 42000FLTOPS 46000HUMRES 73000

Div DivSal

FINACE 42000FLTOPS 46000HUMRES 73000

DATA Step

Page 18: 22280710 SAS Accessing Data

What Can the DATA Step Do?What Can the DATA Step Do?

presenting your data

file management

And much, much more……………

Page 19: 22280710 SAS Accessing Data

Words in the SAS LanguageWords in the SAS Language

A word or token in the SAS language is a collection of characters that communicates a meaning to SAS.

A word or token ends when SAS encounters one of the following: the beginning of a new token a blank after a name or a number token the ending quotation mark of a literal token.

Each word or token in the SAS language classified into four categories. Names - a series of characters that begin with a letter or an

underscore. Ex.: data, _old, yearcutoff, _n_, year_04, descending

Literal - consists of 1 to 32,767 characters enclosed in single or double quotation marks ( ‘Bangalore’, “2003-04”, ‘ Wipro”s Plan’,

"Report for the Third Quarter" )

Page 20: 22280710 SAS Accessing Data

Words in the SAS LanguageWords in the SAS Language

Number - in general is composed entirely of numeric digits, with an optional decimal point and a leading plus or minus sign. SAS also recognizes numeric values in the following forms as number tokens: scientific (E-) notation, hexadecimal notation, missing value symbols, and date and time literals. Ex: 1234, -2004, 1.25, 5.4E-1, ’30jun04'd

Special character - is usually any single keyboard character other than letters, numbers, the underscore, and the blank. In general, each special character is a single token, although some two-character operators, such as ** and <=, form single tokens. Ex: =, :, @, ‘, +, /

Page 21: 22280710 SAS Accessing Data

Names in the SAS Language Names in the SAS Language

A SAS name is a name token that represents variables SAS data sets formats or informats SAS procedures options arrays statement labels SAS macros or macro variables SAS catalog entries librefs or filerefs.

There are two kinds of names in SAS. names of elements of the SAS language names supplied by SAS users.

Page 22: 22280710 SAS Accessing Data

Names in the SAS LanguageNames in the SAS Language

Rules for User-Supplied SAS Names

Members of SAS data libraries - 32 (SAS data sets, views, catalogs, indexes) Generation data sets - 28 Catalog entries - 32 Engines, Librefs, Filerefs, Passwords - 8 DATA step variables - 32 DATA step variable labels - 256 DATA step statement labels - 32 Arrays - 32 Functions - 16 Formats - 8 Informats - 7 Macros, Macro variables - 32

Page 23: 22280710 SAS Accessing Data

Names in the SAS LanguageNames in the SAS Language

Rules for User-Supplied SAS Names The first character must be a letter (A, B, C, . . ., Z) or

underscore (_). Subsequent characters can be letters, numeric digits (0, 1, . . ., 9), or underscores.

You can use upper or lowercase letters. SAS processes names as uppercase regardless of how you type them.

Blanks cannot appear in SAS names. SAS reserves a few names for automatic variables and

variable lists, SAS data sets, and librefs. When creating variables, do not use the names of special

SAS automatic variables (for example, _N_ and _ERROR_) or special variable list names (for example, _CHARACTER_, _NUMERIC_, and _ALL_).

When associating a libref with a SAS data library, do not use SASHELP, SASMSG, SASUSER, WORK .

When you create SAS data sets, do not use _NULL_, _DATA_, _LAST_.

Page 24: 22280710 SAS Accessing Data

Names in the SAS LanguageNames in the SAS Language

Rules for User-Supplied SAS NamesSpecial characters, except for the underscore,

are not allowed. In filerefs only, you can use the dollar sign ($), pound sign (#), and at sign (@).

When assigning a fileref to an external file, do not use:

SASCAT.When you create a macro variable, do not use

names that begin with SYS

Page 25: 22280710 SAS Accessing Data

SAS DatesSAS Dates

SAS dates are special numeric values representing the number of days between January 1, 1960 and a specified date.

1jan1959 1jan1960 1jan1961 1jan2000

DATE9. Informat

MMDDYY10. Format01/01/1959

01/01/1960

01/01/1961

01/01/2000

SAS Date Values

-365 0 366 14610SAS Date

Values

Page 26: 22280710 SAS Accessing Data

Standard DataStandard Data

The term standard data refers to character and numeric data that SAS recognizes automatically.

Some examples of standard numeric data include35469.933E5 (exponential notation) -46859

Standard character data is any character you can type on your keyboard. Standard character values are always left-justified by SAS.

Page 27: 22280710 SAS Accessing Data

Nonstandard DataNonstandard Data

The term nonstandard data refers to character and numeric data that SAS does not recognize automatically.

Examples of nonstandard numeric data include12/12/201229FEB20004,242 $89,000

Page 28: 22280710 SAS Accessing Data

Create a SAS Data Set from a Raw Data FileCreate a SAS Data Set from a Raw Data File

A raw data file contains employee information for the level 1 flight attendants. Use the raw data file to create the work.fltat1 SAS data set.

E1232 15OCT1999 61065E2341 01JUN1997 91688E3452 26OCT1993 32639E6781 16SEP1992 28305E8321 26NOV1996 40440E1052 27FEB1997 39461E1062 10MAY1987 41463E8172 06JAN2000 40650E1091 20AUG1991 40950

Page 29: 22280710 SAS Accessing Data

Desired OutputDesired Output

HireObs EmpID Date Salary Bonus

1 E1232 14532 61065 3053.25 2 E2341 13666 91688 4584.40 3 E3452 12352 32639 1631.95 4 E6781 11947 28305 1415.25 5 E8321 13479 40440 2022.00 6 E1052 13572 39461 1973.05 7 E1062 9991 41463 2073.15 8 E8172 14615 40650 2032.50 9 E1091 11554 40950 2047.50

Page 30: 22280710 SAS Accessing Data

The DATA StatementThe DATA Statement

A DATA step always begins with a DATA statement.

General form of a DATA statement:

The DATA statement starts the DATA step and names the SAS data set being created.

DATA SAS-data-set;DATA SAS-data-set;

Page 31: 22280710 SAS Accessing Data

The INFILE StatementThe INFILE Statement

If you are reading data from a raw data file, you need an INFILE statement.

General form of an INFILE statement:

The INFILE statement points to the raw data file being read. Options in the INFILE statement affect how SAS reads the raw data file.

INFILE 'raw-data-file' <options>;INFILE 'raw-data-file' <options>;

Page 32: 22280710 SAS Accessing Data

The INPUT StatementThe INPUT Statement

When you are reading from a raw data file, the INPUT statement follows the INFILE statement.

General form of an INPUT statement:

The INPUT statement describes the raw data fields and specifies how you want them converted into SAS variables.

INPUT variable-specification …;INPUT variable-specification …;

Page 33: 22280710 SAS Accessing Data

Formatted InputFormatted Input

The input style tells SAS where to find the fields and how to read them into SAS.

@n - moves the pointer to the starting point of the field.

variable-name - names the SAS variable being created.

Informat - specifies how many positions to read and how to convert the raw data into a SAS value.

INPUT @n variable-name informat. ...;INPUT @n variable-name informat. ...;

Page 34: 22280710 SAS Accessing Data

The INPUT StatementThe INPUT Statement

Common SAS informats:

$w. - reads a standard character field, where w specifies the width of the field in bytes.

W - reads a standard numeric field, where w specifies the width of the field in bytes.

DATE9. - reads dates in the form 31DEC2012.

Page 35: 22280710 SAS Accessing Data

The Assignment StatementThe Assignment Statement

To create a new variable in the DATA step, use an assignment statement:

The assignment statement creates a SAS variable and specifies how to calculate that variable's value.

variable-name=expression;variable-name=expression;

Page 36: 22280710 SAS Accessing Data

Create a SAS Data Set from a Raw Data FileCreate a SAS Data Set from a Raw Data File

data work.fltat1; infile 'raw-data-file'; input @1 EmpID $5. @7 HireDate date9. @17 Salary 5.; Bonus=.05*Salary;run;

Page 37: 22280710 SAS Accessing Data

Create a SAS Data Set from a Raw Data FileCreate a SAS Data Set from a Raw Data File

NOTE: 9 records were read from the infile 'fltat1.dat'. The minimum record length was 21. The maximum record length was 21.NOTE: The data set WORK.FLTAT1 has 9 observations and 4 variables.

Partial Log

Page 38: 22280710 SAS Accessing Data

Overview of DATA Step ProcessingOverview of DATA Step Processing

Page 39: 22280710 SAS Accessing Data

Processing the DATA StepProcessing the DATA Step

The SAS System processes the DATA step in two phases: compilation execution.

When you submit a DATA step for execution, SAS checks the syntax of the SAS statements and compiles them. During the compile phase, SAS creates the following three items input buffer

is a logical area in memory into which SAS reads each record of raw data when SAS executes an INPUT statement.

program data vector (PDV) is a logical area in memory where SAS builds a data set, one

observation at a time. When a program executes, SAS reads data values from the input buffer or creates them by executing SAS language statements.

Page 40: 22280710 SAS Accessing Data

DATA Step ProcessingDATA Step Processing

The data values are assigned to the appropriate variables in the program data vector. From here, SAS writes the values to a SAS data set as a single observation Along with data set variables and computed variables, the PDV contains two automatic variables, _N_ and _ERROR_. The _N_ variable counts the number of times the DATA step begins to iterate. The _ERROR_ variable signals the occurrence of an error caused by the data during execution.

descriptor information is information that SAS creates and maintains about

each SAS data set, including data set attributes and variable attributes. It contains, for example, the name of the data set and its member type, the date and time that the data set was created, and the number, names and data types (character or numeric) of the variables.

Page 41: 22280710 SAS Accessing Data

DATA Step ProcessingDATA Step Processing

The flow of action in the Execution Phase of a simple DATA step The DATA step begins with a DATA statement. Each time

the DATA statement executes, a new iteration of the DATA step begins, and the _N_ automatic variable is incremented by 1.

SAS sets the newly created program variables to missing in the program data vector (PDV).

SAS reads a data record from a raw data file into the input buffer, or it reads an observation from a SAS data set directly into the program data vector. You can use an INPUT, MERGE, SET, MODIFY, or UPDATE statement to read a record.

SAS executes any subsequent programming statements for the current record.

Page 42: 22280710 SAS Accessing Data

DATA Step ProcessingDATA Step Processing

At the end of the statements, an output, return, and reset occur automatically. SAS writes an observation to the SAS data set, the system automatically returns to the top of the DATA step, and the values of variables created by INPUT and assignment statements are reset to missing in the program data vector. Note that variables that you read with a SET, MERGE, MODIFY, or UPDATE statement are not reset to missing here.

SAS counts another iteration, reads the next record or observation, and executes the subsequent programming statements for the current observation.

The DATA step terminates when SAS encounters the end-of-file in a SAS data set or a raw data file.

Page 43: 22280710 SAS Accessing Data

DATA stepDATA step

Reading External File Data

data bonus_04; [1] infile 'your-input-file'; [2] input IDnumber name $ salary ; [3] bonus=salary * 0.25; [4] run; [5]

1- Begin the DATA step and create a SAS data set called bonus_04.

2- Specify the external file that contains your data.

3- Read a record and assign values to three variables.

4- Calculate a value for variable bonus. 5- Execute the DATA step.

Page 44: 22280710 SAS Accessing Data

DATA step Input StylesDATA step Input Styles

The INPUT statement reads raw data from instream data lines or external files into a SAS data set and input styles depending on the layout of data values in the records.

INPUT, Formatted - Reads input values from specified columns and assigns them to the corresponding SAS variables

INPUT, Column - Reads input values with specified informats and assigns them to the corresponding SAS variables

INPUT, List - Scans the input data record for input values and assigns them to the corresponding SAS variables

INPUT, Named - Reads data values that appear after a variable name that is followed by an equal sign and assigns them to corresponding SAS variables

Page 45: 22280710 SAS Accessing Data

DATA step DATA step

An informat is an instruction that SAS uses to read data values into a variable.The INPUT statement with an informat after a

variable name is the simplest way to read values into a variable.

$w. - Reads standard character data DATEw. - Reads date values in the form ddmmmyy

or

ddmmmyyyy MMDDYYw. - Reads date values in the form mmddyy

or

mmddyyyy w.d - Reads standard numeric data COMMAw.d - Removes embedded characters

Page 46: 22280710 SAS Accessing Data

Accessing Data – List inputAccessing Data – List input

List input uses a scanning method for locating data values. Data values are must be separated by at least one blank (or other defined delimiter). List input requires only that you specify the variable names and a dollar sign ($), if defining a character variable. Libname new “/wipro/dw/data”; data new.scores; length name $ 12; input name $ score1 score2; datalines; aaaaaa 1132 1187 bbbbbbbb 1015 1102 cccc 246 357 ; Run;

Page 47: 22280710 SAS Accessing Data

Modified List Input Modified List Input

data scores; infile datalines dsd; input Name : $9. Score1-Score3 Team ~ $25. Div $;datalines;Smith,12,22,46,"Green Hornets, Atlanta",AAA Mitchel,23,19,25,"High Volts, Portland",AAA Jones,09,17,54,"Vulcans, Las Vegas",AA;run;

outputName Score1 Score2 Score3 Team

Div Smith 12 22 46 "Green Hornets, Atlanta“AAA Mitchel 23 19 25 "High Volts, Portland“

AAAJones 09 17 54 "Vulcans, Las Vegas“

AA

Page 48: 22280710 SAS Accessing Data

Modified List InputModified List Input

The : (colon) format modifier enables you to use list input but also to specify an informat after a variable name, whether character or numeric. SAS reads until it encounters a blank column.

The ~ (tilde) format modifier enables you to read and retain single quotation marks, double quotation marks, and delimiters within character values.

If you want SAS to read consecutive delimiters as though there is a missing value between them, specify the DSD option in the INFILE statment.

To read and store a character input value longer than 8 bytes, define a variable's length by using a LENGTH, INFORMAT.

Character values cannot contain embedded blanks when the file is delimited by blanks.

Fields must be read in order. Data must be in standard numeric or character format.

Page 49: 22280710 SAS Accessing Data

Data Accessing - Column Input Data Accessing - Column Input

Column input enables you to read standard data values that are aligned in columns in the data records. Specify the variable name, followed by a dollar sign ($) if it is a character variable, and specify the columns in which the data values are located in each record:

data scores; infile datalines truncover; input name $ 1-12 score1 17-20 score2 27-30;datalines;123456789101112131415161718192021222324252627282930Riley 1132 987Henderson 1015 1102; run;

Page 50: 22280710 SAS Accessing Data

Data Accessing - Column InputData Accessing - Column Input

To use column input, data values must be in the same field on all the input lines in standard numeric or character form.

Features of column input include the following Character values can contain embedded blanks. Character values can be from 1 to 32,767 characters long. Placeholders, such as a single period (.), are not required for

missing data. Input values can be read in any order, regardless of their

position in the record. Values or parts of values can be reread. Both leading and trailing blanks within the field are ignored. Values do not need to be separated by blanks or other

delimiters. Use the TRUNCOVER option on the INFILE statement to

ensure that SAS handles data values of varying lengths appropriately.  

Page 51: 22280710 SAS Accessing Data

Data Accessing - Formatted Input Data Accessing - Formatted Input Formatted input combines the flexibility of using

informats with many of the features of column input. By using formatted input, you can read nonstandard data for which SAS requires additional instructions. Formatted input is typically used with pointer controls that enable you to control the position of the input pointer in the input buffer when you read data.

data scores; input name $12. +4 score1 comma5. +6 score2

comma5.; datalines;Riley 1,132 1,187Henderson 1,015 1,102;

Page 52: 22280710 SAS Accessing Data

Data Accessing - Formatted InputData Accessing - Formatted InputImportant points about formatted input are

Characters values can contain embedded blanks. Character values can be from 1 to 32,767

characters long. Placeholders, such as a single period (.), are not

required for missing data. With the use of pointer controls to position the

pointer, input values can be read in any order, regardless of their positions in the record.

Values or parts of values can be reread. Formatted input enables you to read data stored

in nonstandard form, such as packed decimal or numbers with commas.

Page 53: 22280710 SAS Accessing Data

Data Accessing - Named Input Data Accessing - Named Input

You can use named input to read records in which data values are preceded by the name of the variable and an equal sign (=). The following INPUT statement reads the data lines containing equal signs.

data games; input name=$ score1= score2=; datalines;name=abc score1=1132 score2=1187;run;

Page 54: 22280710 SAS Accessing Data

The MISSOVER OptionThe MISSOVER Option

The MISSOVER option prevents SAS from loading a new record when the end of the current record is reached.

General form of the INFILE statement with the MISSOVER option:

If SAS reaches the end of the row without finding values for all fields, variables without values are set to missing.

INFILE ‘raw-data-file’ MISSOVER;INFILE ‘raw-data-file’ MISSOVER;

Page 55: 22280710 SAS Accessing Data

Using the MISSOVER OptionUsing the MISSOVER Option

data airplanes3; length ID $ 5; infile 'raw-data-file' dlm=',' missover; input ID $ InService : date9. PassCap CargoCap;run;

50001 ,25feb1989,132, 53050002, 11nov1989,152 50003, 22oct1991,168, 53050004, 4feb1993,17250005, 24jun1993, 170, 51050006, 20dec1994, 180, 520

Raw Data File

Page 56: 22280710 SAS Accessing Data

Using the MISSOVER OptionUsing the MISSOVER Option

NOTE: 6 records were read from the infile 'aircraft3.dat'. The minimum record length was 19. The maximum record length was 26.NOTE: The data set WORK.AIRPLANES3 has 6 observations and 4 variables.NOTE: DATA statement used: real time 0.42 seconds cpu time 0.07 seconds

Partial SAS Log

Page 57: 22280710 SAS Accessing Data

Missing Values without PlaceholdersMissing Values without PlaceholdersThere is missing data represented by two

consecutive delimiters.

50001 ,25feb1989,, 54050002, 11nov1989,132, 53050003, 22oct1991,168, 53050004, 4feb1993,172, 55050005, 24jun1993,, 51050006, 20dec1994, 180,520

Page 58: 22280710 SAS Accessing Data

Missing Values without PlaceholdersMissing Values without PlaceholdersBy default, SAS treats two consecutive

delimiters as one. Missing data should be represented by a placeholder.

The DSD OptionGeneral form of the DSD option in the INFILE

statement:

5 0 0 0 1 ,25feb1989 , . , 5 3 0

INFILE ‘file-name’ DSD;INFILE ‘file-name’ DSD;

Page 59: 22280710 SAS Accessing Data

Missing Values without PlaceholdersMissing Values without PlaceholdersThe DSD option

sets the default delimiter to a commatreats consecutive delimiters as missing valuesenables SAS to read values with embedded

delimiters if the value issurrounded by double quotes.

Page 60: 22280710 SAS Accessing Data

Using the DSD OptionUsing the DSD Option

data airplanes4; length ID $ 5; infile 'raw-data-file' dsd; input ID $ InService : date9. PassCap CargoCap;run;

50001 ,25feb1989,, 54050002, 11nov1989,132, 53050003, 22oct1991,168, 53050004, 4feb1993,172, 55050005, 24jun1993,, 51050006, 20dec1994, 180,520

Page 61: 22280710 SAS Accessing Data

INFILE Statement OptionsINFILE Statement Options

Problem Option

Non-blank delimiters

DLM='delimiter(s)'

Missing data at end of row MISSOVER

Missing data represented by consecutive delimiters or Embedded delimiters where values are surrounded by double quotes

DSD

These options can be used separately or together in the INFILE statement.

Page 62: 22280710 SAS Accessing Data

Multiple Records Per ObservationMultiple Records Per Observation

Farr, SueAnaheim, CA869-7008Anderson, Kay B.Chicago, IL483-3321Tennenbaum, Mary AnnJefferson, MO589-9030

A raw data file has three records per employee. Record 1 contains the first and last names, record 2 contains the city and state of residence, and record 3 contains the employee’s phone number.

Page 63: 22280710 SAS Accessing Data

Desired OutputDesired Output

The SAS data set should have one observation per employee.

LName FName City State Phone

Farr Sue Anaheim CA 869-7008Anderson Kay B. Chicago IL 483-3321Tennenbaum Mary Ann Jefferson MO 589-9030

Page 64: 22280710 SAS Accessing Data

Multiple INPUT StatementsMultiple INPUT Statements

data address; length LName FName $ 20 City $ 25 State $ 2 Phone $ 8; infile 'raw-data-file' dlm=','; input LName $ FName $; input City $ State $; input Phone $;run;

Load Record

Load Record

Load Record

Page 65: 22280710 SAS Accessing Data

Line Pointer ControlsLine Pointer Controls

You can also use line pointer controls to control when SAS loads a new record.

SAS loads the next record when it encounters a forward slash.

DATA SAS-data-set; INPUT var-1 var-2 var-3 / var-4 var-5; additional SAS statements

DATA SAS-data-set; INPUT var-1 var-2 var-3 / var-4 var-5; additional SAS statements

Page 66: 22280710 SAS Accessing Data

Reading Multiple Records Per ObservationReading Multiple Records Per Observation

data address; length LName FName $ 20 City $ 25 State $ 2 Phone $ 8; infile 'raw-data-file' dlm=','; input LName $ FName $ / City $ State $ / Phone $;run;

Load Record Load Record

Load Record

Page 67: 22280710 SAS Accessing Data

Reading Multiple Records Per ObservationReading Multiple Records Per ObservationPartial Log

NOTE: 9 records were read from the infile 'addresses.dat'. The minimum record length was 8. The maximum record length was 20.NOTE: The data set WORK.ADDRESS has 3 observations and 5 variables.

Page 68: 22280710 SAS Accessing Data

Reading Raw Data Files with Multiple Records Per Observation

Reading Raw Data Files with Multiple Records Per ObservationMixed Record Types

101 USA 1-20-1999 3295.503034 EUR 30JAN1999 1876,30101 USA 1-30-1999 2938.00128 USA 2-5-1999 2908.741345 EUR 6FEB1999 3145,60 109 USA 3-17-1999 2789.10

Page 69: 22280710 SAS Accessing Data

Reading Raw Data Files with Multiple Records Per Observation

Reading Raw Data Files with Multiple Records Per ObservationDesired Output

Sales Sale ID Location Date Amount

101 USA 14264 3295.503034 EUR 14274 1876.30101 USA 14274 2938.00128 USA 14280 2908.741345 EUR 14281 3145.60109 USA 14320 2789.10

Page 70: 22280710 SAS Accessing Data

Reading Raw Data Files with Multiple Records Per Observation

Reading Raw Data Files with Multiple Records Per ObservationThe Single Trailing @

The single trailing @ option holds a raw data record in the input buffer until SAS

executes an INPUT statement with no trailing @ reaches the bottom of the DATA step.

General form of an INPUT statement with the single trailing @:

INPUT var1 var2 var3 … @;INPUT var1 var2 var3 … @;

Page 71: 22280710 SAS Accessing Data

Reading Raw Data Files with Multiple Records Per Observation

Reading Raw Data Files with Multiple Records Per ObservationProcessing the Trailing @

input SalesID $ Location $ @;if location='USA' then input SaleDate : mmddyy10. Amount; else if Location='EUR' then input SaleDate : date9. Amount : commax8.;

Hold record for next INPUT statement.

Load next record.

Page 72: 22280710 SAS Accessing Data

Multiple Observations Per RecordMultiple Observations Per RecordThe raw data file RETIRE contains each

employee’s identification number and this year’s contribution to his or her retirement plan. Each record contains information for three employees.E00973 1400 E09872 2003 E73150 2400 E45671 4500 E34805 1980 E47200 4371

Desired Output EmpID Contrib

E00973 1400 E09872 2003 E73150 2400 E45671 4500 E34805 1980 E47200 4371

Page 73: 22280710 SAS Accessing Data

Multiple Observations Per RecordMultiple Observations Per Record Processing: What Is Required?

E00973 1400 E09872 2003 E73150 2400

Read for Obs. 1

Process Other

Statements

Output

Read for Obs. 2

Process Other

Statements

Output

Read for Obs. 3

Process Other

Statements

Output

Page 74: 22280710 SAS Accessing Data

Multiple Observations Per RecordMultiple Observations Per RecordThe Double Trailing @

The double trailing @ holds the raw data record across iterations of the DATA step until the line pointer moves past the end of the line.

INPUT var1 var2 var3 … @@;INPUT var1 var2 var3 … @@;

data work.retire; length EmpID $ 6; infile 'raw-data-file'; input EmpID $ Contrib @@;run; Hold until end of

record.

Page 75: 22280710 SAS Accessing Data

Multiple Observations Per RecordMultiple Observations Per RecordPartial Log

NOTE: 2 records were read from the infile 'retire.dat'. The minimum record length was 35. The maximum record length was 36.NOTE: SAS went to a new line when INPUT statement reached past the end of a line.NOTE: The data set WORK.RETIRE has 6 observations and 2 variables.

The “SAS went to a new line” message is expected because the @@ option indicates that SAS should read until the end of each record.

Page 76: 22280710 SAS Accessing Data

Multiple Observations Per RecordMultiple Observations Per Record

Option Effect

Trailing @ INPUT var-1... @;

Holds raw data record until 1) an INPUT statement with no trailing @ 2) the bottom of the DATA step.

Double trailing @ INPUT var-1 ... @@;

Holds raw data records in input buffer until SAS reads past end of line.

Trailing @ Versus Double Trailing @

Page 77: 22280710 SAS Accessing Data

Reading Hierarchical Raw Data FilesReading Hierarchical Raw Data FilesProcessing Hierarchical Files•Many files are hierarchical in structure, consisting of a

•header record •one or more related detail records.

Typically, each record contains a field that identifies whether it is a header record or a detail record.

HeaderDetailDetailHeaderHeaderDetailHeaderDetailDetail

Page 78: 22280710 SAS Accessing Data

Reading Hierarchical Raw Data FilesReading Hierarchical Raw Data FilesProcessing Hierarchical FilesYou can read a hierarchical file into a SAS data set by creating one observation per detail record and storing the header information as partof each observation.

Hierarchical File

Header Variables

Header 1Header 1Header 1Header 2Header 3Header 3

Detail Variables

Detail 1Detail 2Detail 3Detail 1Detail 1Detail 2

SAS Data Set

Header 1Detail 1Detail 2Detail 3Header 2Detail 1Header 3Detail 1Detail 2

Page 79: 22280710 SAS Accessing Data

Reading Hierarchical Raw Data FilesReading Hierarchical Raw Data FilesCreating One Observation Per Detail

E:Adams:SusanD:Michael:CD:Lindsay:CE:Porter:DavidD:Susan:SE:Lewis:Dorian D.D:Richard:CE:Dansky:IanE:Nicholls:JamesD:Roberta:CE:Slaydon:MarlaD:John:S

The raw data file DEPENDANTS has a header record containing the name of the employee and a detail record for each dependant on the employee’s health insurance.

Page 80: 22280710 SAS Accessing Data

Reading Hierarchical Raw Data FilesReading Hierarchical Raw Data FilesDesired Output

Personnel would like a list of all the dependants and the name of the

associated employee.

EmpLName EmpFName DepName Relation

Adams Susan Michael C Adams Susan Lindsay C Porter David Susan S Lewis Dorian D. Richard C Nicholls James Roberta C Slaydon Marla John S

Page 81: 22280710 SAS Accessing Data

Reading Hierarchical Raw Data FilesReading Hierarchical Raw Data FilesThe RETAIN Statement General form of the RETAIN statement:

The RETAIN statement prevents SAS from reinitializing the values of

new variables at the top of the DATA step. This means that values from

previous records are available for processing.

RETAIN variable-name <initial-value>;RETAIN variable-name <initial-value>;

Page 82: 22280710 SAS Accessing Data

Reading Hierarchical Raw Data FilesReading Hierarchical Raw Data FilesHold EmpLName and EmpFNamedata dependants(drop=Type); length EmpLName EmpFName DepName $ 20 Relation $ 1; retain EmpLName EmpFName; infile 'raw-data-file' dlm=':'; input Type $ @; if Type='E' then input EmpLName $ EmpFName $; else do; input DepName $ Relation $; output; end;run;

Page 83: 22280710 SAS Accessing Data

Example – Modified List InputExample – Modified List Input

This example explainsCompilation PhaseExecution Phase.

Page 84: 22280710 SAS Accessing Data

Example – Modified List InputExample – Modified List Input

ID$5

data airplanes; length ID $ 5; infile 'raw-data-file'; input ID $ InService : date9. PassCap CargoCap;run;

50001 4feb1989 132 53050002 11nov1989 152 54050003 22oct1991 90 53050004 4feb1993 172 55050005 24jun1993 170 51050006 20dec1994 180 520

Raw Data File Compile

PDV

Input Buffer

Page 85: 22280710 SAS Accessing Data

ID$5

PASSCAPN8

CARGOCAPN8

INSERVICEN8

data airplanes; length ID $ 5; infile 'raw-data-file'; input ID $ InService : date9. PassCap CargoCap;run;

50001 4feb1989 132 53050002 11nov1989 152 54050003 22oct1991 90 53050004 4feb1993 172 55050005 24jun1993 170 51050006 20dec1994 180 520

Raw Data File Compile

PDV

Input Buffer

...

Page 86: 22280710 SAS Accessing Data

50001 4feb1989 132 53050002 11nov1989 152 54050003 22oct1991 90 53050004 4feb1993 172 55050005 24jun1993 170 51050006 20dec1994 180 520

Raw Data File Execute

PDV

data airplanes; length ID $ 5; infile 'raw-data-file'; input ID $ InService : date9. PassCap CargoCap;run;

Input Buffer

ID$5

PASSCAPN8

.

CARGOCAPN8

.

INSERVICEN8

....

Page 87: 22280710 SAS Accessing Data

50001 4feb1989 132 53050002 11nov1989 152 54050003 22oct1991 90 53050004 4feb1993 172 55050005 24jun1993 170 51050006 20dec1994 180 520

Raw Data File

PDV

data airplanes; length ID $ 5; infile 'raw-data-file'; input ID $ InService : date9. PassCap CargoCap;run;

Input Buffer

5 0 0 0 1 4 f e b 1 9 8 9 1 3 2 5 3 0

ID$5

PASSCAPN8

.

CARGOCAPN8

.

INSERVICEN8

....

Page 88: 22280710 SAS Accessing Data

ID$5

PASSCAPN8

.

CARGOCAPN8

.

INSERVICEN8

.

50001 4feb1989 132 53050002 11nov1989 152 54050003 22oct1991 90 53050004 4feb1993 172 55050005 24jun1993 170 51050006 20dec1994 180 520

Raw Data File

PDV

50001 10627 132 530

data airplanes; length ID $ 5; infile 'raw-data-file'; input ID $ InService : date9. PassCap CargoCap;run;

Input Buffer

...

5 0 0 0 1 4 f e b 1 9 8 9 1 3 2 5 3 0

Page 89: 22280710 SAS Accessing Data

Write out observation to airplanes.

data airplanes; length ID $ 5; infile 'raw-data-file'; input ID $ InService : date9. PassCap CargoCap;run;

50001 4feb1989 132 53050002 11nov1989 152 54050003 22oct1991 90 53050004 4feb1993 172 55050005 24jun1993 170 51050006 20dec1994 180 520

Raw Data File

ID$5

PASSCAPN8

.

CARGOCAPN8

.

INSERVICEN8

.

PDV

50001 10627 132 530

Input BufferImplicit output

Implicit return

...

5 0 0 0 1 4 f e b 1 9 8 9 1 3 2 5 3 0

Page 90: 22280710 SAS Accessing Data

Write out observation to airplanes.

data airplanes; length ID $ 5; infile 'raw-data-file'; input ID $ InService : date9. PassCap CargoCap;run;

50001 4feb1989 132 53050002 11nov1989 152 54050003 22oct1991 90 53050004 4feb1993 172 55050005 24jun1993 170 51050006 20dec1994 180 520

Raw Data File

ID$5

PASSCAPN8

.

CARGOCAPN8

.

INSERVICEN8

.

PDV

50001 10627 132 530

Input BufferImplicit output

...

5 0 0 0 1 4 f e b 1 9 8 9 1 3 2 5 3 0

Page 91: 22280710 SAS Accessing Data

data airplanes; length ID $ 5; infile 'raw-data-file'; input ID $ InService : date9. PassCap CargoCap;run;

50001 4feb1989 132 53050002 11nov1989 152 54050003 22oct1991 90 53050004 4feb1993 172 55050005 24jun1993 170 51050006 20dec1994 180 520

Raw Data File

ID$5

PASSCAPN8

.

CARGOCAPN8

.

INSERVICEN8

.

PDV

50001 10627 132 530

Input BufferImplicit return

...

5 0 0 0 1 4 f e b 1 9 8 9 1 3 2 5 3 0

Page 92: 22280710 SAS Accessing Data

ID$5

PASSCAPN8

.

CARGOCAPN8

.

INSERVICEN8

.

50001 4feb1989 132 53050002 11nov1989 152 54050003 22oct1991 90 53050004 4feb1993 172 55050005 24jun1993 170 51050006 20dec1994 180 520

Raw Data File

PDV

data airplanes; length ID $ 5; infile 'raw-data-file'; input ID $ InService : date9. PassCap CargoCap;run;

Input Buffer

...

5 0 0 0 1 4 f e b 1 9 8 9 1 3 2 5 3 0

Page 93: 22280710 SAS Accessing Data

ID$5

PASSCAPN8

.

CARGOCAPN8

.

INSERVICEN8

.

50001 4feb1989 132 53050002 11nov1989 152 54050003 22oct1991 90 53050004 4feb1993 172 55050005 24jun1993 170 51050006 20dec1994 180 520

Raw Data File

PDV

10907 152 54050002

data airplanes; length ID $ 5; infile 'raw-data-file'; input ID $ InService : date9. PassCap CargoCap;run;

Input Buffer

5 0 0 0 2 1 1 n o v 1 9 8 9 1 5 2 5 4 0

...

Page 94: 22280710 SAS Accessing Data

Write out observation to airplanes.

data airplanes; length ID $ 5; infile 'raw-data-file'; input ID $ InService : date9. PassCap CargoCap;run;

50001 4feb1989 132 53050002 11nov1989 152 54050003 22oct1991 90 53050004 4feb1993 172 55050005 24jun1993 170 51050006 20dec1994 180 520

Raw Data File

ID$5

PASSCAPN8

.

CARGOCAPN8

.

INSERVICEN8

.

PDV

10907 152 54050002

Input BufferImplicit output

Implicit return

...

5 0 0 0 2 1 1 n o v 1 9 8 9 1 5 2 5 4 0

Page 95: 22280710 SAS Accessing Data

data airplanes; length ID $ 5; infile 'raw-data-file'; input ID $ InService : date9. PassCap CargoCap;run;

50001 4feb1989 132 53050002 11nov1989 152 54050003 22oct1991 90 53050004 4feb1993 172 55050005 24jun1993 170 51050006 20dec1994 180 520

Raw Data File

ID$5

PASSCAPN8

.

CARGOCAPN8

.

INSERVICEN8

.

PDV

10907 152 54050002

Input BufferImplicit output

...

5 0 0 0 2 1 1 n o v 1 9 8 9 1 5 2 5 4 0

Page 96: 22280710 SAS Accessing Data

data airplanes; length ID $ 5; infile 'raw-data-file'; input ID $ InService : date9. PassCap CargoCap;run;

50001 4feb1989 132 53050002 11nov1989 152 54050003 22oct1991 90 53050004 4feb1993 172 55050005 24jun1993 170 51050006 20dec1994 180 520

Raw Data File

ID$5

PASSCAPN8

.

CARGOCAPN8

.

INSERVICEN8

.

PDV

10907 152 54050002

Input BufferImplicit return

...

5 0 0 0 2 1 1 n o v 1 9 8 9 1 5 2 5 4 0

Page 97: 22280710 SAS Accessing Data

ID$5

PASSCAPN8

.

CARGOCAPN8

.

INSERVICEN8

.

50001 4feb1989 132 53050002 11nov1989 152 54050003 22oct1991 90 53050004 4feb1993 172 55050005 24jun1993 170 51050006 20dec1994 180 520

Raw Data File

PDV

data airplanes; length ID $ 5; infile 'raw-data-file'; input ID $ InService : date9. PassCap CargoCap;run;

Input Buffer

5 0 0 0 2 1 1 n o v 1 9 8 9 1 5 2 5 4 0 Continue processing until end of the raw data file.

Page 98: 22280710 SAS Accessing Data

proc print data=airplanes noobs;run;

In Pass Cargo ID Service Cap Cap

50001 10627 132 53050002 10907 152 54050003 11617 168 53050004 12088 172 55050005 12228 170 51050006 12772 180 520

Output of DatasetOutput of Dataset

Page 99: 22280710 SAS Accessing Data

Combining SAS Data SetsCombining SAS Data Sets

Create a Data set from two or more existing data sets by joining observation side-by-side or appends the observations from one data set to another data set.

Methods to combine SAS data setsconcatenating interleaving one-to-one reading one-to-one merging match merging updating.

Page 100: 22280710 SAS Accessing Data

Combine SAS data setsCombine SAS data sets

Concatenating Concatenating the data

sets appends the observations from one data set to another data set. The DATA step reads DATA1 sequentially until all observations have been processed, and then reads DATA2. Data set COMBINED contains the results of the concatenation.

Page 101: 22280710 SAS Accessing Data

Combine SAS data setsCombine SAS data sets

Interleaving intersperses

observations from two or more data sets, based on one or more common variables.

Page 102: 22280710 SAS Accessing Data

Combine SAS data setsCombine SAS data sets

One-to-One Reading and One-to-One Merging. One-to-one reading combines

observations from two or more SAS data sets by creating observations that contain all of the variables from each contributing data set. Observations are combined based on their relative position in each data set. The DATA step stops after it has read the last observation from the smallest data set. One-to-one merging is similar to a one-to-one reading, with two exceptions: you use the MERGE statement instead of multiple SET statements, and the DATA step reads all observations from all data sets.

Page 103: 22280710 SAS Accessing Data

Combine SAS data setsCombine SAS data sets

Match merging combines observations

from two or more SAS data sets into a single observation in a new data set based on the values of one or more common variables.

Page 104: 22280710 SAS Accessing Data

Combine SAS data setsCombine SAS data sets

Identifying Data Set Contributors When you read multiple SAS data sets in one DATA step,

you can use the IN= data set option to detect which data set contributed to an observation.

General form of the IN= data set option:

where variable is any valid SAS variable name. Variable is a temporary numeric variable with a value of:

0 to indicate false; the data set did not contribute to the currentobservation

1 to indicate true; the data set did contribute to the current observation

SAS-data-set(IN=variable)SAS-data-set(IN=variable)

Page 105: 22280710 SAS Accessing Data

Combine SAS data setsCombine SAS data sets

IN= Data Set OptionTransact Branch

Num Trans Amnt111 D 126.32111 C 560113 C 235114 D 14.56116 C 371.69

Num Branch111 M.G.Road112 Sivaji Nagar114 Madiwala115 Koramangala116 BTM

A data set named Newtrans shows this week’s transactions. A data set named noactiv shows accounts with no transactions this week. A data set named noacct shows transactions with no matching account number.

Page 106: 22280710 SAS Accessing Data

Combine SAS data setsCombine SAS data sets

Transact Branch

Num Trans Amnt111 D 126.32111 C 560113 C 235114 D 14.56116 C 371.69

Num Branch111 M.G.Road112 Sivaji Nagar114 Madiwala115 Koramangala116 BTM

data newtrans noactiv (drop=Trans Amnt) noacct (drop=Branch); merge prog2.transact(in=InTrans) prog2.branch(in=InBanks); by ActNum; if InTrans and InBanks then output newtrans; else if InBanks and not InTrans then output noactiv; else if InTrans and not InBanks then output noacct;run;

Page 107: 22280710 SAS Accessing Data

Combine SAS data setsCombine SAS data sets

A data set named Newtrans shows this week’s transactions.Num Trans Amnt Branch

111 D 126.32 M.G.Road111 C 560 M.G.Road 114 D 14.56 Madiwala116 C 371.69 BTM

A data set named noactiv shows accounts with no transactions this week.Num Branch

112 Sivaji Nagar115 Koramangala

A data set named noacct shows transactions with no matching account number. Num Trans Amnt

113 C 235

Page 108: 22280710 SAS Accessing Data

Questions