2012-10-04 27 views
5

我只是想知道像在proc sql中我們定義了stimer選項。 PROC SQL選項STIMER | NOSTIMER指定PROC SQL是否將每個語句的計時信息寫入SAS日誌,而不是寫入整個過程的累計值。 NOSTIMER是默認值。如何獲取數據步驟查詢的時間信息

現在以相同的方式指定數據集步驟中的時間信息。我沒有使用proc sql步驟

data h; 
select name,empid 
from employeemaster; 
quit; 

回答

5

PROC SQL步驟單獨是有效的獨立數據步驟,所以從某種意義上說,您總是可以從SAS獲得相同的信息。你要問的是如何找出'選擇名'與'empid'的對比。

在數據步驟中沒有直接獲取單個語句的時間的方法,但可以編寫數據步驟代碼以查找。問題在於數據步驟是以行方式執行的,所以它與PROC SQL STIMER細節非常不同。在數據步驟中,幾乎沒有任何東西本身會花費很長時間,除非您正在做一些像哈希表查找那樣更復雜的工作。需要很長時間的是先寫出數據,然後再讀入數據。

如果您擔心這一點,您可以選擇排除長數據步驟的故障。選項MSGLEVEL =我會給你提供關於索引使用情況,合併細節等的信息,如果你不確定爲什麼需要很長時間去做某些事情(參見SAS文檔中的http://goo.gl/bpGWL以獲取更多信息),這可能會有所幫助。你可以寫你自己的時間戳:

data test; 
set sashelp.class sashelp.class; 
_t=time(); 
put _t=; 
run; 

賠率是不會告訴你多大用處的,因爲大多數數據的步驟迭代時間不會很長,但如果你正在做的事情是看中它的可能的幫助。您也可以使用條件語句僅以特定的時間間隔打印時間 - 例如在FIRST.ID中,例如在工作爲BY ID的進程中。

最終,儘管已經從筆記中獲得的信息是最有用的。在PROC SQL中,您需要STIMER信息,因爲SQL一次執行多件事情,而SAS允許/使您逐步完成所有工作。例如:

PROC SQL; 
create table X as select * from A,B where A.ID=B.ID; 
quit; 

是一步 - 但是在SAS,這將是:

proc sort data=a; by ID; run; 
proc sort data=b; by ID; run; 
data x; 
merge a(in=a) b(in=b); 
by id; 
if a and b; 
run; 

對於您會得到每個這些步驟(兩個種類和合並)的持續時間信息SAS,這與STIMER會告訴你的相似。

+1

+1好的答案。您可能想澄清一下,散列表查找幾乎是即時的(只要需要散列一個基本上不存在的值,因爲散列算法非常有效),但將散列表加載到內存中可能需要一些時間。 –

-1

沒辦法。 PROC SQL STIMER爲每個單獨執行的SQL語句/查詢記錄時間。 在數據步驟中,如您所知,數據步驟循環發生,觀察每個觀察點,所以數據步驟語句的計時將類似於每個觀察點,比方說事務性。無論如何,這不會描述所花費的時間的所有細節 - 等待磁盤讀取,寫入等。 所以我想這不會很有用。一般來說,SAS性能是由I/O驅動的。

相關問題