2012-10-04 8 views
5

Volevo solo sapere come in proc sql definiamo l'opzione di stimolazione. L'opzione PROC SQL specifica STIMER | NOSTIMER specifica se PROC SQL scrive le informazioni di temporizzazione per ogni istruzione nel log SAS, invece di scrivere un valore cumulativo per l'intera procedura. NOSTIMER è l'impostazione predefinita.come ottenere le informazioni di temporizzazione di una query del passaggio di dati

Ora allo stesso modo come specificare le informazioni di temporizzazione nel passaggio del set di dati. Non sto utilizzando proc sql step

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

risposta

5

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

+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 . –

-1

Niente da fare. PROC SQL STIMER i tempi dei registri per ogni istruzione/query SQL eseguibile separatamente. Nella fase di dati, come forse sapete, si verifica il loop di step dei dati, osservazione per osservazione, quindi il timing dell'istruzione dei passi dei dati sarebbe simile all'osservazione, diciamo transazionale. In ogni caso questo non descriverebbe tutti i dettagli in cui viene speso il tempo - in attesa di letture, scritture, ecc. Del disco Quindi immagino che non sarà molto usabile. In generale, le prestazioni SAS sono guidate dall'I/O.

Problemi correlati