Formeln verketten und unterdrückenLeute,
Ich habe mehrere Tabellen (Beispiele) mit vielen aktiven Spaltenformeln. Mein Skript verkettet an einem Punkt alle Tabellen. Ich möchte jedoch, dass die Formeln unterdrückt werden, da ich die einzelnen Tabellendaten (Beispiel) intakt halten möchte, um alle verketteten Daten zu vergleichen / zu überlagern. Leider kann ich die Formeln beim Verketten nicht richtig deaktivieren, und die neu verketteten Spalten werden ausgewertet, wodurch die einzelnen Beispieldaten verloren gehen. Ich dachte, ich hätte diesen Beat mit dem angehängten Code, aber als ich die ursprüngliche Tabelle in einen anderen Ordner kopierte, wurden die Formeln "reaktiviert", was zu einer gewissen Frustration führte. Wenn es eine gute Lösung gibt, bin ich für jede Eingabe offen, da die Formelauswertung unterdrücken in der aktuellen Implementierung nicht funktioniert.
Neil
Con = Expr(
n = N Table();
dt = {};
// Sort list ascending (sample replicates)
For( i = 1, i <= n, i++,
table = data table(i);
insert into(dt, table);
sort list into(dt)
);
// Concatenate each file (sample replicates)
dt_all = Data Table( dt[1] );
For(i = 1, i <= n, i++,
If(i > 1,
Suppress Formula Eval(suppress=1);
dt_all << Concatenate(Invisible, dt[i], Append to first table);
)
);
Current Data Table(dt_all);
);
DatentabelleSkriptingRe: Formeln verketten und unterdrückenWas Sie tun müssen, ist, die Formeln vor der Verkettung zu löschen.Dadurch werden die Werte in statische Werte umgewandelt und Sie haben kein Problem.
:yourColumn << delete formula;
Re: Formeln verketten und unterdrückenJim,
Danke für die Antwort. Da es ungefähr 10 Spalten mit Formeln pro Tabelle gibt, gibt es einen "pauschalen" Ansatz, um alle auf einmal zu löschen?
Neil
Re: Formeln verketten und unterdrückenSie können die Spaltennamen in eine Liste einfügen und dann die Liste durchlaufen und jeden einzelnen löschen.
Re: Formeln verketten und unterdrückenJMP kann dies auch interaktiv mit Attributen standardisieren:
Wählen Sie alle Spalten aus, klicken Sie mit der rechten Maustaste auf eine der Spalten und wählen Sie Attribute standardisieren:

Formel hinzufügen, um Eigenschaften zu löschen und OK drücken (oder anwenden):

Wenn Sie JMP16 haben, wird dies im erweiterten Protokoll gedruckt:
// Open Data Table: Wheat.jmp
// → Data Table("Wheat")
Open("$SAMPLE_DATA/Wheat.jmp");
// Standardize column attributes
Local({old dt = Current Data Table()},
Current Data Table(Data Table("Wheat"));
For Each({col, index},
{:Variety, :Yield, :Moisture, :Pred Formula Yield, :Cond Pred Formula Yield},
col << Delete Formula
);
Current Data Table(old dt);
);
Und dies wird eine gute Vorstellung davon geben, wie man damit umgeht (wie txnelson sagte, schleife die Liste durch und lösche Formeln, während du gehst). Sie können auch alle Spalten in der Tabelle mit << Get Column Names abrufen. Sie können keine Formeln aus Spalten entfernen, die keine Formeln enthalten (und das von Enhanced Log bereitgestellte Skript funktioniert nicht direkt so), aber Sie können dies umgehen, indem Sie die Formel col << Delete mit Try() umschließen. Nach dem Bereinigen des erweiterten Protokollskripts erhalten Sie möglicherweise Folgendes:
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Wheat.jmp");
For Each({col}, dt << get column names(String),
Try(Column(dt, col) << Delete Formula)
);Re: Formeln verketten und unterdrückenEntschuldigung für die späte Antwort. Ich schätze alle Feed-Backs.
Ohne jetzt alle Spalten anzugreifen, habe ich nur versucht, eine Formel in einer bestimmten Spalte zu eliminieren. Wenn ich die Zeile "Formel löschen" außerhalb der Schleife anwende, erhalte ich das gewünschte Ergebnis, das heißt, es ist keine Formel vorhanden. Wenn jedoch dieselbe Zeile in die Schleife geht, erhalte ich nach dem Öffnen der Datei die folgende Fehlermeldung:
"Säulenporendurchmesser (um) hat keine Formel im Zugriff oder Auswertung von 'Formel löschen' , Formel löschen/*###*/"
Offensichtlich habe ich noch nicht das mechanische Verständnis, um zu sehen, warum es ein Problem gibt. Könnten Sie einen Einblick geben?
Vielen Dank.
For( i=1, i <= N Items(b), i++,
file_1 = Open(SD1 || b[1]);
file_1:"Pore Diameter (um)" << delete formula;
If(i > 1,
file_nxt = Open(SD1 || b[i], Private);
file_1 << Concatenate(file_nxt, Append to first table);
);
);
//file_1:"Pore Diameter (um)" << delete formula;
file_1 << Save(SD1 || "All Summary");
Close("All Summary");Re: Formeln verketten und unterdrückenSind Sie sicher, dass Sie versuchen, auf die richtige Datentabelle zuzugreifen? Sie öffnen immer dieselbe Datei wie file_1 in der for-Schleife.
Sie könnten einige Debug-Drucke in die for-Schleife einfügen, um herauszufinden, was das Problem ist, wie zum Beispiel:
file_1 = Open(SD1 || b[1]);
show(file_1);
show(file_1 << Get Column Names("String")); //depending how many columns you have might not want to do this
show(Contains(file_1 << Get Column Names("String"), "Pore Diameter (um)"));
file_1:"Pore Diameter (um)" << delete formula;Denken Sie auch daran, nicht mehr benötigte Datentabellen mit Close(dtref, no save) zu schließen;
Re: Formeln verketten und unterdrückenJarmo,
Vielen Dank für die Aufklärung des Problems. Ich wusste nicht, dass es ohne eine vorhandene Formel ein Problem geben würde. Vor diesem Hintergrund habe ich eine bedingte Anweisung für die erste Tabelle erstellt. Dies hat offensichtlich funktioniert, da "Datei_1" die spezifische Spaltenformel einmal gelöscht hat. Der angehängte Code funktionierte für das Beispiel mit einer Spalte.
Nun, da klar ist, dass eine Formel vorhanden sein muss, besteht das Problem darin, dass nicht alle Spalten Formeln enthalten. Wenn ich also alle Spaltennamen abrufe, gibt es eine Teilmenge, die keine zugeordneten Spalten hat. Gibt es eine Möglichkeit zu testen, ob eine Spalte eine Formel hat, damit eine richtige Liste für eine Schleife erstellt werden kann? Oder "brute force" ich das Problem einfach, indem ich eine Liste in JSL einrichte, die ich jedes Mal aktualisieren muss, wenn ich einer Spalte eine Formel hinzufüge?
Neil
For( i=1, i <= N Items(b), i++,
If(i==1,
file_1 = Open(SD1 || b[1]);
file_1:"Pore Diameter (um)" << delete formula;
);
If(i > 1,
file_nxt = Open(SD1 || b[i], Private);
file_1 << Concatenate(file_nxt, append to first table);
Close(file_nxt, no save);
);
);
file_1 << Save(SD1 || "All Summary");
Close("All Summary");