OBS= Data Set Option

Specifies the last row in a data source that SAS processes.
Valid in: DATA and PROC steps
Category: Observation Control
Default: MAX
Restriction: Use with input files only
Supports: All

Syntax

OBS= n | nK | nM | nG | nT | hexX | MIN | MAX

Syntax Description

n | nK | nM | nG | nT
specifies a number to indicate when to stop processing rows, with n being an integer. Using one of the letter notations results in multiplying the integer by a specific value. That is, specifying K (kilobytes) multiplies the integer by 1,024, M (megabytes) multiplies by 1,048,576, G (gigabytes) multiplies by 1,073,741,824, or T (terabytes) multiplies by 1,099,511,627,776. For example, a value of 20 specifies 20 rows, whereas a value of 3m specifies 3,145,728 rows.
hexX
specifies a number to indicate when to stop processing as a hexadecimal value. You must specify the value beginning with a number (0–9), followed by an X. For example, the hexadecimal value F8 must be specified as 0F8x in order to specify the decimal equivalent of 248. The value 2dx specifies the decimal equivalent of 45.
MIN
sets the number to indicate when to stop processing to 0. Use OBS=0 in order to create an empty data set that has the structure, but not the rows, of another data set.
Interaction:If OBS=0 and the NOREPLACE option is in effect, then SAS can still take certain actions because it actually executes each DATA and PROC step in the program, using no rows. For example, SAS executes procedures, such as CONTENTS and DATASETS, that process libraries or SAS data sets.
MAX
sets the number to indicate when to stop processing to the maximum number of rows in the data set, up to the largest 8-byte, signed integer, which is 263-1, or approximately 9.2 quintillion. This is the default.

Details

OBS= tells SAS when to stop processing rows. For example, if OBS=10 is specified, the result is ten rows or records.
OBS= is valid only when an existing data set is read.
In WHERE processing, SAS first subsets the data, and then applies OBS= to the subset. The FEDSVR engine does not have the concept of observation numbering from the original data set. It sends back the number of rows requested, numbered chronologically, regardless of where they occur in the data set.

Comparisons

  • The OBS= data set option overrides the OBS= system option for the individual data set.
  • The OBS= data set option specifies an ending point for processing. The FIRSTOBS= data set option specifies a starting point.
  • The OBS= data set option enables you to select rows from data sets. You can select rows to be read from external data files by using the OBS= option in the INFILE statement.

Examples

Example 1: Using OBS= to Specify When to Stop Processing Rows

This example illustrates the result of using OBS= to tell SAS when to stop processing rows. This example creates a SAS data set that contains 15 rows, and then executes the PRINT procedure with OBS=12. The result is 12 rows.
data myfiles.Ages;
   input Name $ Age;
   datalines;
Miguel 53
Brad 27
Willie 69
Marc 50
Sylvia 40
Gary 40
Becky 51
Alma 39
Tom 62
Kris 66
Paul 60
Randy 43
Barbara 52
Virginia 72
Arun 25
;
proc print data=myfiles.Ages (obs=12);
run;
PROC PRINT Output by Using OBS=
PROC PRINT Output by Using OBS=

Example 2: Using OBS= with WHERE Processing

This example illustrates the result of using OBS= along with WHERE processing. The example uses the data set that was created in Example 1, which contains 15 rows, and assumes that the SAS session has been reset to the defaults FIRSTOBS=1 and OBS=MAX. This example returns the first 10 rows that meet the WHERE criteria.
libname myfiles fedsvr server="d1234.us.company.com" 
   port=2171 user=user1 pwd=pass1
   dsn=basedsn;

options obs=10;
proc print data=myfiles.Ages;
  where Age LT 60;
run;
PROC PRINT Using a WHERE Statement and OBS=
PROC PRINT Using a WHERE Statement and OBS=