Eine JSL-Schleife, die Statistiken nach Lauf-ID für mehrere Spalten hinzufügt, benötigt eine EwigkeitHallo Leute.
Bitten Sie Ihren Rat mit den folgenden.
Ich habe in dieser Schleife nach allen numerischen Spalten gesucht, deren Name mit "MEAS" (zur Messung) beginnt, und eine neue Statistikspalte erstellen, die auf Daten in diesen Spalten basiert, die nach Runid-Daten gruppiert sind.
Die Schleife funktioniert, aber es dauert ewig, bis sie fertig ist - eine Idee, warum? oder was kann man tun, um es zu verbessern?
Vielen Dank
dt_ncol=ncol(dt);
for(i=1,i<=dt_ncol,i++,
if(column(i)<<GET data="https://community.jmp.com/" type="="Numeric""></GET>
Re: Eine JSL-Schleife, die Statistiken nach Lauf-ID für mehrere Spalten hinzufügt, benötigt eine EwigkeitMorgen thx für deine Wiederholung.
Ich konnte mich nicht rechtzeitig bei Ihnen bedanken, aber ich habe absichtlich Ihrem Rat gefolgt, Daten in einer temporären Tabelle zusammenzufassen und die neuen Spalten aus dieser Tabelle in der Haupttabelle zu aktualisieren.
Ich habe es etwas anders gemacht als das von Ihnen vorgeschlagene Skript, hauptsächlich aufgrund eines Problems, das ich bei der Verwendung eines Listennamens in Zusammenfassungsberechnungen hatte (Mean (Cols)).
Wie auch immer, ich habe mir dieses kurze Skript ausgedacht, das perfekt für mich funktioniert:
// Messstatistik hinzufügen
// Listet relevante Spaltennamen auf
meascol = dt << Spaltennamen (numerisch) erhalten;
Messwert = N Artikel (Messwert);
meascollist = {};
Für (i = 1, i <= Measnc, i ++,
Wenn (Enthält (Messwert [i], "MEAS"),
Einfügen in (Meascollist, Meascol [i])
));
// Zusammenfassende relevante Spalten und Aktualisierungstabelle
für (k = 1, k <= n Elemente (Messwert), k ++,
dt << Zusammenfassung (
Gruppe (: RUNID),
Mittelwert (Zeichen (Meascollist [k])),
Max (Zeichen (Meascollist [k])),
Min (Zeichen (Meascollist [k])),
Name der Ausgabetabelle ("Tempmeas")
);
dt << Update (
Mit (Datentabelle ("Tempmeas")),
Übereinstimmungsspalten (: RUNID =: RUNID)
);
close (Datentabelle ("Tempmeas"), kein Speichern));
Re: Eine JSL-Schleife, die Statistiken nach Lauf-ID für mehrere Spalten hinzufügt, benötigt eine EwigkeitMorgen thx für deine Wiederholung.
Ich konnte mich nicht rechtzeitig bei Ihnen bedanken, aber ich habe absichtlich Ihrem Rat gefolgt, Daten in einer temporären Tabelle zusammenzufassen und die neuen Spalten aus dieser Tabelle in der Haupttabelle zu aktualisieren.
Ich habe es etwas anders gemacht als das von Ihnen vorgeschlagene Skript, hauptsächlich aufgrund eines Problems, das ich bei der Verwendung eines Listennamens in Zusammenfassungsberechnungen hatte (Mean (Cols)).
Wie auch immer, ich habe mir dieses kurze Skript ausgedacht, das perfekt für mich funktioniert:
// Messstatistik hinzufügen
meas_ncol = n col (dt);
// Listet relevante Spaltennamen auf
meascol = dt << Spaltennamen (numerisch) erhalten;
Messwert = N Artikel (Messwert);
meascollist = {};
Für (i = 1, i <= Measnc, i ++,
Wenn (Enthält (Messwert [i], "MEAS"),
Einfügen in (Meascollist, Meascol [i])
));
// Zusammenfassende relevante Spalten und Aktualisierungstabelle
für (k = 1, k <= n Elemente (Messwert), k ++,
dt << Zusammenfassung (
Gruppe (: RUNID),
Mittelwert (Zeichen (Meascollist [k])),
Max (Zeichen (Meascollist [k])),
Min (Zeichen (Meascollist [k])),
Name der Ausgabetabelle ("Tempmeas")
);
dt << Update (
Mit (Datentabelle ("Tempmeas")),
Übereinstimmungsspalten (: RUNID =: RUNID)
);
close (Datentabelle ("Tempmeas"), kein Speichern));
Re: Eine JSL-Schleife, die Statistiken nach Lauf-ID für mehrere Spalten hinzufügt, benötigt eine EwigkeitDies nimmt aufgrund der Anzahl der Berechnungen (Reihenfolge) und des Renderns (Zeichnens) der Tabellenwerte Zeit in Anspruch. Spaltenformeln verlangsamen möglicherweise auch die Verwendung von Werten.
Beachten Sie, dass die von Ihnen verwendete Methode die runid-Zeilen nach (: runid) dreimal für jede Spalte ermittelt und berechnet. Zwei alternative Methoden sind:
- Verwenden Sie die Tabellenmanipulation und vergessen Sie die Spaltenformeln. Nachfolgend finden Sie ein Beispielskript mit der JMP-Beispieldatentabelle Semiconductor Capability.jmp
- Fügen Sie eine Sequenzspalte hinzu, ich nenne sie seq (row ()). Verwenden Sie Summarize (rid = By (: runid)), ibeg = Min (: seq), iend = Max (: seq)). Verwenden Sie dann die Tabellenzuweisungen. Ich habe kein Beispiel für diese Methoden gezeigt, weil ich glaube, dass es langsamer wäre als bei Tabellenmanipulationen.
Names Default to Here(1);
dt = Open("$sample_data/semiconductor Capability.jmp");
//change lot_id column name to runid
dt:lot_id << set name("runid");
//select the columns here. I will just use columns with a name that starts with I
cols = {};
for(i=5, i<=ncol(dt), i++,
nme = column(dt,i) << get name;
if( substr(nme, 1, 1) == "I", insert into(cols, nme) );
);
sumdt = dt << Summary( Group(:runid), Mean(cols), Max(cols), Min(cols),
statistics column name format( "column stat" ), Invisible,
Link to original data table( 0 )
);
ord = {"runid"};
for(i=1, i<=ngrp, i++,
nme = cols[i];
column(sumdt, nme || "Mean") << Set Name(nme || "_MEAN");
column(sumdt, nme || "Min") << Set Name(nme || "_MIN");
column(sumdt, nme || "Max") << Set Name(nme || "_MAX");
insert into( ord, eval list({nme||"_MEAN", nme||"_MIN", nme||"_MAX"}))
);
newdt = sumdt << Subset( All Rows, Columns(ord), Invisible );
close(sumdt, NoSave);
wait(0);
dt2 = dt << Join(
With( newdt ),
By Matching Columns( :runid = :runid ),
Merge Same name columns(1),
Match Flag(0),
Drop multiples( 0, 0 ),
Include Nonmatches( 1, 0 ),
Preserve main table order( 1 )
);
close(newdt,NoSave);
nme = dt << get name;
Close(dt, NoSave);
dt = dt2;
dt << set name(nme);
dt << delete scripts("Source");Eine schöne JSL-Nachricht wäre eine Datentabellenachricht an Order By (Liste), dt << Order Columns By (mylist) oder dt << Move Columns (Liste, Nach | Vorher | Zum Schluss | Zum Anfang). Derzeit finde ich Subset (Columns (Liste)) am schnellsten.