2013-06-09 8 views

Antwort

6

Sie tun können, die in einem Datum Schritt leicht durch die Verwendung von Aussage, sie und den einen Lauf tun Summe:

proc sort data=myData; by region name; run;

Data myData; 
Set myData; 
By company; 
if first. company then n=1; 
    else n+1; 
run; 

Auch alle obs ennmuarete Sie die integrierten Funktionen verwenden können:

DATA COMPANYDATA; 
SET COMPANYDATA; 
ROW_NUM=_N_;  
RUN; 

Als Joe erwähnt Sie das Format für Ihre row_num je nachdem, wie viel obs Sie innerhalb dieser Gruppierung würde sich einstellen möchten.

+0

@Joe guten Fang! und stimme beiden völlig zu, ich habe sie bearbeitet! Vielen Dank! – isJustMe

+0

yeah, du bist mgith ein Overhead in diesem Fall – isJustMe

+0

Diese Antwort fehlt der Sortierschritt, Bob unten erwähnt. Ohne das Hinzufügen des zusätzlichen Sortierschritts können Sie nicht die gleichen Ergebnisse erzielen wie im obigen SQL-Beispiel. –

2

die SQL ROW_NUMBER Windowing-Funktion duplizieren, können Sie die Daten von beide die PARTITION und ORDER BY Klauseln sortieren müssen. In einem nachfolgenden Datenschritt SET den sortierten Datensatz nur durch die Partitionsvariable (n) und die FIRST. automatische Variablensteuerung die neue Zeilennummervariable zuweisen.

Hier ist eine Lösung für Ihr erklärtes Beispiel:

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; 

Beachten Sie die BY-Anweisung in den Daten Schritt zum PARTITION BY Klausel in ANSI SQL entspricht aber den PROC SORT Schritt sortiert auch durch die Spalten in der ORDER BY Klausel. Beachten Sie außerdem, dass wenn die zu migrierende Abfrage eine ORDER BY SQL-Klausel enthält, Sie dies mit einem weiteren Schritt PROC SORT verfolgen müssen.

Verwandte Themen