Vergleich von Zeilen und Spalten mit SonderzeichenDas mag sehr einfach sein, aber ich bin neu bei JMP und finde es schwierig, eine Lösung für diesen Fehler zu finden.
Unerwartetes „%“. Möglicherweise fehlt ein „“,“ oder „)“.
Für den bereichsbezogenen Datentabellenzugriff ist eine Datentabellenspalte oder -variable beim Zugriff oder bei der Auswertung von dt1:Acidic Variant', dt1:Acidic Variant /*###*/ erforderlich.
Ich vergleiche einfach eine Zeile in einer Tabelle mit Spalten der anderen Tabelle. Es funktioniert zwar für Zeilen- und Spaltennamen, die keine Sonderzeichen wie % oder () haben, aber ich werde Namen haben, die Sonderzeichen haben. Kann mir jemand zeigen, wie das gehandhabt werden kann? Jede Hilfe wird sehr geschätzt. Danke
Betreff: Vergleich von Zeilen und Spalten mit SonderzeichenIch dachte, dass meine Schleife nicht richtig war, weil sie nicht den letzten Wert annahm. Entschuldigung für das späte Update.
Betreff: Vergleich von Zeilen und Spalten mit Sonderzeichen@txnelson Mir wurde klar, dass nur die Spezifikationsgrenzen aus der letzten Zeile von Beispiel 2 nicht übernommen werden. Ich weiß immer noch nicht warum, aber ich werde es aktualisieren, wenn ich es herausfinde.
Danke.
Betreff: Vergleich von Zeilen und Spalten mit Sonderzeichen@txnelson Vielen Dank, dass Sie so schnell geantwortet haben.
Betreff: Vergleich von Zeilen und Spalten mit SonderzeichenDann vermute ich, dass es einen Unterschied zwischen dem Spaltennamen und dem Namen in der Grenzwertdatentabelle gibt
Betreff: Vergleich von Zeilen und Spalten mit Sonderzeichen@txnelson , aber wenn ich das Skript für die geänderte Tabelle ausführe, werden die Spezifikationsgrenzen nicht in die Spalte „Acidic Variants“ eingetragen.Betreff: Vergleich von Zeilen und Spalten mit SonderzeichenDas Skript liest die Grenzwerttabelle Zeile für Zeile durch.Anschließend ruft es den Spaltennamen aus der Zeile ab, in der es sich gerade befindet, und wendet die Grenzwerte auf die Datentabellenspalte nach Spaltenname und nicht nach Spaltennummer an.
Daher ist die Reihenfolge der Spalten in der Datentabelle nicht wichtig
Betreff: Vergleich von Zeilen und Spalten mit Sonderzeichen@txnelson Ist es möglich, Spezifikationsgrenzen zu einer Datentabelle hinzuzufügen, wenn die Zeilen nicht in derselben Reihenfolge wie die Spalten sind? Zum Beispiel,
Die Tabelle Beispiel1 wird die gleiche sein wie sie ist, aber die Tabelle Beispiel2 wird wie folgt aussehen:

