Per duplicare la funzione SQL ROW_NUMBER
Windowing, è necessario ordinare il set di dati da sia le PARTITION
e ORDER BY
clausole. In una fase di dati successiva, SET
il set di dati ordinati solo dalle variabili di partizione e utilizzare il controllo di variabile automatico FIRST.
assegnare la nuova variabile numero di riga.
Ecco una soluzione per il tuo esempio dichiarato:
proc sort data=companyData;
by region name;
run;
data want;
set companyData;
by region;
if first.region then row_number = 1;
else row_number + 1;
run;
Avviso la dichiarazione BY
nella fase dati corrisponde alla clausola PARTITION BY
in ANSI SQL ma il passo PROC SORT
smista anche dalle colonne nella clausola ORDER BY
. Si noti inoltre che se la query che si sta "migrando" contiene una clausola SQL ORDER BY
, è necessario eseguire questa operazione con un altro passaggio PROC SORT
.
@Joe buona cattura! e sono completamente d'accordo su entrambi, l'ho modificato! Grazie! – isJustMe
sì, tu sei un overhead in questo caso – isJustMe
Questa risposta manca la fase di smistamento che Bob menziona di seguito. Senza aggiungere il passaggio di ordinamento aggiuntivo non è garantito ottenere gli stessi risultati dell'esempio SQL sopra riportato. –