Zufällige Permutation von Zeilen eines großen Datensatzes
Ich muss eine zufällige Permutation eines Datensatzes mit über 3 Millionen Zeilen erstellen.
Ich habe versucht, PROC PLAN zu verwenden, basierend auf diesem Beispiel: http://support.sas.com/kb/23/977.html Laut diesem Artikel mit n = (Anzahl der Zeilen)! ermöglicht die zufällige Auswahl einer Permutation. Unglücklicherweise für einen Satz dieser Größe sind das 4,3 * 10 ^ 19668676 Permutationen. Offensichtlich stoße ich hier auf ein Speicherproblem.
Ich habe auch ein Beispiel mit PROC IML gefunden, aber es sieht so aus, als ob mein Unternehmen nicht über die erforderliche Lizenz / Software verfügt, um es zu verwenden.
Kann mir jemand eine gute Möglichkeit bieten, diesen Datensatz zu mischen?
Es hört sich so an, als ob Sie die Zeilen in eine zufällige Reihenfolge bringen möchten. In diesem Fall besteht die häufigste Methode darin, für jede Zeile einen Zufallswert zu erstellen und dann nach den Zufallswerten zu sortieren:
DATA augmented ;
SET original ;
sortval = RAND('UNIFORM') ;
RUN ;
PROC SORT DATA=augmented OUT=permuted(DROP=sortval) ;
BY sortval ;
RUN ;
Sie können die Aufrufroutine CALL STREAMINIT (seedval) verwenden, wenn Sie die Zufallssequenz zu einem späteren Zeitpunkt präzise reproduzieren möchten.
Sie könnten dies wahrscheinlich auch mit PROC SQL [ungetesteter Code] tun:
PROC SQL ;
CREATE TABLE permuted(DROP=sortval) AS
SELECT a.*, RAND('UNIFORM') AS sortval
FROM original a
ORDER BY sortval
;
QUIT ;