SAS 中的選項 firstobs obs nobs point


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=選項就是是否結尾的標志


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM