2015-06-16 28 views
2

爲了測試語法和輸出,我需要在非常大的表的一個小集(例如100行)上執行一個過程。我一直在運行下面的代碼,它仍然在運行。我想知道它是否在做別的事情。或者什麼是正確的做法?SAS Proc SQL如何僅對大表的N行執行過程

Proc sql inobs = 100; 
select 
    Var1, 
    sum(Var2) as VarSum 
from BigTable 
Group by 
    Var1; 
Quit; 

回答

4

你在做什麼很好(限制從任何表中取得的最大記錄數爲100),但有幾個選擇。爲了避免任何執行在所有使用noexec選項:

proc sql noexec; 
    select * from sashelp.class; 
quit; 

要從特定的數據集限制OBS,你可以使用的數據集OBS選項,例如

proc sql; 
    select * from sashelp.class(obs = 5); 
quit; 

要得到一個什麼樣SAS是幕後在做索引的使用和查詢規劃方面有更好的主意,使用_method和_tree選項(和任選inobs結合如上):

proc sql _method _tree inobs = 5; 
    create table test as select * from sashelp.class 
    group by sex 
    having age = max(age); 
quit; 

這些產生了非常詳細的輸出,這超出了這個答案的範圍,可以完全解釋,但是如果你願意的話,你可以輕鬆搜索更多細節。

有關在SAS調試SQL的詳細信息,請參閱

http://support.sas.com/documentation/cdl/en/sqlproc/62086/HTML/default/viewer.htm#a001360938.htm

+0

太感謝你了,(OBS = N)對我的作品! – JasonSmith