Wer kann helfen, eine grundlegende Funktion zum Ausfüllen von Zeilen in einer Datentabelle zu optimieren?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Hallo alle,
Ich suche nach Ratschlägen von erfahrenen JMP-Anwendern für das folgende Problem.
Ich muss häufig mit Datentabellen arbeiten, die bis zu 4 Zeilen pro Einheit enthalten. Einige der Systemparameter werden jedoch nur für den ersten Eintrag einer einzelnen Einheit aufgezeichnet, obwohl sie auch für die anderen dieser Einheit zugeordneten Zeilen gilt.
Um die Daten analysieren und gruppieren zu können, brauche ich diese Systemparameter für alle Zeilen einer Einheit.
Da ich keine Möglichkeit habe, die Datenaufzeichnung in die Datenbank zu ändern, muss ich mich vor der Analyse nach der Datenbankextraktion darum kümmern.
Ich habe daher eine Problemumgehung erstellt, wie unten gezeigt.
Es liefert das gewünschte Ergebnis, ist jedoch sehr langsam und für Datentabellen mit mehr als 1000 Zeilen nicht realisierbar.
dt = Aktuelle Datentabelle ();
dt << Sortieren (Nach (: Einheit), Reihenfolge (Aufsteigend), Tabelle ersetzen);
: param_1 << Formel (für jede Zeile (: param_1 [row () + 1]) = (if (: unit [row ()) ==: unit [row () + 1],
: param_1 [row ()],: param_1 [row () + 1])),
)
Eval Formula
);
Ich bin sicher, es gibt einen effizienteren und eleganteren Weg, um dieses Problem zu lösen, aber ich muss zugeben, dass meine Fähigkeiten sehr begrenzt sind.
Ich freue mich über jeden Input von erfahrenen Benutzern.
Vielen Dank,
Lutz
Re: Wer kann helfen, eine grundlegende Funktion zum Ausfüllen von Zeilen in einer Datentabelle zu optimieren?Danke vielmals. Wird den Code heute im Büro als erstes testen.
Re: Wer kann helfen, eine grundlegende Funktion zum Ausfüllen von Zeilen in einer Datentabelle zu optimieren?Ich habe meinen Code mit einer 40.000-Zeilentabelle getestet und in weniger als einer Sekunde zurückgegeben.
Re: Wer kann helfen, eine grundlegende Funktion zum Ausfüllen von Zeilen in einer Datentabelle zu optimieren?Versuchen Sie diesen Code. Es wird davon ausgegangen, dass Sie eine zweispaltige Tabelle mit einer Spalte namens Unit und der anderen mit dem Namen Param_1 haben. Ich habe keine Leistungstests durchgeführt, aber dies könnte Ihren Tisch ziemlich schnell durchlaufen. Setzt nur Werte, wenn dies erforderlich ist.
dt = Neue Tabelle ( Unit-Param-Beispiel .
Zeilen hinzufügen ( 16 ) .
Neue Spalte ( "Einheit" .
Charakter .
Nominal .
Werte setzen (
{ "ein" . "ein" . "ein" . "ein" . "b" . "b" . "b" . "b" . "c" . "c" . "c" . "c" . "d" . "d" .
"d" . "d" }
)
) .
Neue Spalte ( "Param_1" .
Numerisch .
Kontinuierlich .
Format ( "Beste" . 12 ) .
Werte setzen ( [ 32 . 32 . 32 . 32 . 25 . . . . . . . . . 14 . . . . . . . . . 13 . . ] )
)
) ;
// Sortiere nach Einheit und Parameter, so dass, falls welche fehlen, sie auf den Positionen 2, 3, 4 eines Satzes liegen
dt << Sortieren ( Durch ( : Einheit . : param_1 ) . Auftrag ( Aufsteigend . absteigend ) . Tabelle ersetzen ) ;
// Hole die ersten Zeilenwerte
old_unit = dt : Einheit [ 1 ] ;
old_param = dt : param_1 [ 1 ] ;
zum ( ich = 2 . ich <= nrows ( dt ) . ich ++
eine Einheit = dt : Einheit [ ich ] ;
one_param = dt : param_1 [ ich ] ;
ob ( eine Einheit == old_unit & wird vermisst ( one_param ) .
dt : param_1 [ ich ] = old_param ;
) ;
ob ( eine Einheit ! = old_unit .
old_unit = eine Einheit ;
old_param = dt : param_1 [ ich ] ;
) ;
) ;