Füllen Sie fehlende Zellen aus<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Berichtstabellen weisen häufig unvollständige Spalten auf, 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-Import-Assistent verfügt über eine Option zum Umgang mit Bereichen fehlender Zellen, die zusammengeführt werden. Dieses Skript kann nach dem Import der Daten verwendet werden und erfordert nicht, dass die Bereiche fehlender Zellen zusammengeführt werden.
Ich verwende dieses Skript oder Versionen davon schon so lange, dass ich nicht mehr sicher bin, woher die Grundlagen davon stammen.
Betreff: Fehlende Zellen ergänzen@bayesfactor schrieb:
Ich muss sagen, das sind einige schrecklich komplizierte Lösungen für das, was ein Einzeiler sein sollte:
Ich stimme zu, dass der Benutzer nur eine Codezeile in den von Ihnen angegebenen Link schreiben muss, die zugrunde liegende Funktion ist jedoch 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 (as @Byron_JMP erwähnt) finden Sie eine Funktion „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 sowie alle Einstellungen in einer Oberfläche zusammengefasst. Wenn Sie es also anders machen möchten, müssen Sie den Funktionsquellcode so ändern, dass er die ausgewählten Spalten übernimmt und eine separate Eingabe akzeptiert, die angibt, wie die Zellen überspannt werden sollen.
Wenn 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 das JMP-Wunschliste.
Die andere Möglichkeit besteht darin, auf Bradys Skriptfunktion aufzubauen und die Routine so zu ändern, dass sie als JSL-Funktion in einem JSL-Skript verwendet wird.
Betreff: Fehlende Zellen ergänzenHolen Sie sich dieses Add-In (kostenlos)
Datentabellen-Tools-Add-in

Ich bin mir fast sicher, dass das Tool „Leere Zellen überspannen“ genau das tut, was Sie suchen.
Betreff: Fehlende Zellen ergänzenIch habe einen Fall, in dem ich Werte aus mehreren Spalten vorwärts und rückwärts innerhalb von Teilen der Tabelle basierend auf einer Beschriftungsspalte füllen möchte. Nach all dieser Diskussion glaube ich nicht, dass es eine elegante Möglichkeit gibt, dies zu tun – bitte korrigieren Sie, wenn ich falsch liege.
Ich muss sagen, das sind einige schrecklich komplizierte 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 ergänzenHallo,
Wie es eine elegantere Version geben könnte, sollten diese beiden Optionen funktionieren.
Im Anhang finden Sie eine Datentabelle mit einem Tavble-Skript, das das tut, was Sie wollen (glaube ich). Darüber hinaus gibt es eine Spalte mit einer Formel, die die Match-Anweisung verwendet, um dasselbe zu tun. 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 ergänzenIch stecke immer noch an diesem Punkt fest und weiß nicht, wie es weitergehen soll.
Alle Eingaben sind willkommen!
Danke
Betreff: Fehlende Zellen ergänzenDanke für die Antwort!
Ich versuche, ein Skript dafür zu schreiben. Das Problem hierbei ist, dass ich möglicherweise noch viele weitere leere Spalten habe. Ich muss aber nur die Werte für diese 4 Spalten überprüfen und mit „NA“ ausfüllen.
Danke
Betreff: Fehlende Zellen ergänzenMöchten Sie, dass ein Skript dies erledigt? Interaktiv können Sie eine Formelspalte neu kodieren und speichern. Mit diesem Formelskript können Sie tun, was Sie wollen
Eine andere Möglichkeit besteht darin, eine neue Formelspalte zu verwenden. Im Formeleditor können Sie die bedingte if-Anweisung verwenden, auf fehlende Werte prüfen und den Wert auf „na“ setzen
Dann könnten Sie Strg+F zum Suchen und Ersetzen verwenden.
Es gibt viele Optionen, aus denen Sie wählen können. Der Recode gefällt mir ganz gut. Bei der Skripterstellung würde ich wahrscheinlich einen anderen Weg verwenden: Speichern Sie die Spalte in einer Matrix oder Liste, da Sie nichtnumerische 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 wird Ihnen weiterhelfen
Betreff: Fehlende Zellen ergänzenIch habe eine Datentabelle mit 2 Spalten. Sie müssen überprüfen, ob der Wert für „def“, „jkl“, „mno“ und „stu“ leer ist, und „NA“ für diese Einträge eingeben.
Jede Hilfe wird geschätzt.
| Parameter | Wert |
| ABC | 5 |
| def | |
| ghi | 22 |
| jkl | |
| mnr | |
| pqr | 3 |
| stu | |
| vwx | 73 |
| yz | 99 |
Betreff: Fehlende Zellen ergänzenNoch ein Update:
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 verfügt über eine bessere Version des obigen Skripts und noch viel mehr.
Beifall,
Byron
Betreff: Fehlende Zellen ergänzenEin ähnliches Problem, aber etwas anders, ist der Fall, wenn Sie eine bestimmte Anzahl von Zellen wünschen Vor Der tatsächliche Eintrag muss denselben Wert haben. Dort müssen Sie Anpassungen vornehmen, um die vorherigen z. B. 4 Zellen nicht zu überschreiben, falls ein nicht fehlender 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 scriptData Table before and after applying the scriptDatentabelle vor und nach der Anwendung des Skripts
Betreff: Fehlende Zellen ergänzenIch aktualisiere dieses Add-In mit diesem Skript. Vielen Dank an Brady Brady für einige Optimierungen, die dafür sorgen, dass dies auf wirklich großen Tischen schneller läuft. Bei einer 5-mm-Zeilentabelle mit etwas, das alle 10.000 Zeilen 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 ergänzenDas Skript in ein Add-In umzuwandeln oder es in eine Menüoption einzufügen, ist meine Krücke, weil ich die Formeln vergessen habe, mit denen es funktioniert.
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
If( Missing( :Missing ) == 1,
:Vervollständigen Sie [Row() - 1, Empty()],
:Fehlen)
Betreff: Fehlende Zellen ergänzenIch 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.