Trova lo schema ripetuto più lungoCIAO,
Qualcuno può spiegare come trovare lo schema ripetuto più lungo in una colonna?
Ad esempio, supponiamo di avere la seguente tabella:

Lo schema con la dimensione più grande è: "1 5 6 8 7", e ricorre 3 volte in questa colonna. Si noti che nella tabella è presente un altro schema ("1 5 6"), che ricorre 5 volte, ma non è il più grande.
Ho provato con Screening - Esplora modelli e, sebbene restituisca i valori più duplicati, non riesco a ottenere il modello esatto. O modelli multipli, con il numero di occorrenze.
Forse c'è qualche opzione che dovrei abilitare? O dovrei usare qualche altra piattaforma? O se qualcuno può aiutarmi con uno script JSL.
Grazie
Automazione e scriptingPersonalizzazione di massaRi: trova lo schema ripetuto più lungoCIAO @ruskicar ,
Una possibile opzione è guardare la piattaforma "Esplora pattern", accessibile tramite Analizza, Screening, Esplora pattern come dici tu.
Se fai clic sul triangolo rosso accanto a "Colonna 1" nella finestra della piattaforma, hai l'opzione "Seleziona sequenze duplicate più lunghe". Evidenzierà nelle tue 16 righe datatable, corrispondenti a 2 volte la sequenza "1 5 6 8 7 1 5 6", che è la sequenza ripetuta più lunga che hai nel tuo set di dati, non "1 5 6 8 7".
Spero che questa risposta ti possa aiutare,
Ri: trova lo schema ripetuto più lungo@Victor_G perfetto.
Ho scritto questo JSL e non ero soddisfatto della risposta che fornisce che include duplicati sovrapposti.
// 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]] );
Il JSL utilizza una colonna Expression, ForEach( Across, Count ) e gestisce l'input sia numerico che di carattere. Ma non credo che farà esattamente cosa @ruskicar vuole.
L'idea è di creare una nuova colonna di valori costruita dalle successive N righe. L'ordinamento di quella colonna mette adiacenti sequenze di modelli iniziali simili.
Ri: trova lo schema ripetuto più lungoSì, grazie, questo è quello che stavo cercando. L'esempio era un po' scadente, ma la risposta è corretta
. Troppi triangoli rossi, quindi non ho individuato questa opzione
.