Wie finde ich Zeilen mit denselben Werten für zwei beliebige Spalten in einer bestimmten Spalte?Zum Beispiel die Spalten 1 —— 3 hier:
dt = Open( "$SAMPLE_DATA\Missing Data Pattern.jmp" );
dt<<NEW column=""></NEW>

Danke!
Automatisierung und SkripterstellungBetreff: Wie finde ich Zeilen mit denselben Werten für zwei beliebige Spalten in einer bestimmten Spalte?Ich danke Ihnen für Ihre Hilfe!

Betreff: Wie finde ich Zeilen mit denselben Werten für zwei beliebige Spalten in einer bestimmten Spalte?@lwx228 , @txnelson ,
Einfach nur so...
- Hinzugefügt @lwx228 Beispieldaten zu @txnelson , siehe beigefügte JMP-Datentabelle JN_AdjacentPlus.jmp
- Das folgende Skript ist in die Tabelle eingebettet. Das Skript heißt „Suchen Sie alle Zeilen mit passenden angrenzenden Spalten“ und stimmt tatsächlich mit Werten überein, nicht mit leeren Werten.
- Hinweis Nr. 1: Dieses Skript benötigt eine beliebige Anzahl von Spalten. Die Spalten müssen in der Datentabelle nicht benachbart sein. Ändern Sie einfach die Spaltenspezifikation in der Definition von xmat.
- Hinweis Nr. 2: Abs(x1-x2) stellt sicher, dass benachbarte Übereinstimmungen Null zurückgeben und alle anderen Werte > 0 sind.
- Hinweis Nr. 3: Vmin() ermittelt das Minimum jeder Spalte einer Matrix. Transpose( Vmin(transpose(Abs(x1-x2))) ) gibt also das Zeilenminimum von Abs(x1-x2) zurück.
- Hinweis Nr. 4: Loc( vec ==0 ) gibt die Zeilennummern zurück, deren Wert Null ist.
- Hinweis Nr. 5: Jims Lösung findet jede Übereinstimmung, dieses Skript findet benachbarte Übereinstimmungen.
Names Default to Here(1);
dt = current data table();
xmat = dt[0,1::4];
nc = ncol(xmat);
x1 = xmat[0,1::nc-1];
x2 = xmat[0,2::nc];
idx = Loc( Transpose(Vmin(Transpose(abs(x1-x2)))) == 0);
dt << New Column("t1", numeric, continuous);
:t1[idx]=1;
Betreff: Wie finde ich Zeilen mit denselben Werten für zwei beliebige Spalten in einer bestimmten Spalte?Danke, Jim!
Mode( dt[i, 1::3] || [-999] ) == -999
Betreff: Wie finde ich Zeilen mit denselben Werten für zwei beliebige Spalten in einer bestimmten Spalte?Hier ist eine andere Sicht auf das Thema.Ich verwende eine Mode()-Funktion, um den Modus zu sehen.Wenn ein tatsächlicher Modus vorhanden ist, bedeutet dies, dass mindestens zwei Werte übereinstimmen und daher Spalte t1 auf 1 gesetzt wird. Eine ausführlichere Erklärung finden Sie in den JSL-Kommentaren.
Ich habe eine Datentabelle angehängt, die ich zum Testen verwendet habe.
Names Default To Here( 10 );
dt = Current Data Table();
New Column( "t1" );
For( i = 1, i <= N Rows( dt ), i++,
// add a value to the matrix that is less
// than any value in the data table. If
// the mode() function does not find an
// actual mode, it returns the smallest
// value from the matrix, so if that is
// the value returned, you know there
// are not at least 2 values that equal
// each other in the columns
If( Mode( dt[i, 0] || [-999] ) == -999,
dt:t1[i] = .,
dt:t1[i] = 1
)
);
Betreff: Wie finde ich Zeilen mit denselben Werten für zwei beliebige Spalten in einer bestimmten Spalte?
dt = Current Data Table();
x = dt << Get As Matrix();
For( i = 1, i <= N Row( dt ), i++,
For( j = 1, j <= 2, j++,
If( x[i, j] == x[i, j + 1],
x[i, 5] = 1;
Break();
)
)
);
dt[0, 0] = x;