firstobs=常數
obs=常數選項
set sashelp.class(firstobs=3 obs=5);
讀取class的第三到第五條觀測並輸出
注:我們發現獲取一個數據集的子數據集的定位最快的方式應該是
set sashelp.class(firstobs=3 obs=6 keep=name age sex);
這樣不會引起冗余讀入。
以下是非數據集選項,即不帶括號的options
nobs=變量,將數據集觀測數傳給臨時變量(非輸出變量)
data n_obs;
if 0 then set sashelp.class nobs=total_obs;
total=total_obs;
output;
stop;
run;
因為頭文件信息在編譯后就產生,這樣一來if語句雖然不進行任何讀入,但是nobs在編譯時已經把觀測數傳給了total_obs.上述語句幾乎是獲得數據集觀測數的最快的方式。
point=變量
data point1;
n=3;
set sashelp.class point=n;
output;
stop;
run;
獲取第三條觀測。注意不能寫成point=3,因為point后面只能跟變量,也可以用point來獲取一連串值,使用do循環:
data point2;
do n=3 to 11;
set sashelp.class point=n;
output;
end;
stop;
run;
注意stop語句絕對不能省略,否則進入死循環。
一個最實用的程序是快速獲得最后一條觀測
data mylastobs;
set sashelp.class nobs=last point=last;
n=last;
output;
stop;
run
程序在編譯時nobs=觀測總數就會傳送給last變量,接下來程序讀入class進入PDV,數據指針直接獲取last值並讀取最后一條數據,輸出並停止Data步。
上述代碼比朱世武教材快很多,朱書中是這樣獲取最后數據的
data zhu;
set sashelp.class end=obs_last;
if obs_last=1;
run;
這樣的代碼要讀入所有數據直到發現是最后末尾才輸出,顯然前面nobs-1條讀取操作都是沒有用的。
end=選項就是是否結尾的標志