Compila le celle mancanti<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Le tabelle dei report spesso finiscono per avere colonne incomplete in cui le etichette devono essere copiate nelle celle sequenziali sottostanti fino all'etichetta successiva in cui il processo viene ripetuto ancora e ancora. L'importazione guidata di Excel ha un'opzione per gestire gli intervalli di celle mancanti che vengono unite. Questo script può essere utilizzato dopo l'importazione dei dati e non richiede l'unione degli intervalli di celle mancanti.
Uso questo script, o versioni di esso, da così tanto tempo che non sono sicuro da dove provengano le sue ossa.
Re: Compila le celle mancanti@bayesfactor ha scritto:
Devo dire che queste sono alcune soluzioni orribilmente contorte per quello che dovrebbe essere un 1-liner:
Sono d'accordo che c'è solo una riga di codice che l'utente deve scrivere nel collegamento fornito, tuttavia la funzione sottostante non è un oneliner. Questo è vero per la maggior parte delle funzioni facili da usare in quasi tutti i linguaggi di programmazione, se è R, Python, MATLAB, anche in C/C++, ....
Nel componente aggiuntivo degli strumenti tabella dati (come @Byron_JMP menzionato) troverai una funzionalità Span Empty Cells, dove @brady_brady ha creato una tale funzione che potresti usare per fare ciò che vuoi con un comando. Sebbene lo strumento metta la selezione della tabella e delle colonne e tutte le impostazioni in un'interfaccia. Quindi, se si desidera farlo in modo diverso, è necessario modificare il codice sorgente della funzione in modo che prenda le colonne selezionate e accetti un ingresso separato che specifica il modo in cui estendere le celle.
Nel caso in cui desideri avere una funzione JSL per farlo per poterla incorporare in altri script, sarebbe una buona idea mettere questa richiesta sia a support@jmp.com e il Lista dei desideri di JMP.
L'altro modo è basarsi sulla funzione di script di Brady e modificare la routine da utilizzare come funzione JSL in uno script JSL.
Re: Compila le celle mancantiottieni questo componente aggiuntivo (gratuito)
Componente aggiuntivo Strumenti tabella dati

