Füllen Sie fehlende Zellen aus<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Berichtstabellen haben oft unvollständige Spalten, in denen Beschriftungen in die nachfolgenden Zellen darunter kopiert werden müssen, bis zur nächsten Beschriftung, wo der Vorgang immer wieder wiederholt wird. Der Excel-Importassistent verfügt über eine Option zum Umgang mit Bereichen fehlender Zellen, die zusammengeführt werden. Dieses Skript kann verwendet werden, nachdem die Daten importiert wurden, und es erfordert nicht, dass die Bereiche fehlender Zellen zusammengeführt werden.
Ich benutze dieses Skript oder Versionen davon schon so lange, dass ich mir nicht sicher bin, woher die Knochen stammen.
Betreff: Fehlende Zellen ausfüllen@bayesfaktor schrieb:
Ich muss sagen, das sind einige schrecklich verworrene Lösungen für das, was ein Einzeiler sein sollte:
Ich stimme zu, dass der Benutzer nur eine Codezeile in den von Ihnen bereitgestellten Link schreiben muss, aber die zugrunde liegende Funktion ist kein Einzeiler. Dies gilt für die meisten einfach zu verwendenden Funktionen in fast jeder Programmiersprache, sei es R, Python, MATLAB, sogar in C/C++, ....
Im Datentabellen-Tools-Add-In (als @Byron_JMP erwähnt) finden Sie eine Funktionalität Span Empty Cells, wo @brady_brady hat eine solche Funktion erstellt, mit der Sie mit einem Befehl tun können, was Sie wollen. Allerdings hat das Tool die Auswahl der Tabelle und der Spalten und alle Einstellungen in eine Oberfläche gepackt. Wenn Sie es also anders machen möchten, müssten Sie den Quellcode der Funktion so ändern, dass er die ausgewählten Spalten übernimmt und eine separate Eingabe akzeptiert, die angibt, wie die Zellen umspannt werden sollen.
Falls Sie dafür eine JSL-Funktion benötigen, um sie in andere Skripte integrieren zu können, wäre es eine gute Idee, diese Anfrage an beide zu stellen support@jmp.com und die JMP-Wunschliste.
Die andere Möglichkeit besteht darin, auf der Skriptfunktion von Brady aufzubauen und die Routine so zu modifizieren, dass sie als JSL-Funktion in einem JSL-Skript verwendet wird.
Betreff: Fehlende Zellen ausfüllenHolen Sie sich dieses Add-in (kostenlos)
Datentabellen-Tools-Add-In

