我只是想知道像在proc sql中我們定義了stimer選項。 PROC SQL
選項STIMER | NOSTIMER
指定PROC SQL
是否將每個語句的計時信息寫入SAS日誌,而不是寫入整個過程的累計值。 NOSTIMER
是默認值。如何獲取數據步驟查詢的時間信息
現在以相同的方式指定數據集步驟中的時間信息。我沒有使用proc sql步驟
data h;
select name,empid
from employeemaster;
quit;
我只是想知道像在proc sql中我們定義了stimer選項。 PROC SQL
選項STIMER | NOSTIMER
指定PROC SQL
是否將每個語句的計時信息寫入SAS日誌,而不是寫入整個過程的累計值。 NOSTIMER
是默認值。如何獲取數據步驟查詢的時間信息
現在以相同的方式指定數據集步驟中的時間信息。我沒有使用proc sql步驟
data h;
select name,empid
from employeemaster;
quit;
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會告訴你的相似。
沒辦法。 PROC SQL STIMER
爲每個單獨執行的SQL語句/查詢記錄時間。 在數據步驟中,如您所知,數據步驟循環發生,觀察每個觀察點,所以數據步驟語句的計時將類似於每個觀察點,比方說事務性。無論如何,這不會描述所花費的時間的所有細節 - 等待磁盤讀取,寫入等。 所以我想這不會很有用。一般來說,SAS性能是由I/O驅動的。
+1好的答案。您可能想澄清一下,散列表查找幾乎是即時的(只要需要散列一個基本上不存在的值,因爲散列算法非常有效),但將散列表加載到內存中可能需要一些時間。 –