Ich möchte zwei Spalten basierend auf einem Muster aus anderen Spalten generierenHallo zusammen,
Ich möchte zwei neue Spalten basierend auf Mustern in anderen beiden Spalten („Erforderliche Spalte1“ und „Erforderliche Spalte2“) generieren. Bitte sehen Sie sich das beigefügte Bild an -

Irgendwelche Hilfe/Vorschläge?
Danke.
Qualitäts- und VerfahrenstechnikBetreff: Ich möchte zwei Spalten basierend auf einem Muster aus anderen Spalten generierenDanke @jthi für eine schöne Erklärung.
Betreff: Ich möchte zwei Spalten basierend auf einem Muster aus anderen Spalten generieren1. Vielleicht erklärt dieses Bild, warum die erste Idee nicht funktioniert (wenn ich mich richtig erinnere, basiert die zweite Lösung darauf, wenn Sie rechnen . + 1 es wird sein . 

Ich habe die verschiedenen Vergleiche aus der If-Anweisung übernommen und daraus einfach Formeln erstellt, damit einfacher zu erkennen ist, was wann „True“ zurückgibt.
Sie könnten höchstwahrscheinlich die erste Lösung zum Laufen bringen, indem Sie die Vergleiche ein wenig modifizieren ( Fehlt (:StartEnd) & Lag(:StartEnd) != "Ende" | :StartEnd == "Ende", Wert += 1 ). Bei dieser Änderung müssen Sie jedoch auch kleine Änderungen am zweiten Vergleich vornehmen (Row() != Col Max(Row())-Prüfung hinzufügen).
2. Idee für Row() == Col Max(Row()) & :StartEnd == "Start" dient nur dazu, zu überprüfen, ob wir uns in der letzten Zeile der Tabelle befinden und der :StartEnd-Wert „Start“ ist. Wir werden den Wert nicht basierend auf der vorherigen if-Anweisung auf 1 setzen. Row() teilt Ihnen die Zeilennummer mit und Col Max(Row()) gibt Ihnen die maximale Zeilennummer in der Datentabelle zurück. Könnte eine etwas unnötige Überprüfung sein, da es sich um die letzte Zeile der Tabelle handelt (wie die danach mit Start/Ende), aber da es in der Ergebnisspalte stand, habe ich sie implementiert.
Die allgemeine Idee mit dem letzten if-else war folgende:
1. Lag(:StartEnd) == „End“ -> Dies ist ein allgemeiner „Stopp“, nachdem End kontert wurde
2. Row() == Col Max(Row()) & :StartEnd == "Start" -> um zu verhindern, dass in der letzten Zeile 1 zurückgegeben wird, wenn es sich um Start handelt
3. :StartEnd == "Start" & Lag(:StartEnd, -1) == "End" -> um die Rückgabe von 1 und 2 zu verhindern, wenn zwischen Start und Ende keine Zeilen vorhanden sind
Sie können bei mehreren Vergleichen nur ein if verwenden, indem Sie einige der Vergleiche ein wenig verschieben (dies schien das gleiche Ergebnis wie Req1 zu liefern):
If(
Row() == 1, val = .,
Row() != Col Max(Row()) & :StartEnd == "Start" & Lag(:StartEnd, -1) != "End", val = 1,
Is Missing(:StartEnd) & Lag(:StartEnd) != "End" | :StartEnd == "End", val += 1,
val =.
)
Hoffentlich ist die Erklärung nicht zu chaotisch
Betreff: Ich möchte zwei Spalten basierend auf einem Muster aus anderen Spalten generierenHallo zusammen,
Habe noch eine Frage, eigentlich zwei -
1. Was ist der Unterschied zwischen dem Hinzufügen von mehr als einer Bedingung in einer einzelnen „If“-Anweisung und dem Hinzufügen von mehr als einer „If“-Anweisung mit einer einzelnen Bedingung? Siehe das beigefügte Bild - . Der erste Fall liefert keine korrekten Ergebnisse, während der zweite Fall einwandfrei funktioniert. Die Ergebnisse können den beigefügten Beispieldaten entnommen werden. Es fällt mir schwer, die Unterschiede hier zu verstehen.
Für mich scheint es für jede Zeile so zu sein, dass im ersten Fall eine Ausgabe erfolgt, wenn die Bedingung wahr ist. Damit sind die Ergebnisse beendet.
Im zweiten Fall hingegen werden alle drei if-Anweisungen nacheinander ausgeführt, unabhängig von den Ergebnissen der vorherigen, und die Ausgabe basiert auf der letzten wahren Bedingung. Ich bin mir nicht sicher, ob ich es richtig erklären kann. Auch hier vermute ich, dass es im zweiten Fall (mehrere if-Anweisung) zu einer Art Überschreibung der vorherigen If-Anweisung kommt!

2. In der obigen Formel wird eine Bedingung verwendet: " Row() == Col Max(Row()) & :StartEnd == "Start" " Wie funktioniert es? Es funktioniert gut, das heißt – es ist gut geschrieben. Aber ich kann mir nicht vorstellen, wie die Variable/der Zähler „val“ stoppt?
Irgendeine Hilfe dabei?
Danke,
Betreff: Ich möchte zwei Spalten basierend auf einem Muster aus anderen Spalten generierenLiebling @jthi (Jarmo) und Lieber @txnelson (Jim),
Ich bin wirklich dankbar für Ihre Unterstützung und Freundlichkeit.
Mit einer dieser beiden Methoden und einer Kombination dieser beiden werde ich mit Sicherheit einen funktionierenden Weg finden.
Vielen Dank noch einmal an euch beide.
Frohe Weihnachten und ein glückliches Neues Jahr. Genieße deine Zeit.
Beste grüße,
Harry
Betreff: Ich möchte zwei Spalten basierend auf einem Muster aus anderen Spalten generierenIch habe es versucht. Ich versuche, Lag() nach Möglichkeit zu vermeiden und es durch Col-Funktionen zu ersetzen. Die schwierigste Formel scheint zu sein Erforderliche Spalte 1 und ich konnte ohne die Verwendung von Lag() nicht schnell eine gute Formel herausfinden (es gibt höchstwahrscheinlich irgendwie eine Lösung mit Col Cumulative Sum). Eine Idee wäre, die Stellen zwischen Anfang und Ende mit „Fortlaufend“ oder etwas Ähnlichem zu füllen. Dann könnten Sie vielleicht einfacher Col Cumulative Sum verwenden, aber dann würde die schwierigste Formel höchstwahrscheinlich einfach zu verschieben Anfang und Ende .
Mehr sehen... Wenn Sie Zeit haben, würde ich vorschlagen, beide Lösungswege auszuprobieren, nämlich die eine @txnelson hat für eine stärkere Nutzung von Lag und Vergleichen gesorgt, und das, was ich mit Col-Formeln habe. Beide haben definitiv ihre Anwendungsfälle, und wenn Sie sie verstehen, wird Ihnen das auf lange Sicht beim Schreiben von Formeln/Berechnungen in JMP helfen. Und in manchen Fällen können Sie, wenn Sie verstehen, beides zu kombinieren, recht schwierige Aufgaben allein mit Formeln lösen.
Nachdem Sie die Logik zum Laufen gebracht haben, würde ich höchstwahrscheinlich Formeln aus der Datentabelle entfernen (oder Formula() durch << Set Each value in script) ersetzen, da dies höchstwahrscheinlich kaputt geht, wenn die Reihenfolge in der Datentabelle geändert wird.
Betreff: Ich möchte zwei Spalten basierend auf einem Muster aus anderen Spalten generierenDanke @txnelson ,
Ich habe einige Fortschritte gemacht – und den Start- und Endpunkt jedes Satzes richtig identifiziert. Ich habe eine sehr einfache Logik verwendet, die Sie in der Formelspalte sehen können.
Aber jetzt fällt es mir schwer, zwischen jedem Paar von „Start“- und „End“-Punkten Zahlen zu setzen. Ich habe ein Problem damit, den Zähler bei „Ende“ anzuhalten. Mein Problem ist möglicherweise genauso kompliziert, aber zumindest habe ich jetzt eine klare Markierung/Markierung an meinem Start- und Endpunkt.
Irgendeine Hilfe dabei?
Danke.

Danke.
Betreff: Ich möchte zwei Spalten basierend auf einem Muster aus anderen Spalten generierenDas Problem scheint in der Logik zu liegen, die auf die JSL-Variable „other“ angewendet wird.Ich habe heute keine Zeit, mich mit dem Problem zu befassen, aber morgen Nachmittag sollte ich in der Lage sein, einige Nachforschungen anzustellen.
Betreff: Ich möchte zwei Spalten basierend auf einem Muster aus anderen Spalten generierenHallo Jim,
Entschuldigung für die Verwirrung.
Ihre ursprüngliche Formel (ich glaube, ich habe sie nicht vermasselt) funktionierte in den meisten Fällen, erfasste aber auch einige falsche Punkte und übersah einige wenige im gesamten Datensatz. In der angehängten Teilmenge der Daten (nur für eine „ID“ und einen Wert von „Teilmenge“) gibt es eine Spalte, die auf Ihrer Formel basiert und nur wenige falsche Punkte enthält.
Zeilen: 647-649 falsche Eingabe (rote Farbe)
Zeilen: 868-937 nicht erfasst (rote Farbe)
Zeilen: 1307-1311 falscher Eintrag (rote Farbe)
Und das wurde behoben, als ich die Bedingung auf „:Occurrence“ gesetzt habe.
Jetzt suche ich -
1. Letzter primärer Sensor, der vorkommt = n (z. B. n = 2), markieren Sie ihn als „Start“.
2. Erster primärer Sensor in Vorkommen = n+1 (= 3), und wenn es keinen primären Sensor für n = 3 gibt, sollte er den Wert in Vorkommen = n+2 == 4 stoppen/markieren. Markieren Sie es als „Ende“.
3. Und zuletzt tragen Sie die Zahlen zwischen „Start“ und „Ende“ in eine neue Spalte ein.
Alternative Denkweise (möglicherweise) –
Wenn wir bei jedem einzelnen Vorkommen n (n = 2) den ersten Primärsensor als ENDE und den letzten Primärsensor als Start markieren und dann einen Wert zwischen Start und Ende in eine neue Spalte eintragen können.
Ich hoffe, das wird helfen und die Dinge klarstellen.
Danke,
Ich denke, das kann sein, wenn ich einen finden kann
Betreff: Ich möchte zwei Spalten basierend auf einem Muster aus anderen Spalten generierenich bin verwirrt.Soweit ich sehen kann, scheint das Skript, das ich geschrieben habe, zu funktionieren, außer dass Sie nach Zeile 44 in der Datentabelle die Regeln geändert haben und nun möchten, dass das Ende in der Zeile vor dem nächsten Wert von Primary liegt.Was ist das, was Sie wollen?

Betreff: Ich möchte zwei Spalten basierend auf einem Muster aus anderen Spalten generierenHallo @txnelson , Vielen Dank für Ihre Antwort.
Ich kann den korrekten (aktualisierten Anforderungs-)Startpunkt nicht ermitteln. In der Datentabelle („Beispieldaten aktualisiert“) und im Bild hatte ich korrigierte Datenspalten manuell eingegeben.
Die Formel. Früher habe ich „Erforderliche Spalte 1 alt“ und „Erforderliche Spalte 2 alt“ erhalten. (Es ist genau so, wie Sie es mir gegeben haben, ich habe eine Vorkommensbedingung hinzugefügt) –
RCValue = "";
:Required Column 1[Row()] = .;
If( :Occurrence != Lag( Occurrence, -1 ),
other = "Yes"
);
If( Row() == 1 | :ID != Lag( :ID ) | :"Sub-set"n != Lag( :"Sub-set"n ),
counter = 0;
withinStart = "No";
other = "Yes";
);
If(
:Sensor == "Primary" & :Occurrence == Lag( :Occurrence, -1 ) & Dif( :Occurrence ) == 0 &
withinStart == "Yes",
RCValue = "End";
withinStart = "No";
other = "No";,
:Occurrence != Lag( Occurrence, -1 ) & Lag( :Sensor, -1 ) != "Primary" & withinStart == "No"
& other == "Yes" & Row() != N Rows( Current Data Table() ),
withinStart = "Yes";
counter = counter + 1;
RCValue = "Start";
);
If( withinStart == "Yes" | RCValue == "End",
:Required Column 1[Row()] = counter
);
RCValue;

Vielen Dank.
Betreff: Ich möchte zwei Spalten basierend auf einem Muster aus anderen Spalten generierenSie haben den Code, den ich zuvor bereitgestellt habe, geändert, um die Ergebnisse zu erhalten, die Sie in Ihrer letzten Antwort angegeben haben. Bitte geben Sie die JSL an, die Sie verwenden, um die Ergebnisse zu erhalten, die Sie in Ihrer Beispieldatentabelle anzeigen.
Betreff: Ich möchte zwei Spalten basierend auf einem Muster aus anderen Spalten generierenHallo @txnelson und alles,
Ich konnte Ihren Code perfekt an meine Anforderungen anpassen. Aber in der zweiten Phase der Fehlerbehebung brauche ich so etwas:
Markieren Sie :Sensor = „Primary“ (1.) um aufeinanderfolgende Änderungen in :Occurrence.Im angegebenen Screenshot -
erforderliche Werte dazwischen --- Letzte „Grundschule“ In Vorkommen = 2 Und Erste „Grundschule“ In Vorkommen = 3 [aufeinanderfolgende Änderung des Vorkommens]
Die erste Grundschule zu finden ist nicht so schwierig. Sie wissen nicht, wie Sie die letzte Grundschule finden? Denken Sie darüber nach, die Teilmengendaten für Vorkommen = 2 irgendwie umzukehren (absteigende Reihenfolge), den Wert zu finden und ihn dann zurückzusetzen. Es ist nicht möglich, eine Formel einzugeben!! Gibt es eine andere Möglichkeit, das zu tun?
Irgendeine Hilfe?
Danke.

Betreff: Ich möchte zwei Spalten basierend auf einem Muster aus anderen Spalten generierenHallo @txnelson ,
Mit wenigen Fehleingaben hat es fast geklappt. Ich glaube, wir müssen eine zusätzliche Bedingung für die Spalte „:Occurrence“ hinzufügen. Das heißt, :Occurrence muss geändert werden, um :Required Column 2 == „Start“ festzulegen (und kann eine Option sein – es sollte dasselbe sein, wenn :Required Column 2 == „End“).
Etwas wie - Dif(:Occurrence) !=0 dann nur :Required Column 2 == "Start"
Für meine Beispieldaten (95 Zeilen) war Ihre Formel in Ordnung, aber meine tatsächlichen Daten, die mehr als 300.000 Zeilen umfassen, liefern viele falsche Einträge wie unten – (Ich denke, es sollte in Ordnung sein, sobald zusätzliche Anforderungen für :Occurrence hinzugefügt werden. ) Dies ist nur ein einzelner Screenshot des falschen Eintrags.

Hoffentlich!!Ich kann die Formel/den Code ändern und die Anforderung :Occurrence hinzufügen. zusätzlich zu Ihrer Formel.
Nochmals vielen Dank für Ihre Unterstützung.
Betreff: Ich möchte zwei Spalten basierend auf einem Muster aus anderen Spalten generierenHier ist eine Formel für die Spalte, auf die Sie sich beziehen: Erforderliche Spalte 2.Wenn Sie den Code studieren, werden Sie feststellen, dass er lediglich die von Ihnen angegebenen Logikregeln anwendet, die bei der Bestimmung der Start- und Endwerte überprüft werden müssen.Es enthält auch die Einstellung des Werts für die Spalte „Erforderliche Spalte 1“. Um diese Formel auszuführen, erstellen Sie einfach die erforderliche Spalte 1 und die erforderliche Spalte 2. Legen Sie „Erforderliche Spalte 2“ als Zeichenspalte fest.Öffnen Sie dann die Formel für die erforderliche Spalte 2 und kopieren Sie die Formel unten in die Spalte.

RCValue = "";
:Required Column 1[Row()] = .;
If( :Sensor != "Primary",
other = "Yes"
);
If( Row() == 1 | :ID != Lag( :ID ) | :"Sub-set"n != Lag( :"Sub-set"n ),
counter = 0;
withinStart = "No";
other = "Yes";
);
If(
:Sensor == "Primary" & withinStart == "Yes",
RCValue = "End";
withinStart = "No";
other = "No";,
:Sensor == "Primary" & Lag( :Sensor, -1 ) != "Primary" & withinStart == "No" & other == "Yes" & Row() !=
N Rows( Current Data Table() ),
withinStart = "Yes";
counter = counter + 1;
RCValue = "Start";
);
If( withinStart == "Yes" | RCValue == "End",
:Required Column 1[Row()] = counter
);
RCValue;