fast sicher, dass das Werkzeug für leere Zellen das tut, wonach Sie suchen.
Betreff: Fehlende Zellen ausfüllenIch habe einen Fall, in dem ich Werte aus mehreren Spalten vorwärts und rückwärts innerhalb von Blöcken der Tabelle basierend auf einer Beschriftungsspalte füllen möchte. Nach all dieser Diskussion glaube ich nicht, dass es einen eleganten Weg gibt, dies zu tun - bitte korrigieren Sie, wenn ich falsch liege.
Ich muss sagen, das sind einige schrecklich verworrene Lösungen für das, was ein Einzeiler sein sollte:
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.core.groupby.DataFrameGroupBy.fillna.html
Betreff: Fehlende Zellen ausfüllenHi,
Obwohl es möglicherweise eine elegantere Version gibt, sollten diese beiden Optionen funktionieren.
Angehängt ist eine Datentabelle mit einem Tavble-Skript, das tut, was Sie wollen (glaube ich). Zusätzlich gibt es eine Spalte mit einer Formel, die die Match-Anweisung verwendet, die dasselbe tut. Das Skript, das ich verwendet habe, ist
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";
);
Am besten,
Martin
Betreff: Fehlende Zellen ausfüllenStehe an dieser Stelle immer noch fest und weiß nicht wie es weiter gehen soll.
Alle Eingaben sind willkommen!
Vielen Dank
Betreff: Fehlende Zellen ausfüllenDanke für die Antwort!
Ich versuche, ein Skript dafür zu schreiben. Das Problem hier ist, dass ich möglicherweise viel mehr leere Spalten habe. Aber ich muss nur die Werte für diese 4 Spalten überprüfen und mit "NA" ausfüllen.
Vielen Dank
Betreff: Fehlende Zellen ausfüllenMöchten Sie ein Skript, um dies zu tun? Interaktiv könnten Sie eine Formelspalte umcodieren und speichern, dieses Formelskript kann verwendet werden, um zu tun, was Sie wollen
Eine andere Möglichkeit besteht darin, eine neue Formelspalte zu verwenden, und im Formeleditor können Sie die bedingte if-Anweisung verwenden und auf fehlende ness prüfen und den Wert auf na setzen
Dann können Sie mit Strg + F suchen und ersetzen.
Sonthere gibt es viele Optionen, aus denen Sie wählen können. Der Recode gefällt mir sehr gut. Beim Skripting würde ich wahrscheinlich einen anderen Weg verwenden: Speichern Sie die Spalte in einer Matrix oder Liste, wenn Sie nicht numerische Werte „na“ verwenden möchten, wodurch die Werte in Zeichen geändert werden, ändern Sie die fehlenden Werte in na und schreiben Sie dann die Werte zurück in die Spaltenwerte. Ich hoffe, eine dieser Ideen hilft Ihnen weiter
Betreff: Fehlende Zellen ausfüllenIch habe eine Datentabelle mit 2 Spalten. Überprüfen Sie, ob der Wert für def, jkl, mno und stu leer ist, und geben Sie für diese Einträge "NA" ein.
Jede Hilfe ist willkommen.
| Parameter | Wert |
| ABC | 5 |
| def | |
| ghi | 22 |
| jkl | |
| mnr | |
| pqr | 3 |
| Stu | |
| vwx | 73 |
| ja | 99 |
Betreff: Fehlende Zellen ausfüllenEine weitere Aktualisierung:
Anstatt dieses Skript zu verwenden, werfen Sie einen Blick auf diese Sammlung von Tools: https://community.jmp.com/t5/JMP-Add-Ins/Data-Table-Tools-Add-in/ta-p/28582
Dieses Add-In hat eine bessere Version des obigen Skripts und noch viel mehr.
Prost,
Byron
Betreff: Fehlende Zellen ausfüllenEin ähnliches Problem, aber etwas anders, ist der Fall, wenn Sie eine bestimmte Anzahl von Zellen wünschen Vor der eigentliche Eintrag den gleichen Wert hat. Dort müssen Sie Anpassungen vornehmen, um die vorherigen zB 4 Zellen nicht zu überschreiben, falls ein nichtfehlender Eintrag vorhanden ist. Anbei ein Skript und ein Screenshot der Datentabelle vor und nach der Ausführung des Skripts. In diesem Skript habe ich nur den numerischen Fall behandelt.
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 scriptDatentabelle vor und nach Anwendung des Skripts
Betreff: Fehlende Zellen ausfüllenIch aktualisiere dieses Add-In mit diesem Skript. Danke an Brady Brady für einige Optimierungen, die dies an wirklich großen Tischen schneller machen. Bei einer 5-MM-Reihentabelle mit etwas, das alle 10.000 Reihen ausgefüllt werden muss, dauert es 10-15 Sekunden.
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]
);
);
);
Betreff: Fehlende Zellen ausfüllenDas Skript in ein Add-In zu verwandeln oder es in eine Menüoption einzufügen, ist meine Krücke, um die Formeln zu vergessen, um es zu verwirklichen.
Dies ist eine weitere einfache Formel, um dies zu tun.
:Complete ist die neue Spalte, in der sich die Formel befindet.
:Missing ist die Quellspalte mit fehlenden Zeilen.
//Zeilen mit Zeichen
If( :Missing == "",
:Complete[Row() - 1, Empty()],
:Fehlen)
//Zeilen mit Zahlen
Wenn (fehlt (: Fehlt) == 1,
:Complete [Row() - 1, Empty()],
:Fehlen)
Betreff: Fehlende Zellen ausfüllenIch frage mich, ob man das ohne Expressions machen könnte. Für eine einzelne Spalte "MyCol1" könnten Sie etw. tun. so was:
Für jede Reihe ( Wenn ( Wird vermisst ( MyCol1 ) , : MyCol1 = Verzögerung ( MyCol1 , 1 ) ) ) ;
Die Verwendung eines automatisierten Ansatzes zur Auswahl der Spalten, wie Sie es in Kombination damit tun, sollte in der Lage sein.