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.
An engine can
limit read/write activity for a SAS data set to read-only
fully support updating, deleting, renaming, or redefining the attributes of the data set and its variables
support only some of these functions.
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.
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. |
multiple-pass | 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.
Some features of SAS require that data sets support different levels at which update access is allowed. 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 allows 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 access. Record-level locking allows 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= allows locking at three levels:
library
data set
observation.
Here are some situations in which you should consider using the CNTLLEV= data set option:
your application controls access to the data, such as in SAS Component Language (SCL), SAS/IML software, or DATA step programming
you access data through an interface engine that does not provide member-level control of the data.
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.
The Base SAS engine and other engines are able to process several different tasks concurrently. For example, you can enter statements into the Program Editor at the same time that PROC SORT is processing a large file. The reason that this is possible is that the engine allows task switching.
Task switching is possible because the engine architecture supports the ability to start one task before another task is finished, or to handle work 'asynchronously.' This ability allows for greater efficiencies during processing and often results in faster processing time. The ASYNCHIO system option controls this activity. For more information, see the ASYNCHIO system option in SAS Language Reference: Dictionary .
A major processing feature of SAS is the ability to access observations by the values of key variables with indexes. See 'Understanding SAS Indexes' on page 518 for more information on using indexes for SAS data files. Note that not all engines support indexing.