Impila le colonne in base alla selezione delle espressioni regolari<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Sto costantemente impilando centinaia di colonne che hanno prefissi comuni e terminano con un numero o suffisso diverso.
Quello che mi piacerebbe fare è scrivere uno script per:
- Trova le colonne in base a un pattern regex, ad esempio "BLUE_CARS_*_\d{1,2}", "HOMES_(SINGLE|DOUBLE)_WIDE", ecc.
- Seleziona quelle colonne
- Impila le colonne (e posizionale in un nuovo foglio dati)
Per la vita di me, non riesco a trovare (o cercare correttamente su Google) come utilizzare l'espressione regolare con la selezione delle colonne.
Ho preso in considerazione la selezione delle colonne per tipo di dati, ma sono presenti altre colonne che condividono quel tipo di dati, non a
menzione che voglio qualcosa di molto più flessibile.
Eventuali suggerimenti o frammenti di codice sarebbero immensamente apprezzati e grazie in anticipo.
Re: Impilare le colonne in base alla selezione delle espressioni regolariLo show() e i dettagli su quello che stava succedendo mi hanno aiutato a vedere che in realtà gli stavamo dicendo di usare un nome di colonna, non la colonna vera e propria - suppongo che abbia senso poiché nc = dt << ottieni i nomi delle colonne;< /code> è stato utilizzato in primo luogo. Quindi, invece di
cname = nc<I> << prendi nome;</I>
avevamo bisogno
cname = colonna(nc<I> ) << prendi nome;</I>
Immagino che per impostazione predefinita get column names() restituisca le stringhe, non un elenco di colonne. Ah, beh, ora funziona come previsto.
Grazie per l'aiuto!
Re: Impilare le colonne in base alla selezione delle espressioni regolarimostra( io, nc );
mostrerà i valori correnti delle due variabili.Inseriscilo dopo "i++", incremento nel ciclo.nc *dovrebbe* essere visualizzato come un elenco (tra parentesi graffe) di nomi di colonne.il messaggio <<
Controlla il registro dopo averlo eseguito con il comando show e vedi cosa c'è che non va.
Gli oggetti Scriptable in JMP sono oggetti che comprendono i messaggi.Una variabile può contenere una matrice, un elenco o un numero, che non sono oggetti su cui è possibile scrivere, oppure la variabile può contenere una casella di visualizzazione, una tabella di dati o una colonna, che sono oggetti su cui è possibile scrivere.Ci sono anche molti altri tipi, alcuni script, altri no.
La mia ipotesi è che la tabella dei dati non sia scelta esplicitamente dal componente aggiuntivo e gli errori si ripetono da lì.Potresti aver bisogno di un altro show() prima di questo.
Craige
Re: Impilare le colonne in base alla selezione delle espressioni regolariSto riscontrando problemi nel trasformare questo codice in un componente aggiuntivo JMP (con un pulsante). Il codice funziona alla grande quando lo eseguo dall'editor di script, ma quando provo a eseguirlo come componente aggiuntivo, dà il seguente reclamo:
Send Expects Scriptable Object in accesso o valutazione di 'Send' , nc<I> << /*####*/ottieni nome/***##*/</I>
For( i = 1, i <= N Items( nc ), i++, cname = nc<I> << /*###*/get name/*###*/; model = nc<I> << get modeling type;</I></I>
Se cambio la prima riga in read, cname = dt << ottieni nome(nc<I> );</I> passa a lamentarsi della riga successiva.
Quindi cambio questa riga per leggere, modello = dt << ottieni il tipo di modellazione (nc<I> );</I> e passa a una funzione sort(), modificando l'errore:
<CODE> Send Expects Scriptable Object in accesso o valutazione di 'Send' , trasposto <<SPAN style="font-family: arial, helvetica, sans-serif;"> e il codice legge</SPAN>
transposed = transposed << /*###*/ sort(replace table, by("Row 1"), order(Descending))/*###*/;<BR /><SPAN style="font-family: arial, helvetica, sans-serif;">Qualche idea su come posso risolvere questo problema e renderlo portatile (funziona sia nell'editor che come componente aggiuntivo senza problemi)? Mi scuso per quanto possa sembrare poco chiaro.</SPAN>
(Wow, perché non c'è il pulsante di anteprima del messaggio...).
Re: Impilare le colonne in base alla selezione delle espressioni regolariE sì, ho lasciato alcune funzioni show nel JSL perché sono utili aiuti per il debug.Tirali fuori quando hai finito in modo che il registro non sia ingombro di vecchie risposte a vecchie domande.
Craige
Re: Impilare le colonne in base alla selezione delle espressioni regolaribenvenuto, grazie.Utilizzare una tabella dati esplicita quando possibile:
dtstacked = dt << Stack(
colonne (icone),
Colonna Etichetta sorgente( "Etichetta" ),
Colonna dati in pila( "Dati" )
);
dtstacked farà riferimento alla tabella di dati risultante da dt<
Re: Impilare le colonne in base alla selezione delle espressioni regolariGrande! Questo è esattamente ciò di cui avevo bisogno.
Sto ancora familiarizzando con la sintassi jsl e la necessità di "mostrare" tutto.
E per la funzione Regex(), non sono riuscito a trovare alcuna documentazione sull'utilizzo al di fuori di una normale funzione di colonna, quindi è utile che funzioni allo stesso modo. Questo si rivelerà utile in tanti modi.
Correlati, come posso assicurarmi di avere la nuova tabella/finestra selezionata da utilizzare nel resto di uno script?
Inoltre, ho dovuto assolutamente disattivare la traduzione, perché stava incasinando il codice.
Grazie!
Re: Impilare le colonne in base alla selezione delle espressioni regolariPotrebbe essere necessario disattivare la casella di controllo della traduzione nella parte superiore dello schermo per visualizzare correttamente il JSL.
Re: Impilare le colonne in base alla selezione delle espressioni regolariQualcosa come questo.
dt = Open( "$sample_data/big class.jmp" );
allCols = dt << getcolumnnames;
Mostra( allCols ); // questi sono nomi, non stringhe
acoli = {}; // colonne con "a" nel nome
icone = {}; // colonne con "i" nel nome
n = N elementi( allCols );
For( k = 1, k <= n, k++,
cname = allCols << getname; // queste sono stringhe, buone per regex
Mostra( nomec );
If( !Is Missing( Regex( cname, "a" ) ),
Inserisci in( acols, allCols) // mantieni i nomi
);
If( !Is Missing( Regex( cname, "i" ) ),
Inserisci in (icols, allCols) // mantieni i nomi
);
);
Mostra( acoli, icoli ); // {:nome, :età} e {:altezza, :peso}
dt << Pila(
colonne (icone),
Colonna Etichetta sorgente( "Etichetta" ),
Colonna dati in pila( "Dati" )
);