Wie kann ich das erreichen? Vielen Dank für jede Eingabe.
Betreff: Vergleich von Zeilen und Spalten mit SonderzeichenVielen Dank für die Erklärung.
Betreff: Vergleich von Zeilen und Spalten mit SonderzeichenDas Problem tritt häufig beim Schreiben von JSL auf. Ihre Spaltennamen enthalten Sonderzeichen.So könnte beispielsweise Ihr Spaltenname lauten
A+B
und Sie versuchen, eine Spalteneigenschaft festzulegen ... in diesem Fall Spezifikationsgrenzen.Wenn der Befehl also direkt ausgeschrieben wird, sieht er so aus:
:A+B << Set Property( "Spec Limits", { LSL( 22 ), USL( 55 ), show limits( 1 ) } );
Dies wird JSL nicht gefallen, da es dies als eine Spalte mit dem Namen „A“ interpretiert, zu der Sie den Wert aus einer Variablen mit dem Namen „B“ hinzufügen und dann die Set-Eigenschaft darauf anwenden.JSL würde einfach einen Fehler auslösen.
Die Lösung besteht also darin, die Funktion :Name() zu verwenden.
:Name("A+B") << Set Property( "Spec Limits", { LSL( 22 ), USL( 55 ), show limits( 1 ) } );
Dadurch wird JSL gezwungen, A+B als Spaltennamen zu interpretieren.Um dies noch genauer zu machen: Wenn wir vorne einen Zeiger auf eine Datentabelle hinzufügen, wird sichergestellt, dass dieser nicht nur auf eine bestimmte Spalte, sondern auch auf eine bestimmte Spalte in einer bestimmten Datentabelle zeigt
dt1 = data table("..........");
dt1:Name( "A+B" ) << Set Property( "Spec Limits", { LSL( 22 ), USL( 55 ), show limits( 1 ) } );
Nun zu Ihrer konkreten Frage:
( "dt1:Name(\!"" || Column( dt2, "ColumnName" )[i] || "\!")" )
Es muss wirklich in einer umfassenderen Form betrachtet werden
Parse( "dt1:Name(\!"" || Column( dt2, "ColumnName" )[i] || "\!")" ) )
Wir müssen JSL immer von innen nach außen untersuchen.Sagen wir das also
i = 2;
und dass der Wert der zweiten Zeile in der Datentabelle dt2 für eine Variable mit dem Namen ColumnName A+B ist.
Column( dt2, "ColumnName" )[i] = "A+B"
Jetzt ist der JSL-Code aufgelöst
Parse( "dt1:Name(\!"" || "A+B" || "\!")" ) )
Die nächste Operation besteht einfach darin, drei Zeichenfolgen zu einer Zeichenfolge zusammenzufassen.
„dt1:Name(\!““
„A+B“
"\!")"
Es sieht vielleicht so aus, als gäbe es zu viele doppelte Anführungszeichen in String eins und String 3. Aber in JSL ist \! ist ein Escape-Zeichen, das angibt, dass das darauf folgende Zeichen anders behandelt werden soll.\!n wird als Linefeed-Zeichen behandelt und in unserem Beispiel wird \!" als eingebettetes doppeltes Anführungszeichen behandelt.
Sobald die Verkettung abgeschlossen ist, sieht die JSL so aus
Parse( "dt1:Name(\!"A+B\!")" ) )
Der letzte Schritt ist die resultierende Aktion der Parse()-Funktion.Es analysiert die Zeichenfolge und bereitet sie für die Ausführung vor.In unserem Fall bedeutet es einfach, dass die äußeren doppelten Anführungszeichen entfernt werden und das \!" in ein einfaches doppeltes Anführungszeichen aufgelöst wird, wobei es dabei belassen wird
dt1:Name("A+B")
Dies ist die genaue Form dessen, was als Syntax für die Referenzierung einer Spalte erforderlich ist, deren Name Sonderzeichen enthält
dt1:Name( "A+B" ) << Set Property( "Spec Limits", { LSL( 22 ), USL( 55 ), show limits( 1 ) } );
ich hoffe das hilft
Betreff: Vergleich von Zeilen und Spalten mit Sonderzeichen@txnelson Das hat wirklich wunderbar funktioniert. Können Sie mir jedoch helfen zu verstehen, was dieser Teil bewirkt? Ich habe versucht, die Namensfunktion zu verwenden, konnte es aber nicht zum Laufen bringen. Nochmals vielen Dank für Ihre Hilfe.
<SPAN class="token punctuation">(</SPAN> <SPAN class="token string">"dt1:Name(\!"</SPAN><SPAN class="token string">" || Column( dt2, "</SPAN><SPAN class="token function">ColumnName</SPAN><SPAN class="token string">" )[i] || "</SPAN>\<SPAN class="token operator">!</SPAN><SPAN class="token string">")"</SPAN> <SPAN class="token punctuation">)</SPAN>
Betreff: Vergleich von Zeilen und Spalten mit SonderzeichenHier ist eine Änderung an Ihrem Skript, damit es funktioniert.Sie waren auf dem richtigen Weg und mussten lediglich die Funktion :Name() in der Substitute-Funktion verwenden
Names Default to Here(1);
dt1 = Data Table( "Example1" );
dt2 = Data Table( "Example2" );
a = N Rows( dt2 );
colNamesList = dt1 << get column names( string );
For( i = 1, i < a, i++,
Eval(
Substitute(
Expr(
If( Try( __col__ << get name, "" ) != "",
__col__ << Set Property(
"Spec Limits",
{LSL( _LSL_ ), USL( _USL_ ), Target( _Target ), Show Limits( 1 )}
)
)
),
Expr( __col__ ), Parse( "dt1:Name(\!"" || Column( dt2, "ColumnName" )[i] || "\!")" ),
Expr( _LSL_ ), dt2:LSL[i],
Expr( _USL_ ), dt2:USL[i],
Expr( _Target ), dt2:Target[i],
)
)
);
Außerdem habe ich eine Prüfung hinzugefügt, um sicherzustellen, dass die Spalte in der Zieldatentabelle gefunden wird, damit das Skript keinen Fehler ausgibt und die Verarbeitung stoppt, bevor alle Datensätze verarbeitet sind.
Betreff: Vergleich von Zeilen und Spalten mit Sonderzeichen@Aam_jmp ,
Vielleicht ist dies ein hilfreicher Beitrag, aus dem Sie etwas lernen können https://community.jmp.com/t5/Discussions/Spec-limits-issue/mp/50166.
Ich versuche beim Durchlesen des Threads zu verstehen, was Ihre eigentliche Frage war? Es wird wahrscheinlich hilfreich sein, wenn Sie Ihr Ziel definieren – so sind die Threads einfacher zu beantworten und werden für die Community im Allgemeinen von Vorteil sein.
Betreff: Vergleich von Zeilen und Spalten mit SonderzeichenUday, danke für die Hilfe. Diesen Teil bringe ich mir selbst bei. Ich habe jedoch versucht, mithilfe einer anderen Datentabelle Spezifikationsgrenzen für eine Datentabelle festzulegen. Ich kann dies problemlos tun, wenn die Namen der Spalten keine Sonderzeichen enthalten. Allerdings kann ich mit den Sonderzeichen in meinen Datentabellen nicht umgehen. Ein Ansatz, den ich versucht habe, bestand darin, das (%) in meinen Spaltennamen zu finden und es durch ein Leerzeichen zu ersetzen. Obwohl es geklappt hat, glaube ich nicht, dass es die beste Lösung für mein Problem ist. Ich weiß, dass ich ein Add-In verwenden kann, um Spezifikationsgrenzen hinzuzufügen, aber es wäre gut zu wissen, wie ich dieses Problem mit jsl lösen kann. Vielen Dank für jeden Beitrag, den Sie hierzu leisten können. Mein Code ist:
dt1 = Data Table( "Example1" );
dt2 = Data Table( "Example2" );
a = N Rows( dt2 );
For( i = 1, i < a, i++,
Eval(
Substitute(
Expr(
__col__ << Set Property( "Spec Limits", {LSL( _LSL_ ), USL( _USL_ ), Target( _Target ), Show Limits( 1 )} );
),
Expr( __col__ ), Parse( "dt1:" || dt2:ColumnName[i] ),
Expr( _LSL_ ), dt2:LSL[i],
Expr( _USL_ ), dt2:USL[i],
Expr( _Target ), dt2:Target[i],
)
)
);
Betreff: Vergleich von Zeilen und Spalten mit Sonderzeichen@Aam_jmp ,
Wenn Sie sich die Dokumentation von Parse() ansehen, die Sie unter Help => Scripting Index ==> Parse finden,
Parse erwartet per Definition eine Zeichenfolge, Sie übergeben jedoch zwei Argumente in Ihrer Implementierung und erwarten, dass diese verkettet werden. Aus diesem Grund konnte ich verstehen, warum es nicht funktioniert, selbst wenn Sie den richtigen Spaltennamen angeben. Scripting Index ist Ihr Freund und Sie nutzen ihn immer häufiger, um sich bei den Syntaxen und Funktionsdefinitionen zu helfen.
Betreff: Vergleich von Zeilen und Spalten mit SonderzeichenWarum liefert es mit Parse jedoch nicht die gewünschte Ausgabe, selbst nachdem ich den korrekten Namen der Spalte angegeben habe? Gibt es eine Möglichkeit, Sonderzeichen wie % und () zu analysieren? @uday_guntupalli
Betreff: Vergleich von Zeilen und Spalten mit Sonderzeichen@Aam_jmp
dt1 = data table( "Example1" );
dt2 = data table( "Example2" );
ColValuesEx2 = dt2:Column 1 << Get Values;
a = n rows(dt2);
Res= {};
For(i=1,i<=a,i++,
temp = Concat("dt1:",ColValuesEx2[i]);
Insert Into(Res,temp);
);
Show(Res);
Versuche dies. Das Problem, das ich bei dem, was Sie zuvor gemacht haben, sehe, war, dass ColName sich nicht auf eine tatsächliche Spalte bezieht. Wenn Sie versuchen, Datentabelle 2 zu erfassen, sollten Sie sich auf eine Spalte beziehen, die in der Datentabelle vorhanden ist.
Ich habe „concatenate“ anstelle von „Parse“ verwendet und erhalte das gewünschte Ergebnis.

