I passaggi di PROC SQL singolarmente sono fasi di dati separati, quindi in un certo senso si ottengono sempre le stesse informazioni da SAS. Quello che stai chiedendo è in effetti come scoprire per quanto tempo "selezionare il nome" prende contro "empid".
Non esiste un modo diretto per ottenere la tempistica di una singola istruzione in un passaggio di dati, ma è possibile scrivere il codice del passaggio dei dati per scoprirlo. Il problema è che il passaggio dei dati viene eseguito in termini di righe, quindi è molto diverso dai dettagli STIMER di SQL PROC; quasi nulla di ciò che fai in un passo di dati impiegherà molto tempo da solo, a meno che tu non stia facendo qualcosa di più complesso come una ricerca nella tabella hash. Ciò che richiede molto tempo è scrivere prima i dati e leggere i dati in secondo luogo.
Si dispone di alcune opzioni per la risoluzione di lunghi passaggi di dati, se è la vostra preoccupazione. OPZIONI MSGLEVEL = Fornisco informazioni sull'utilizzo dell'indice, sui dettagli di fusione, ecc., Che possono essere utili se non si è sicuri del motivo per cui è necessario molto tempo per eseguire determinate operazioni (vedere http://goo.gl/bpGWL nella documentazione SAS per ulteriori informazioni). È possibile scrivere il proprio timestamp:
data test;
set sashelp.class sashelp.class;
_t=time();
put _t=;
run;
Le probabilità sono che non si mostrerà molto di utilizzo poiché la maggior parte iterazioni passo dati non avrà molto a lungo, ma se si sta facendo qualcosa di fantasia che potrebbe aiutare. È anche possibile utilizzare le istruzioni condizionali per stampare solo l'ora a determinati intervalli, ad esempio su FIRST.ID, ad esempio in un processo che funziona con ID ID ;.
In definitiva, anche se le informazioni che si ottengono dalle note sono le più utili. In PROC SQL sono necessarie le informazioni STIMER perché SQL sta eseguendo diverse operazioni contemporaneamente, mentre SAS consente/consente di eseguire tutte le operazioni passo-passo. Esempio:
PROC SQL;
create table X as select * from A,B where A.ID=B.ID;
quit;
è un passo - ma in SAS questo sarebbe:
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;
Per che si potranno ottenere informazioni sulla durata di ciascuno di questi passaggi (i due tipi e l'unione) in SAS, che è simile a quello che STIMER ti direbbe.
+1 Risposta piacevole. Potresti voler chiarire che le ricerche nella tabella hash sono praticamente istantanee (impiegano tutto il tempo necessario all'hash un valore che in pratica non è nulla in quanto l'algoritmo di hash è molto efficiente), ma il caricamento della tabella in memoria potrebbe richiedere del tempo . –