<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Hallo,
Ich verwende JMP10.Ich versuche, ein Skript zu erstellen, um doppelte Datenzeilen in einer Datentabelle zu löschen.Ein Beispiel für meinen Versuch ist wie folgt:
// Start.
// Datentabelle erstellen.
dt = open("$SAMPLE_DATA/Big Class.jmp");
dt << Zufällig auswählen(5);
subdt = dt << Subset(Output Table Name("subset"), Invisible);
dt << Concatenate(subdt, An erste Tabelle anhängen);
Close(subdt, No Save);
dt << Clear Select;
// Doppelte Zeilen für bigClass suchen und löschen.
icol = dt << New Column( "Index", Numeric, Continuous, Formula( Sequence( 1, N Row( dt ), 1, 1 ) ) );
repcol = dt << Neue Spalte( "Daten wiederholen",
Numerisch,
Kontinuierlich,
Formel( If( :Index == Col Minimum( :Index, :name, :age, :sex, :height, :weight ), 1, 0 ) )
);
dt << Select Where( As Column(repcol) == 0 );
dt << Zeilen löschen();
dt << Spalten löschen( {icol, repcol} );
// Doppelte Zeilen für generische Datentabelle suchen und löschen.
colnames = dt << Get Column Names();
icol = dt << New Column( "Index", Numeric, Continuous, Formula( Sequence( 1, N Row( dt ), 1, 1 ) ) );
repcol = dt << Neue Spalte( "Daten wiederholen",
Numerisch,
Kontinuierlich,
Formel( If( :Index == Col Minimum( :Index, /* Fügen Sie hier Spaltennamen ein. */ ), 1, 0 ) )
);
dt << Select Where( As Column(repcol) == 0 );
dt << Zeilen löschen();
dt << Spalten löschen( {icol, repcol} );
// Ende.
Mein Problem ist, dass ich dieses Skript gerne auf einer generischen Datentabelle ausführen lassen möchte.Wie kann ich meine Spaltennamenliste in meine Formel einfügen?Gibt es eine cleverere Möglichkeit, dies zu tun?
Danke!
Es ist sinnvoll, Col Min() mit einer Indexspalte zu verwenden, um Duplikate zu finden.
Normalerweise verwende ich Tabellen->Zusammenfassung, um eine Datentabelle ohne Duplikate zu erhalten. Gruppieren Sie einfach nach allen Spalten, die ein Duplikat definieren würden. Dies hat den zusätzlichen Vorteil, dass eine Spalte (N Zeilen) bereitgestellt wird, die angibt, wie viele doppelte Zeilen in der Originaltabelle vorhanden waren.

-Jeff
Ich war zu schnell. Die erste veröffentlichte Version würde bei komplexen Spaltennamen fehlschlagen, die das Konstrukt :Name("eg ∆X") erfordern. Ich habe den Code oben bearbeitet und jetzt sollte er allgemeiner funktionieren.
Danke MS!Sehr schlau.Wie es genau funktioniert, muss ich noch studieren.
Geniale Idee, Col Min() zum Auffinden von Duplikaten zu verwenden!
Nachfolgend finden Sie einen alternativen Ansatz, der auf Ihrer Idee basiert und zu funktionieren scheint. Dies ist einfacher, da keine temporären Formelspalten erforderlich sind.
// Beispieldatentabelle erstellen.
Offen ( „$SAMPLE_DATA/Big Class.jmp“ ) << Verketten ( Offen ( „$SAMPLE_DATA/Big Class.jmp“ ) , An erste Tabelle anhängen ) ;
// Duplikate aus der generischen Tabelle löschen
dt = Aktuelle Datentabelle () ;
col_min = Analysieren ( „Col Min( Row(), :Name(\!““ || Concat-Artikel ( dt << Spaltennamen abrufen ( Zeichenfolge ) , "\!"), :Name(\!"" ) || "\!"))" ) ;
Duplikate = [] ;
Für jede Reihe ( Wenn ( col_min != Reihe () , Duplikate |/= Reihe () ) ) ;
dt << Zeilen löschen ( Duplikate ) ;