Betreff: Vergleich von Zeilen und Spalten mit Sonderzeichen@uday_guntupalli Auch wenn ich die Tabelle nicht bereitstellen kann, möchte ich unter anderem die Möglichkeit haben, Spaltennamen zu analysieren. Ich habe Datentabellen erstellt, die einigermaßen ähnlich aussehen. Ich möchte, dass der folgende Code für diese Daten funktioniert.
Names Default To Here( 1 );
dt1 = data table( "Example1" );
dt2 = data table( "Example2" );
dt4 = dt2:Column 1 << get values();
a = n rows(dt2);
For(i=1,i<=a,i++,
Parse("dt1:" || dt4[i]);
);
Betreff: Vergleich von Zeilen und Spalten mit Sonderzeichen@Aam_jmp ,
Bitte lesen Sie meine Antwort noch einmal und versuchen Sie es mit dem folgenden Beispiel. Die Namensfunktion kann Ihr Problem lösen. Ich poste ein Beispiel davon. Sofern Sie Ihr Skript und Ihre Beispieldaten nicht weitergeben, ist es schwer zu erkennen, was den Fehler verursacht.
dt = Open( "$SAMPLE_DATA/Big Class.jmp" ); // Open Sample Data
MeanWeight = Col Sum(dt:weight); // Calculate Column Mean
dt << New Column("% of Total Weight",Numeric,Format("Percent",10,2),Continuous,Formula(:weight/MeanWeight)); // Define New column with % in name
dt << New Column("Test",Numeric,Format("Percent",10,2),Formula(Col Cumulative Sum(:Name("% of Total Weight")))); // Define Test Column that demonstrates the use of Name function that can capture the column name with % in it Ich hoffe, dass dies meinen Vorschlag etwas besser erklärt, wenn nicht, bieten Sie bitte etwas mehr Details an, damit ich versuchen kann, zu helfen
Betreff: Vergleich von Zeilen und Spalten mit SonderzeichenDie Namen lauten wie folgt: Titer (%) 1, Titer (%) 2 und so weiterBetreff: Vergleich von Zeilen und Spalten mit Sonderzeichen@Aam_jmp ,
Wenn das %-Symbol Teil Ihres Spaltennamens ist, sagen wir beispielsweise, dass der Spaltenname „%x“ ist, dann versuchen Sie, die Spalte mit der Funktion Name() zu identifizieren. Wenn Sie einen Beispieldatensatz und Ihr Skript bereitstellen könnten, können wir uns das ansehen, um herauszufinden, was falsch ist