Come sostituire le righe vuote fino alla voce successiva (e continuare)?Cara comunità JMP,
(W10, 64 bit, JMP 15.0 Pro)
Ho una tabella dati di grandi dimensioni importata da un file Excel e ho bisogno di riempire le righe vuote di una colonna con le voci dell'elenco precedente. Sto cercando di scrivere JSL per passare da una colonna come a sinistra a quella a destra, come mostrato di seguito:

Penso che dovrebbe essere abbastanza semplice da programmare, ma il problema che riscontro è l'arresto corretto alla fine del prodotto precedente e l'inizio con il nuovo prodotto. Non devo scorrere correttamente.
Qualsiasi suggerimento/aiuto è il benvenuto.
Grazie!,
DS
Ri: Come sostituire le righe vuote fino alla voce successiva (e continuare)?Un paio di ingegneri di sistema JMP continuavano a girare su questo problema e questa era la soluzione migliore. Questa versione finale di @Brady Brady è più veloce e più robusta della semplice formula con cui abbiamo iniziato. Lo uso da anni e ho trovato che funziona bene in diverse situazioni. Sono contento che abbia funzionato per te!
Ri: Come sostituire le righe vuote fino alla voce successiva (e continuare)?CIAO @Byron_JMP ,
Grazie per il codice di modifica dello scripting nel tuo post precedente. Questa è migliore della mia soluzione perché controlla se manca la prima voce nella colonna e, in tal caso, la sostituisce con la successiva voce esistente, cosa che ho scoperto avviene in un paio di importazioni che inserisco. Non ho esperienza con alcune delle soluzioni di scripting presenti, ad esempio il modo in cui si utilizzano le informazioni vec e matrice per cercare determinate cose. Ad ogni modo, l'ho applicato al mio problema specifico e l'ho risolto senza intoppi.
Grazie!,
DS
Ri: Come sostituire le righe vuote fino alla voce successiva (e continuare)?Non riesco a trovare la funzione o il messaggio JSL che esegue la stessa operazione. Non penso che esista. Esiste una funzione Main Menu() ma questo comando è associato alla colonna selezionata, non al menu principale JMP.
Ri: Come sostituire le righe vuote fino alla voce successiva (e continuare)?Non conosco il codice JSL dietro la soluzione interattiva. Dovrebbe andare bene dato che hai più opzioni lì.
So che la soluzione interattiva, come alcuni script, può essere applicata a più colonne contemporaneamente. Basta selezionare tutte le colonne e fare clic con il pulsante destro del mouse, scegliere l'opzione Riempi.
Ri: Come sostituire le righe vuote fino alla voce successiva (e continuare)?Queste sono alcune note JSL che ti aiuteranno se stai creando script per la soluzione
//better version of Fill in Missing Cells, by Brady Brady
Names Default To Here( 1 );
dt = Current Data Table();
dtcollist = dt << get column names;
dlg = Dialog( "Select Column", vlist( selection = List Box( dtcollist ), button( "OK" ) ) );
Remove From( dlg, 2 );
Eval List( dlg );
dtMat = (dt << Get All Columns As Matrix);
For( i = 1, i <= N Items( selection ), i++,
colNum = Contains( dtColList, Name Expr( selection[i] ) );
vMat = dtMat[0, colNum];
mis = Loc( Is Missing( vMat ) );
If( N Row( mis ),
col = column(selection[i]);
If( mis[1] == 1,
col[1] = col[(Loc( vMat ))[1]]
);
For( j = if(mis[1]==1, 2, 1), j <= N Row( mis ), j++,
col[mis[j]] = col[mis[j] - 1]
);
);
);
///////////////////////////// short tweak for scripting
dtcollist=dtnr<<GET column="" names=""></GET>
Ri: Come sostituire le righe vuote fino alla voce successiva (e continuare)?c'è un componente aggiuntivo davvero fantastico, un must chiamato strumenti della tabella dati
c'è uno strumento di interpolazione che fa questo e molto altro ancora. Inoltre è molto più veloce delle formule sui tavoli di grandi dimensioni.

Ri: Come sostituire le righe vuote fino alla voce successiva (e continuare)?CIAO @Dan_Obermiller ,
Grazie per l'avviso a riguardo. Ho visto il motivo Riempi fino alla fine, Riga o riempimento, ma mai prima.
Conosci il codice JSL che lo fa? Il motivo per cui lo chiedo è che voglio tutto questo in codice JSL perché sto leggendo diversi file per creare una tabella di dati di grandi dimensioni e devo automatizzare il processo in modo che l'utente finale esegua semplicemente lo script e esca la tabella senza valori mancanti per il prodotto. Se è più veloce ed elegante della mia soluzione, vorrei modificare il codice e inserirlo nel mio script.
Grazie!,
DS
Ri: Come sostituire le righe vuote fino alla voce successiva (e continuare)?Hai uno script che farà il lavoro, ma esiste anche una soluzione interattiva. Seleziona la colonna che necessita della sostituzione in modo che tutte le righe siano selezionate. Fai clic con il pulsante destro del mouse sulla griglia di dati di quella colonna e scegli Riempi > Sostituisci mancante con valore precedente.

Ri: Come sostituire le righe vuote fino alla voce successiva (e continuare)?CIAO @Thierry_S ,
La tua formula probabilmente funzionerebbe, ma non sono riuscito a farla funzionare idealmente con la tabella particolare che ho. Un problema che ho riscontrato è che a volte ho diverse righe una dopo l'altra in cui il prodotto cambia e il ritardo non funziona.
Ho inventato questo codice, che funziona perfettamente. Non è molto elegante, ma funziona!
Grazie per l'aiuto!,
DS
RowReplace = dt << Get Rows Where( :Product != "" );
RowEnd = RowReplace;
Remove From( RowEnd, RowEnd[1] );
Insert Into( RowEnd, N Rows( dt ) );
For( l = 1, l <= N Items( RowReplace ), l++,
For( irow = 2, irow <= RowEnd[l], irow++,
If( Is Missing( :Product[irow] ) == 1,
:Product[irow] = :Product[RowReplace[l]],
)
)
);
Ri: Come sostituire le righe vuote fino alla voce successiva (e continuare)?Ciao, ecco una semplice formula per risolvere il trucco
If( Is Missing( :Column 1 ),
Lag( :Column 2, 1 ),
:Column 1
)
Migliore,
TS