SAS Data Set Options |
Valid in: | DATA step and PROC steps |
Category: | Observation Control |
Default: | MAX |
Restriction: | Use with input data sets only |
Restriction: | Cannot use with PROC SQL views |
Syntax |
OBS= n | nK | nM | nG | nT | hexX | MIN | MAX |
specifies a number to indicate when to stop processing observations, with n being an integer. Using one of the letter notations results in multiplying the integer by a specific value. That is, specifying K (kilo) multiplies the integer by 1,024, M (mega) multiplies by 1,048,576, G (giga) multiplies by 1,073,741,824, or T (tera) multiplies by 1,099,511,627,776. For example, a value of 20 specifies 20 observations, while a value of 3m specifies 3,145,728 observations.
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.
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 observations, of another data set.
sets the number to indicate when to stop processing to the maximum number of observations in the data set, up to the largest 8-byte, signed integer, which is 2^{63}-1, or approximately 9.2 quintillion. This is the default.
Details |
OBS= tells SAS when to stop processing observations. To determine when to stop processing, SAS uses the value for OBS= in a formula that includes the value for OBS= and the value for FIRSTOBS=. The formula is
(obs - firstobs) + 1 = results
For example, if OBS=10 and FIRSTOBS=1 (which is the default for FIRSTOBS=), the result is ten observations, that is (10 - 1) + 1 = 10. If OBS=10 and FIRSTOBS=2, the result is nine observations, that is (10 - 2) + 1 = 9. OBS= is valid only when an existing SAS data set is read.
Comparisons |
The OBS= data set option overrides the OBS= system option for the individual data set.
While the OBS= data set option specifies an ending point for processing, the FIRSTOBS= data set option specifies a starting point. The two options are often used together to define a range of observations to be processed.
The OBS= data set option enables you to select observations from SAS data sets. You can select observations to be read from external data files by using the OBS= option in the INFILE statement.
Examples |
This example illustrates the result of using OBS= to tell SAS when to stop processing observations. This example creates a SAS data set and executes the PRINT procedure with FIRSTOBS=2 and OBS=12. The result is 11 observations, that is (12 - 2) + 1 = 11. The result of OBS= in this situation appears to be the observation number that SAS processes last, because the output starts with observation 2, and ends with observation 12. This situation is only a coincidence.
data Ages; input Name $ Age; datalines; Miguel 53 Brad 27 Willie 69 Marc 50 Sylvia 40 Arun 25 Gary 40 Becky 51 Alma 39 Tom 62 Kris 66 Paul 60 Randy 43 Barbara 52 Virginia 72 ; proc print data=Ages (firstobs=2 obs=12); run;
PROC PRINT Output Using OBS= and FIRSTOBS=
The SAS System 1 Obs Name Age 2 Brad 27 3 Willie 69 4 Marc 50 5 Sylvia 40 6 Arun 25 7 Gary 40 8 Becky 51 9 Alma 39 10 Tom 62 11 Kris 66 12 Paul 60
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 observations.
First, here is the PRINT procedure with a WHERE statement. The subset of the data results in 12 observations:
proc print data=Ages; where Age LT 65; run;
PROC PRINT Output Using a WHERE Statement
The SAS System 1 Obs Name Age 1 Miguel 53 2 Brad 27 4 Marc 50 5 Sylvia 40 6 Arun 25 7 Gary 40 8 Becky 51 9 Alma 39 10 Tom 62 12 Paul 60 13 Randy 43 14 Barbara 52
Executing the PRINT procedure with the WHERE statement and OBS=10 results in 10 observations, that is (10 - 1) + 1 = 10. Note that with WHERE processing, SAS first subsets the data and applies OBS= to the subset.
proc print data=Ages (obs=10); where Age LT 65; run;
PROC PRINT Output Using a WHERE Statement and OBS=
The SAS System 2 Obs Name Age 1 Miguel 53 2 Brad 27 4 Marc 50 5 Sylvia 40 6 Arun 25 7 Gary 40 8 Becky 51 9 Alma 39 10 Tom 62 12 Paul 60
The result of OBS= appears to be how many observations to process, because the output consists of 10 observations, ending with the observation number 12. However, the result is only a coincidence. If you apply FIRSTOBS=2 and OBS=10 to the subset, then the result is nine observations, that is (10 - 2) + 1 = 9. OBS= in this situation is neither the observation number to end with nor how many observations to process; the value is used in the formula to determine when to stop processing.
proc print data=Ages (firstobs=2 obs=10); where Age LT 65; run;
PROC PRINT Output Using WHERE Statement, OBS=, and FIRSTOBS=
The SAS System 3 Obs Name Age 2 Brad 27 4 Marc 50 5 Sylvia 40 6 Arun 25 7 Gary 40 8 Becky 51 9 Alma 39 10 Tom 62 12 Paul 60
This example illustrates the result of using OBS= for a data set that has deleted observations. The example uses the data set that was created in Example 1, with observation 6 deleted.
First, here is PROC PRINT output of the modified file:
proc print data=Ages; run;
PROC PRINT Output Showing Observation 6 Deleted
The SAS System 1 Obs Name Age 1 Miguel 53 2 Brad 27 3 Willie 69 4 Marc 50 5 Sylvia 40 7 Gary 40 8 Becky 51 9 Alma 39 10 Tom 62 11 Kris 66 12 Paul 60 13 Randy 43 14 Barbara 52 15 Virginia 72
Executing the PRINT procedure with OBS=12 results in 12 observations, that is (12 - 1) + 1 = 12:
proc print data=Ages (obs=12); run;
The SAS System 2 Obs Name Age 1 Miguel 53 2 Brad 27 3 Willie 69 4 Marc 50 5 Sylvia 40 7 Gary 40 8 Becky 51 9 Alma 39 10 Tom 62 11 Kris 66 12 Paul 60 13 Randy 43
The result of OBS= appears to be how many observations to process, because the output consists of 12 observations, ending with the observation number 13. However, if you apply FIRSTOBS=2 and OBS=12, the result is 11 observations, that is (12 - 2) + 1 = 11. OBS= in this situation is neither the observation number to end with nor how many observations to process; the value is used in the formula to determine when to stop processing.
proc print data=Ages (firstobs=2 obs=12); run;
PROC PRINT Output Using OBS= and FIRSTOBS=
The SAS System 3 Obs Name Age 2 Brad 27 3 Willie 69 4 Marc 50 5 Sylvia 40 7 Gary 40 8 Becky 51 9 Alma 39 10 Tom 62 11 Kris 66 12 Paul 60 13 Randy 43
See Also |
| |||||
| |||||
| |||||
For more information about using OBS= with WHERE processing, see Processing a Segment of Data That Is Conditionally Selected in SAS Language Reference: Concepts. |
Copyright © 2011 by SAS Institute Inc., Cary, NC, USA. All rights reserved.