Previous Page | Next Page

SAS Engines

Engine Characteristics

The engine that is used to access a SAS data set determines its processing characteristics. Different statements and procedures require different processing characteristics. For example, the FSEDIT procedure requires the ability to update selected data values, and the POINT= option in the SET statement requires random access to observations as well as the ability to calculate observation numbers from record identifiers within the file.

The following figure describes the types of activities that engines regulate.

Activities That Engines Regulate

[Activities That Engines Regulate]

Read/Write Activity

An engine can

For example, the engines that process BMDP, OSIRIS, or SPSS files support read-only processing. Some engines that process SAS views permit SAS procedures to modify existing observations while others do not.

Access Patterns

SAS procedures and statements can read observations in SAS data sets in one of four general patterns:

sequential access

processes observations one after the other, starting at the beginning of the file and continuing in sequence to the end of the file.

random access

processes observations according to the value of some indicator variable without processing previous observations.

BY-group access

groups and processes observations in order of the values of the variables that are specified in a BY statement.


performs two or more passes on data when required by SAS statements or procedures.

If a SAS statement or procedure tries to access a SAS data set whose engine does not support the required access pattern, SAS prints an appropriate error message in the SAS log.

Levels of Locking

Some features of SAS require that data sets support different levels at which update access is used. When a SAS data set can be opened concurrently by more than one SAS session or by more than one statement or procedure within a single session, the level of locking determines how many sessions, procedures, or statements can read and write to the file at the same time. For example, with the FSEDIT procedure, you can request two windows on the same SAS data set in one session. Some engines support this capability; others do not.

The levels that are supported are record level and member (data set) level. Member-level locking enables read access to many sessions, statements, or procedures, but restricts all other access to the SAS data set when a session, statement, or procedure acquires update or output access. Record-level locking enables concurrent read access and update access to the SAS data set by more than one session, statement, or procedure, but prevents concurrent update access to the same observation. Not all engines support both levels.

By default, SAS provides the greatest possible level of concurrent access, while guaranteeing the integrity of the data. In some cases, you might want to guarantee the integrity of your data by controlling the levels of update access yourself. Use the CNTLLEV= data set option to control levels of locking. CNTLLEV= enables locking at three levels:

Here are some situations in which you should consider using the CNTLLEV= data set option:

For more information on the CNTLLEV= data set option, see SAS Language Reference: Dictionary.

You can also acquire an exclusive lock on an existing SAS file by issuing the LOCK global statement. After an exclusive lock is obtained, no other SAS session can read or write to the file until the lock is released. For more information on the LOCK statement, see SAS Language Reference: Dictionary.

Note:   SAS products, such as SAS/ACCESS and SAS/SHARE, contain engines that support enhanced session management services and file locking capabilities.  [cautionend]


A major processing feature of SAS is the ability to access observations by the values of key variables with indexes. See Understanding SAS Indexes for more information on using indexes for SAS data files. Note that not all engines support indexing.

Previous Page | Next Page | Top of Page