quasi sicuro che lo strumento span celle vuote farà quello che stai cercando.
Re: Compila le celle mancantiHo un caso in cui voglio riempire i valori di più colonne avanti e indietro all'interno di blocchi della tabella in base a una colonna di etichetta. Dopo tutta questa discussione, non credo che ci sia un modo elegante per farlo -- correggi se sbaglio.
Devo dire che queste sono alcune soluzioni orribilmente contorte per quello che dovrebbe essere un 1-liner:
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.core.groupby.DataFrameGroupBy.fillna.html
Re: Compila le celle mancantiCiao,
come potrebbe esserci una versione più elegante, queste due opzioni dovrebbero funzionare.
In allegato è una tabella di dati che include uno script tavble che fa quello che vuoi (credo). Inoltre c'è una colonna con una formula che utilizza l'istruzione Match che fa lo stesso. Lo script che ho usato è
Names Default to Here(1);
dt = Current Data Table();
For(i = 1, i <= N Rows(dt), i++,
n = dt << get rows where(:Parameter == "def");
Column("Value")[n] = "NA";
n = dt << get rows where(:Parameter == "jkl");
Column("Value")[n] = "NA";
n = dt << get rows where(:Parameter == "mno");
Column("Value")[n] = "NA";
n = dt << get rows where(:Parameter == "d");
Column("Value")[n] = "NA";
);
Migliore,
Martino
Re: Compila le celle mancantiAncora bloccato a questo punto non sapendo come procedere oltre.
Qualsiasi input apprezzato!
Grazie
Re: Compila le celle mancantiGrazie per la risposta!
Sto cercando di scrivere uno script per questo. Il problema qui è che potrei avere molte più colonne vuote. Ma ho solo bisogno di controllare i valori per queste 4 colonne e compilare con "NA".
Grazie
Re: Compila le celle mancantiVuoi uno script per fare questo? Interattivo è possibile utilizzare la ricodifica e salvare una colonna di formula, questo script di formula può essere utilizzato per fare ciò che si desidera
un altro modo è usare una nuova colonna di formula e nell'editor di formule puoi usare l'istruzione if condizionale e controllare la mancanza e impostare il valore su na
quindi potresti usare ctrl+f per cercare e sostituire.
Son ci sono molte opzioni tra cui puoi scegliere. Mi piace molto la ricodifica. Nello scripting probabilmente userei un altro modo: salva la colonna in una matrice o un elenco perché vuoi usare valori non numerici "na" che cambierà i valori in caratteri, cambi i valori mancanti in na e quindi riscrivi i valori in valori di colonna. Spero che una di queste idee ti aiuterà ulteriormente
Re: Compila le celle mancantiHo una tabella dati con 2 colonne. È necessario verificare se il valore è vuoto per def, jkl, mno e stu e inserire "NA" per queste voci.
Qualsiasi aiuto è apprezzato.
| Parametro | Valore |
| abc | 5 |
| def | |
| ghi | 22 |
| jkl | |
| mn | |
| pqr | 3 |
| stu | |
| vwx | 73 |
| yz | 99 |
Re: Compila le celle mancantiUn altro aggiornamento:
Invece di usare questo script, dai un'occhiata a questa raccolta di strumenti: https://community.jmp.com/t5/JMP-Add-Ins/Data-Table-Tools-Add-in/ta-p/28582
Questo componente aggiuntivo ha una versione migliore dello script sopra e molto altro ancora.
Saluti,
Byron
Re: Compila le celle mancantiUn problema simile, ma leggermente diverso è il caso in cui si desidera un certo numero di celle prima la voce effettiva deve avere lo stesso valore. Lì è necessario apportare modifiche per non sovrascrivere le precedenti, ad esempio 4 celle nel caso in cui vi sia una voce non mancante. In allegato uno script e uno screenshot del datatable prima e dopo l'esecuzione dello script. In questo script ho trattato solo il caso numerico.
Names Default To Here( 1 );
// Get Current Data Table
dt = Current Data Table();
// Get Column Names from selection box (where you want to fill)
dtcollist = dt << get column names;
dlg = Dialog(
"Select Column",
vlist( selection = List Box( dtcollist ), button( "OK" ) )
);
Remove From( dlg, 2 );
Eval List( dlg );
// Get matrix of values in selected columns
dtMat = (dt << Get All Columns As Matrix);
// For loop to loop through all selected columns
For( i = 1, i <= N Items( selection ), i++,
// get i-th selected column
colNum = Contains( dtColList, Name Expr( selection[i] ) );
// get values as matrix
vMat = dtMat[0, colNum];
// get rows where matrix is non-empty
mis = Loc( vMat );
// If there is non-missing value loop through previous rows
If( N Row( mis ),
// Get i-th Column name
col = Column( selection[i] );
/*
If( mis[1] == 1,
col[1] = col[(Loc( vMat ))[1]]
);
*/
// Loop to fill previous 4 rows from the row with the k-th non-missing value
For( k = 1, k <= N Rows(mis), k++,
For( j = If(mis[k]-4 < 1, 1,mis[k]-4), j < mis[k], j++,
If(Is Missing(col[j]), col[j] = col[mis[k]],col[j])
);
);
);
);
Data Table before and after applying the scriptData Table prima e dopo l'applicazione dello script
Re: Compila le celle mancantiSto aggiornando questo componente aggiuntivo con questo script. Grazie a Brady Brady per alcune modifiche che rendono questo gioco più veloce su tavoli davvero grandi. In una tabella di righe da 5 mm con qualcosa da riempire ogni 10.000 righe ci vogliono 10-15 secondi.
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]
);
);
);
Re: Compila le celle mancantiTrasformare lo script in un componente aggiuntivo o inserirlo in un'opzione di menu è la mia stampella per aver dimenticato le formule per realizzarlo,
Questa è un'altra formula facile per farlo.
:Complete è la nuova colonna in cui risiede la formula.
:Mancante è la colonna di origine con le righe mancanti.
//Righe con carattere
Se( :Mancante == "",
:Completo[Riga() - 1, Vuoto()],
:Mancante)
//Righe con numeri
Se( manca( :mancante ) == 1,
:Completo [Riga() - 1, Vuoto()],
:Mancante)
Re: Compila le celle mancantiMi chiedo se si potrebbe farlo senza Expressions. Per una singola colonna "MyCol1" potresti fare qc. come questo:
Per ogni riga ( Se ( Manca ( MyCol1 ) , : MyCol1 = Ritardo ( MyCol1 , 1 ) ) ) ;
L'utilizzo di un approccio automatizzato per selezionare le colonne come fai tu combinato con questo dovrebbe essere in grado di fare.