Nicht doppelte Zeilen (einzelne Spalten-ID) an eine Haupttabelle anhängen, ohne eine neue Tabelle zu erstellen?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Szenario: Ich muss tägliche Umfragedatendateien (die alle vorherigen Tage enthalten) an eine Haupttabelle anhängen, die nur nicht duplizierte Befragten-ID-Datensätze enthält, und ohne eine neue Tabelle zu erstellen (da ich ausgewählte Zeilen in der Haupttabelle nicht verlieren möchte). verborgen oder ausgeschlossen
Zwei Versuche:
Concatenate behält die Haupttabelle bei, übernimmt aber alle Datensätze
Join bringt nur die neuen Datensätze, erstellt aber eine neue Tabelle, sodass Zeilenmerkmale (Ausblenden, Ausschließen) verloren gehen
Betreff: Nicht doppelte Zeilen (einzelne Spalten-ID) an eine Haupttabelle anhängen, ohne eine neue Tabelle zu erstellen?Exzellent!!!
Was mich verwirrte, war diese Zeile:
Parse( "Col Min( Row(), :Name(\!"" || Concat Items( dt << get Column Names( string ), "\!"), :Name(\!"" ) || "\ !"))" );
Ich konnte nicht herausfinden, was „Row()“ im ersten Argument bewirkte.
Vielen Dank.
Betreff: Nicht doppelte Zeilen (einzelne Spalten-ID) an eine Haupttabelle anhängen, ohne eine neue Tabelle zu erstellen?Hallo Martin,
Du hast Recht.Diese Zeilen machen genau das, was Sie abgeleitet haben.Ich habe einige Kommentare hinzugefügt, um es für andere klarer zu machen.
Ich freue mich, dass Sie es nützlich finden!
Betreff: Nicht doppelte Zeilen (einzelne Spalten-ID) an eine Haupttabelle anhängen, ohne eine neue Tabelle zu erstellen?Ich glaube, ich habe es herausgefunden.Zeile 1 erzeugte eine Zeichenfolge „Col Min( Row(), :name, :age, :sex, :height, :weight )“, die in (2) verwendet wird, um die Zeilennummer einer vorherigen Zeile zu bestimmen, in der alle Spalten übereinstimmen .Und 2 fügt die Zeilennummer der doppelten Zeile zu einem Array „duplicates“ hinzu.
Das ist ziemlich scharfsinnig.Ich frage mich, was passiert, wenn es Dreifachexemplare gibt.Wird die erste Instanz immer beibehalten und die zweite und dritte gelöscht?Ich werde es versuchen müssen.
Danke Roboter!
Betreff: Nicht doppelte Zeilen (einzelne Spalten-ID) an eine Haupttabelle anhängen, ohne eine neue Tabelle zu erstellen?Hallo Roboter, kannst du erklären, was diese beiden Zeilen bewirken?
Danke
1. col_min = Parse( "Col Min( Row(), :Name(\!"" || Concat Items( dt << get Column Names( string ), "\!"), :Name(\!"" ) || "\!"))" );
2. Für jede Zeile (If( col_min != Row(), Duplikate |/= Row() ) );
Betreff: Nicht doppelte Zeilen (einzelne Spalten-ID) an eine Haupttabelle anhängen, ohne eine neue Tabelle zu erstellen?Hallo cdwhite,
Ich habe vor einiger Zeit ein Skript geschrieben, das helfen könnte.Das folgende Skript löscht doppelte Zeilen und behält dabei die ursprüngliche Datentabelle, einschließlich Formeln und Zeilenzustände, bei.Die Verwendung der Funktion „Verketten“ gefolgt von diesem Skript kann Ihr Problem lösen.
Namen standardmäßig hier( 1 );
// Datentabelle und neue Daten erstellen.
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt << Zufällig auswählen( 10 );
dt2 = dt << Subset( (Ausgewählte Zeilen), Name der Ausgabetabelle( "Neue Daten" ) );
dt << Clear Select;
dt2 << Zeilen hinzufügen( {:name = "PETER", :age = 14, :sex = "M", :height = 61, :weight = 124} );
// Zeilenzustände in Originaldaten zufällig festlegen.
dt << Zufällig auswählen (10) << Ausblenden << Ausschließen << Auswahl löschen;
// Neue Daten hinzufügen.
dt << Concatenate( dt2, Append to First Table );
Close( dt2, No Save );
// Doppelte Zeilen löschen.
dt = Aktuelle Datentabelle();
col_min = Parse( "Col Min( Row(), :Name(\!"" || Concat Items( dt << get Column Names( string ), "\!"), :Name(\!"" ) || "\!"))" ); // Erstellen Sie einen JSL-Ausdruck, um die minimale Zeilennummer aller anderen Spalten zu bestimmen.
Duplikate = []; // Matrix erstellen, um doppelte Zeilen zu speichern.
Für jede Zeile( If( col_min != Row(), Duplikate |/= Row() ) ); // Jede Zeile mit dem obigen Ausdruck „col_min“ vergleichen.Wenn die aktuelle Zeile nicht mit der Mindestzeile aller anderen Spalten übereinstimmt, wird diese Zeile zur „Duplikate“-Matrix hinzugefügt.
dt << Zeilen löschen( Duplikate ); // Duplikate löschen.
nn = N Zeilen( Duplikate );
Neues Fenster( „Doppelte Zeilen löschen“, <Betreff: Nicht doppelte Zeilen (einzelne Spalten-ID) an eine Haupttabelle anhängen, ohne eine neue Tabelle zu erstellen?
Ich habe versucht, die Option „Haupttabelle aktualisieren“ zu verwenden, aber es wird trotzdem eine neue Tabelle erstellt.
Datentabelle ( "Original" ) << Verbinden (
Mit ( Datentabelle ( "Neue Daten" ) ) ,
Aktualisieren ,
Durch passende Spalten ( : Spalten-ID = : Spalten-ID ) ,
Multiples löschen ( 1 , 1 ) ,
Name ( „Nichtübereinstimmungen einbeziehen“ )( 0 , 1 ) ,
Behalten Sie die Reihenfolge der Haupttabelle bei ( 1 )
);

Betreff: Nicht doppelte Zeilen (einzelne Spalten-ID) an eine Haupttabelle anhängen, ohne eine neue Tabelle zu erstellen?Wenn Sie einen Join durchführen, können Sie das Erstellen einer neuen Tabelle vermeiden, indem Sie die Option „Haupttabelle mit Daten aus zweiter Tabelle aktualisieren“ verwenden.
Betreff: Nicht doppelte Zeilen (einzelne Spalten-ID) an eine Haupttabelle anhängen, ohne eine neue Tabelle zu erstellen?Danke schön.Der ursprünglichen Datentabelle wurde eine neue Spalte mit der Bezeichnung „Zeilenstatus-Datentyp“ hinzugefügt und anschließend die Funktion „Kopieren nach und von“ im Menü „Zeilenstatus“ verwendet (durch Klicken auf die Zeilenstatusspalte im Spaltenlistenfeld links, nicht auf die tatsächliche Spaltenüberschrift), um über und zu kopieren Wenden Sie dann die Zeilenzustände nach dem Beitritt erneut an.Das Skript für den Zeilenanhänge-Join, um nur die neuen Datensätze aus einem Umfragedatensatz in die Hauptdatentabelle einzufügen (und alle zuvor angehängten Fälle zu ignorieren):
Datentabelle( „Hauptumfragedatensatz“) << Join(
With( Datentabelle( „Sekundärer Umfragedatensatz“) ),
Spalten mit demselben Namen zusammenführen,
Zweite Tabellenformel kopieren (0),
Formelauswertung der Haupttabelle unterdrücken (0),
Durch übereinstimmende Spalten( :ResponseID = :ResponseID ),
Drop-Vielfache( 0, 0 ),
Name( "Nichtübereinstimmungen einbeziehen" )(0, 1),
Haupttabellenreihenfolge beibehalten( 1 )
)
Kopieren/wiederherstellen Sie nach dem Zusammenfügen der beiden Dateien die Zeilenzustände aus der Zeilenstatusspalte mithilfe des Zeilenstatusmenüs.Hat perfekt funktioniert.Danke schön!
Betreff: Nicht doppelte Zeilen (einzelne Spalten-ID) an eine Haupttabelle anhängen, ohne eine neue Tabelle zu erstellen?Sie können Mengenoperationen mit assoziativen Arrays durchführen.Es konnte keine einfache Möglichkeit gefunden werden, eine Tabelle an eine andere anzuhängen.Musste die Daten mithilfe von JSL-Schleifen durchsuchen.
dt_original = Neuer Tisch ( "Original" , Zeilen hinzufügen ( 4 ) ,
Neue Spalte ( „Spalten-ID“ , Numerisch , Kontinuierlich , Format ( "Am besten" , 12 ) ,
Werte festlegen ( [ 1 , 2 , 3 , 4 ] )
) ,
Neue Spalte ( "Ergebnis" , Charakter , Nominell , Werte festlegen ( { "A" , "B" , "C" , "D" } ) )
) ;
dt_new = Neuer Tisch ( "Neue Daten" , Zeilen hinzufügen ( 10 ) ,
Neue Spalte ( „Spalten-ID“ , Numerisch , Kontinuierlich , Format ( "Am besten" , 12 ) ,
Werte festlegen ( [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ] )
) ,
Neue Spalte ( "Ergebnis" , Charakter , Nominell ,
Werte festlegen ( { "A" , "B" , "C" , "D" , „e“ , "F" , "G" , "H" , "ich" , "J" } )
)
) ;
// Bestimmen Sie, welche Zeilen in der neuen Tabelle enthalten sind, die nicht in der alten Tabelle enthalten sind
a_original = assoziatives Array ( Spalte ( dt_original , „Spalten-ID“ )) ;
ein neuer = assoziatives Array ( Spalte ( dt_new , „Spalten-ID“ )) ;
ein neuer << entfernen ( a_original ) ;
neue_Zeilen = ein neuer << Schlüssel bekommen ;
// Es muss eine schnellere Möglichkeit geben, eine Tabelle direkt an eine andere anzuhängen
ni = nrows ( dt_original ) ;
Nr = nitems ( neue_Zeilen ) ;
dt_original << Zeilen hinzufügen ( Nr ) ;
für ( ich = 1 , ich <= ncols ( dt_original ) , ich ++,
one_col = Spalte ( dt_original , ich ) << Namen bekommen ;
für ( k = 1 , k <= nitems ( neue_Zeilen ) , k ++,
M = neue_Zeilen [ k ] ;
N = k + ni ;
Spalte ( dt_original , one_col )[ N ] = Spalte ( dt_new , one_col )[ M ] ;
) ;
) ;
Betreff: Nicht doppelte Zeilen (einzelne Spalten-ID) an eine Haupttabelle anhängen, ohne eine neue Tabelle zu erstellen?Ich empfinde das Zusammenfügen und Verketten von Tabellen als eine Art Kunst (dh durch Ausprobieren, bis ich das bekomme, was ich wirklich will).Ich würde jedoch empfehlen, dass Sie nach dem Spaltentyp „Zeilenstatus“ suchen, da Sie alle Ihre aktuellen Zeilenstatus (dh Ihre ausgeblendeten und ausgeschlossenen Zeilenstatus) in einer Spalte speichern können, die Sie bei Bedarf erneut auf Ihre Tabelle anwenden können.