JSL: Eindeutige Werte einer Datentabellenspalte abrufenHallo,
Ich verwende derzeit den Befehl summary, um eindeutige Werte einer Datentabellenspalte abzurufen, was meiner Meinung nach für diese einfache Aufgabe zu kompliziert ist. Ich denke, es muss einen einfacheren Befehl geben, der mit einer Datentabellenspalte oder einem Vektor funktioniert, aber ich kann keinen finden. Habe ich recht?
Mein aktueller Code sieht so aus:
// sample data set:
dt = New Table( "dt" );
dt:"Column 1" << setvalues( [1, 1, 2, 7, 7, 4, 5, 1, 5] );
// use summary to get unique values:
dt_sum = dt << summary( group( :Column 1 ), N, outputtablename( "dt_sum" ) );
unique_values = dt_sum:"Column 1" << getvalues;
Dahla
Betreff: JSL: Eindeutige Werte abrufenHallo, wie würde man die Schlüssel im Array zum Auswählen oder Filtern von Zeilen mit denselben Schlüsseln, aber in einer anderen JMP-Tabelle verwenden? Ich habe zwei Tische. Einer von ihnen ordnet Proben-IDs für chemische Tests verschiedenen Faktoreinstellungen (Temperatur, Zeit, Studiennummer usw.) zu. Ich erhalte die Beispiel-IDs erfolgreich in einem Array. (Entschuldigung, ich bin ein absoluter Neuling in diesem Bereich.)
smplID = Associative array(:sampleid) << Get Keys;
Jetzt möchte ich diese Tasten verwenden, um Zeilen in der zweiten Tabelle (in der sich meine Antworten befinden) auszuwählen, die Zeilenauswahl umzukehren und die Zeilen zu löschen. Vielleicht die Lösung unten, wie hier beschrieben, ist für den Anfang besser geeignet ?
Summarize(dt, smpleID = by(:sampleid));
Oder vielleicht dieser Ansatz istvorzuziehen?
dt << Summary (Group ( :sampleid ), Frequ( "None" ), Weight( "None" );
Wie auch immer, was ich wirklich wissen möchte, ist, wie ich einen dieser Ansätze verwenden kann, um eine Datentabelle effektiv von Zeilen zu bereinigen, die ich nicht benötige, bevor ich mit der Datenanalyse fortfahre.
Bearbeiten: besprochen und gelöst Hier .
Betreff: JSL: Eindeutige Werte einer Datentabellenspalte abrufenVersuchen Sie es zusammenzufassen ...
Summarize kann mehr ... siehe die Skriptdokumente.
Ein paar Nachteile.
- Auch wenn die zusammengefasste Spalte numerisch sein kann, enthält die zurückgegebene Liste Zeichenwerte.
- Bezogen auf 1 wird die Genauigkeit numerischer Werte basierend auf der Spaltenbreite abgeschnitten.
// sample data set:
dt = newtable("dt");
dt:"Column 1" << setvalues([1, 1, 2, 7, 7, 4, 5, 1, 5]); summarize(unique_values=by(Column 1));
show(unique_values)
Aber ... hier ist eine Problemumgehung für die Nachteile:
summarize(unique_values=by(Column 1), unique_numeric_values=(max(Column 1)));
show(unique_values, unique_numeric_values)
Betreff: JSL: eindeutige Werte abrufenStudieren Sie dieses Beispiel:
Names Default to Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
values = dt:age << Get Values;
array = Associative Array( values );
array << Get Keys;
Betreff: JSL: eindeutige Werte abrufenSie könnten es mit Summarize() versuchen und dann einfach die zurückgegebene Liste durchlaufen und die Zeichenfolgenwerte mithilfe der Funktion num() wieder in numerische Werte ändern.
Sie könnten eine neue Spalte erstellen, in der Sie eine Formel verwenden
:Variable * 100
und konvertieren Sie dann die Daten, wie sie aus dem assoziativen Array kommen
Sie könnten eine neue Spalte erstellen und die Werte in Zeichen konvertierenBetreff: JSL: eindeutige Werte abrufenDanke für diese wunderbare und kurze Lösung, @Mark_Bailey .
Meistens funktioniert es, aber nicht im folgenden Fall:
values = {0.111, 0.222, 0.333}; // This is actually something like: values = Column(SomeList[1]) << Get Keys
N Items(Associative Array(values)) // gives 1
JMP ignoriert die Dezimalstellen beim Erstellen des assoziativen Arrays. (Verwendet JMP 12)
Wie kann ich das mithilfe von assoziativen Arrays beheben, sodass N Elemente 3 statt 1 zurückgeben?
Betreff: JSL: eindeutige Werte abrufenDanke für Ihre Hilfe! Zusammenfassen funktioniert einwandfrei!
DahlaBetreff: JSL: eindeutige Werte abrufenAuch:
unique values = Associative Array( col ) << Get Keys
Betreff: JSL: eindeutige Werte abrufen„Zusammenfassen“ funktioniert gut, wenn Sie die Daten in einem Datentabellenformat speichern möchten.
Assoziative Arrays, wie von @Mark_Bailey vorgeschlagen, funktionieren gut, wenn Sie in Listen arbeiten möchten.Betreff: JSL: eindeutige Werte einer Datentabellenspalte abrufenVorschlag einer zusammenfassenden Lösung für JMP-Benutzer auf der Anfängerseite (meiner) des Spektrums.
In diesem Beispiel benötigen wir eine Liste eindeutiger Fertigprodukte aus einer Liste von Kundenaufträgen. Ich verknüpfe die Tabelle nicht und gebe der Ausgabetabelle einen Namen.
Gehen Sie in der Originaldatentabelle zu Tabellen -> Zusammenfassung

Ziehen Sie „Fertigprodukt“ aus den ausgewählten Spalten in die Gruppe auf der rechten Seite.
Geben Sie der Ausgabetabelle einen Namen, in diesem Fall UniqueFG.
Deaktivieren Sie die Option „Mit ursprünglicher Datentabelle verknüpfen“.
Klicken Sie auf Aktion OK.

Die resultierende Datentabelle ist eine Liste aller eindeutigen FG und der Zeilenanzahl.
Klicken Sie auf „Quellskript bearbeiten“.
Es wird ungefähr so aussehen.
Data Table( "Test" ) <<
Summary(
Group( :Finished Good ),
Freq( "None" ),
Weight( "None" ),
Link to original data table( 0 ),
output table name( "UniqueFG" )
)
Kopieren Sie diesen Code.
Erstellen Sie ein neues Skript in der ursprünglichen Datentabelle und fügen Sie den Code ein. Ich habe den Code leicht modifiziert, um ihn flexibler und skalierbarer zu machen, und ihn unten in einigen Anmerkungen kommentiert.
//Creates a list of unique FG #s to feed to SAP to get unit weights and carton quantities
Names Default to Here(1);
dt = current data table();
dt <<
Summary(
Group( :Finished Good ), //this is the column from which you want unique values
Freq( "None" ),
Weight( "None" ),
Link to original data table( 0 ), //this turns off table linking
output table name( "UniqueFG" ) // this is the name of the new datatable
)
Speichern.
Lassen Sie mich gerne wissen, ob dies ein guter Ansatz oder eine gute Codestruktur ist. Danke!