Problem im JMP-Skript für die SchleifeHallo, ich habe zwei Fragen -
Frage 1 –
Ich habe einfache Daten (im Anhang) und ein Skript, das einwandfrei funktioniert, aber solange ich es in eine for-Schleife konvertieren möchte. Nicht das Richtige bekommen.
ZIEL – Ich möchte den oberen 10 %-Widerstandswert für jeden Strom. Meine Daten sind nicht symmetrisch, was bedeutet, dass die Anzahl der Datenpunkte für jeden Strom unterschiedlich ist.
In den gleichen Daten gibt es nur 7 aktuelle Werte und in realen Daten können es Hunderte von Werten sein.
Ansatz: Ich erstelle eine Quantiltabelle, vergleiche dann meinen Widerstandswert mit dem 90 %-Quantilwert und füge eine zusätzliche Spalte „Top10 %“ hinzu. Bei Beispieldaten mit 7 aktuellen Werten funktioniert alles einwandfrei, aber ich brauche dafür eine Schleife. Können Superuser mir sagen, was der Fehler ist, den ich in meiner for-Schleife mache? Das wird mir helfen, zu lernen, wie for-Schleifen implementiert werden.?
Irgendeine Hilfe ?
Frage 2: Was ist der beste Weg, um die besten 95 % der Daten zu erhalten?
Gibt es hier Hilfe?
Erweiterte statistische ModellierungAutomatisierung und SkripterstellungDatenexploration und -visualisierungMassenanpassungQualitäts- und VerfahrenstechnikBetreff: Problem im JMP-Skript für die SchleifeVielen Dank für die klare und nette Erklärung. Sehr hilfreich, um zu lernen, wie Spaltenformeln funktionieren. Danke noch einmal.
Betreff: Problem im JMP-Skript für die SchleifeBezüglich Ihrer For()-Schleifenlogik
- Eine Spalte kann nur 1 Formel enthalten.Wenn die Formeldefinition innerhalb der For()-Schleife liegt, würde für jede Schleife eine andere Formel angegeben.Ich weiß nicht genau, was JMP tun würde. Im besten Fall würde es jede Formel ersetzen, wenn eine neue erstellt wird, und am Ende nur die zuletzt erstellte Formel verwenden.
- Wenn Sie in jedem If den Wert „Fail“ festlegen, ist Ihre Logik nur dann korrekt, wenn die letzte Ebene die Ebene für die aktuelle Zeile ist.Nehmen wir andernfalls an, dass Ebene 3 die aktuelle Ebene für die angegebene Zeile ist.JMP würde den Wert in der If-Anweisung für Level 1 auf Fail, Level 2 auf Fail und Level 3 auf Top10 % setzen, aber die For()-Schleife wird fortgesetzt, sodass das Testen auf Level 4 zu Fail führt.... .....und alle anderen Level.
- Bei einer Formel für eine Spalte, die Variablenwerte enthält, die außerhalb der Formel definiert sind (z. B. dtF2, dtQ und die Verweise auf die Spalten in der dtQ-Datentabelle), müssen diese Werte und die Datentabelle immer dann vorhanden sein, wenn die Datentabelle mit dem Formel wird geöffnet.Was Sie also tun müssen, wenn Sie solche Formeln verwenden, ist, die Formel zu löschen, sobald die Datentabelle die Formel ausgeführt hat.
dtF2:Name("Top10%") << delete formula;
Hier ist eine Version der Formel, die meiner Meinung nach funktionieren würde. Ich habe sie nicht getestet, aber ich denke, Sie werden den Ansatz sehen.
dtF2 << New Column( "Top10%",
character,
FORMULA(
For( i = 1, N Rows( dtQ ), i++,
x = "";
If( dtF2:Current == dtQ:Level[i] & dtF2:Name( "Res" ) >= dtQ:Name( "90%" )[i],
x = "Top10"
);
);
If( x == "", x = "Fail" );
x;
)
);Betreff: Problem im JMP-Skript für die SchleifeJa, völlig in Ordnung. Viel besserer und einfacherer Weg, es zu tun. Mir war nicht bewusst, dass wir Quantile auch aus der Übersichtstabelle erhalten können. Ich setze es so um, wie Sie es beschrieben haben.
Abgesehen von den Quantil- und Top-10-%-Daten: Gibt es einen Kommentar dazu, was in meiner „for-Schleife“ falsch war?
Danke für die Hilfe.
Betreff: Problem im JMP-Skript für die SchleifeIch glaube, dass das folgende Skript eine einfachere Methode ist, um zu den gewünschten Ergebnissen zu gelangen

Names Default To Here( 1 );
dtF2 = Data Table( "Final_Data" );
dtSum = dtF2 << Summary(
invisible,
Group( :Current ),
Quantiles( 90, :Res ),
Freq( "None" ),
Weight( "None" ),
statistics column name format( "stat" ),
link to original data table( 0 )
);
dtSum << delete columns( N Rows );
dtF2 << Update(
With( dtSum ),
Match Columns( :Current = :Current )
);
Close( dtSum, nosave );
dtF2 << New Column( "Top10%",
character,
formula( If( :Res >= :Quantiles90, "Top10" ) )
);