Finden Sie das längste sich wiederholende MusterHallo,
Kann jemand erklären, wie man das am längsten sich wiederholende Muster in einer Spalte findet?
Nehmen wir zum Beispiel an, ich habe die folgende Tabelle:

Das Muster mit der größten Größe ist: „1 5 6 8 7“ und kommt in dieser Spalte dreimal vor. Beachten Sie, dass es in der Tabelle ein weiteres Muster gibt („1 5 6“), das fünfmal vorkommt, aber nicht das größte ist.
Ich habe es mit Screening - Muster erkunden versucht, und obwohl es die am häufigsten duplizierten Werte zurückgibt, kann ich nicht das genaue Muster erhalten. Oder mehrere Muster mit der Anzahl der Vorkommen.
Vielleicht gibt es eine Option, die ich aktivieren sollte? Oder sollte ich eine andere Plattform verwenden? Oder ob mir jemand mit einem JSL-Skript helfen kann.
Danke
Automatisierung und SkriptingMassenanpassungRe: Finden Sie das längste sich wiederholende MusterHallo @ruskicar ,
Eine mögliche Option besteht darin, sich die Plattform „Muster erkunden“ anzusehen, die über Analysieren, Screening, Muster erkunden zugänglich ist, wie Sie erwähnt haben.
Wenn Sie im Plattformfenster auf das rote Dreieck neben „Spalte 1“ klicken, haben Sie die Option „Längste doppelte Sequenzen auswählen“. Es werden in Ihrer Datentabelle 16 Zeilen hervorgehoben, die zweimal der Sequenz "1 5 6 8 7 1 5 6" entsprechen, die die längste sich wiederholende Sequenz ist, die Sie in Ihrem Datensatz haben, nicht "1 5 6 8 7".
Ich hoffe, diese Antwort hilft Ihnen,
Re: Finden Sie das längste sich wiederholende Muster@Victor_G perfekt.
Ich habe diese JSL geschrieben und war unzufrieden mit der Antwort, die sie liefert, die überlappende Duplikate enthält.
// build a sample table
dtElements = New Table( "elements", New Column( "element", Numeric, setvalues( J( 20, 1, Random Integer( 1, 3 ) ) ) ) );
nr = N Rows( dtElements );
// build key table
maxKeyLen = 12; // too big will be slow, too small will miss something
dtKeys = New Table( "keys", addrows( nr ), New Column( "key", expression, Set Display Width( 239 ) ) );
For( irow = 1, irow <= nr, irow += 1,
maxrow = Min( nr, irow + maxKeyLen );
dtKeys:key[irow] = dtElements:element[irow :: maxrow];
);
// sort key table to put similar together
dtKeys << Sort( By( :key ), Replace Table, Order( Ascending ) );
// get the match length of adjacent rows
// ===========================================
// this code finds two runs of 1,1,1 in 1,1,1,1 <<<<<<<<<< IMPORTANT <<<<<<<<<<<
// ===========================================
dtKeys << New Column( "matchLength" );
For( irow = 2, irow <= nr, irow += 1,
a = dtKeys:key[irow];
b = dtKeys:key[irow - 1];
result = Min( N Items( a ), N Items( b ) );
For Each( {{aa, bb}, i}, across( a, b, Count( "Shortest" ) ),
If( aa != bb,
result = i - 1;
Break();
)
);
dtKeys:matchLength[irow] = result;
);
dtKeys << Sort( By( :matchLength ), Replace Table, Order( Descending ) );
Show( dtKeys:key[1][1 :: dtKeys:matchLength[1]] );
Die JSL verwendet eine Ausdrucksspalte, ForEach( Across, Count ) und verarbeitet sowohl numerische als auch Zeicheneingaben. Aber ich glaube nicht, dass es ganz was bringt @ruskicar will.
Die Idee ist, eine neue Spalte mit Werten zu erstellen, die aus den nächsten N Zeilen erstellt wird. Durch das Sortieren dieser Spalte werden Läufe mit ähnlichen Startmustern benachbart platziert.
Re: Finden Sie das längste sich wiederholende MusterJa danke, das habe ich gesucht. Das Beispiel war ein bisschen mies, wie ich sehe, aber die Antwort ist richtig
. Zu viele rote Dreiecke, also habe ich diese Option nicht entdeckt
.