Schleife? um fehlende Daten aus der Arbeit mit mehreren Spalten und mit Spaltennamen zu zählen, deren Namen sich zwischen der Analyse (Daten) ändern.Ich habe eine Frage, bei der mir diese Community hoffentlich helfen kann. Ich möchte eine Spalte hinzufügen, die die aufeinanderfolgenden Tage anzeigt, die vom letzten Tag an und rückwärts fehlen.
Ich möchte außerdem eine Spalte hinzufügen, die die Tage zählt, an denen das Ergebnis aus 7 Spalten höher als 0,02 ist.
Ich habe für beide eine Lösung gefunden, indem ich eine Reihe von if-Anweisungen verwendet habe, möchte aber erfahren, ob dies auf elegantere Weise möglich ist, möglicherweise mithilfe einer Schleife.
Schließlich ändern sich die Daten in der Tabelle von Woche zu Woche, daher möchte ich, dass diese Formel unabhängig von den Spaltennamen ist. Ist das möglich?
Ich habe eine ähnlich aussehende Datentabelle mit meinen Lösungen beigefügt.
Vielen Dank im Voraus
/Markku
Erweiterte statistische ModellierungDatenmischung und -bereinigungMassenanpassungErgebnisse teilen und kommunizierenBetreff: Schleife? um fehlende Daten aus der Arbeit mit mehreren Spalten und mit Spaltennamen zu zählen, deren Namen sich zwischen der Analyse (Daten) ändern.Meine Lösung ist höchstwahrscheinlich etwas komplizierter als nötig (vollständiges Skript im Anhang mit der Erstellung einer example_new-Tabelle). Diese Lösung geht davon aus, dass die Spalten von Interesse mit „Max(something““ benannt werden (und sollte auch dann funktionieren, wenn mehr als sieben „Max(“-Spalten vorhanden sind).
Diese beiden Formelspalten verlieren ihre Fähigkeit zur Neuberechnung bei Datenänderungen und Sie müssen sie „manuell“ über das rote Dreieck der Tabelle erneut ausführen, wenn sich Daten in der Datentabelle ändern:

Formeln für Spalten:
//modified idea based on of @txnelson solution
tempCol = dt << New Column("# last days missing_community", Numeric, Nominal,
Formula(
Local({
//get information on column names
dt = Current Data Table(),
colNames = dt << Get Column Names(String)
},
//get list of column names with only Max( in name
For(i = N Items(colNames), i > 0, i--,
If(!Contains(colNames[i], "Max("),
Remove From(colNames, i);
)
);
//get values on rows
//this might make a mistake if columns before Max( have are missing values
matLength = N Items(colNames) + 1;
rowValues = dt[Row(), 0][1::matLength];
count = 0;
//calculate missing values from the end of matrix and stop on first found value
While(Is Missing(rowValues[matLength]), count++; matLength--);
count;
)
)
);
dt << New Column("#days higher than 0,02_community", Numeric, Nominal,
Formula(
Local({
//get information on column names
dt = Current Data Table(),
colNames = dt << Get Column Names(String)
},
//get values on row and set values of colums without Max( in name to 0
rowVals = dt[Row(), 0];
For(i = N Items(colNames), i > 0, i--,
If(!Contains(colNames[i], "Max("),
rowVals[i] = 0;
)
);
//create matrix with 0 and 1 based on if value is over 0.02
rowVals_over = rowVals > 0.02;
//get sum of previous matris to calculate Max( columns with values over 0.02
Sum(rowVals_over);
);
)
);
Betreff: Schleife? um fehlende Daten aus der Arbeit mit mehreren Spalten und mit Spaltennamen zu zählen, deren Namen sich zwischen der Analyse (Daten) ändern.Liebling @Markku ,
Ich habe auch Schwierigkeiten, dynamische Skripte zu erstellen und sie in eine Spaltenformel zu analysieren. In der Vergangenheit hatte ich eine ähnliche Situation wie Sie, bei der sich die Anzahl der wiederholten Messungen (in Ihrem Fall werden die Chargen jeden Tag wiederholt) von einer Beobachtung (Charge) zur anderen ändern konnte.
Meine Lösung sieht für Ihre Anforderungen vielleicht etwas rau aus, aber ich denke, sie sollte funktionieren.
Bitte prüfen Sie vor der Verwendung, ob es für verschiedene Szenarien geeignet ist.
Führen Sie bei geöffneter Datentabelle dieses Skript aus und überprüfen Sie die Ergebnisse.
Names Default To Here( 1 );
dt = Current Data Table();
// get list of columns
Cols = dt << get column names ( Continuous );
maxlist = {};
For( i = 1, i <= N Items( cols ), i++,
If( Contains( cols[i], "Max" ),
Insert Into( maxlist, cols[i] )
)
);
dt2 = dt << Stack(
columns(maxlist ),
Source Label Column( "Time" ),
Stacked Data Column( "Data" )
);
dt2 << Sort(
By( :Batch#, :Time ),
Order( Ascending, Descending ),
replace table
);
dt2 <<NEW column=""> :Index2 ) << delete rows ();
dt3 = dt2 << Summary(
Group( :Batch# ),
Freq( "None" ),
Weight( "None" ),
Link to original data table( 0 ),
);
close (dt2, no save);
dt3:N Rows << set name ("No of last days missing");
dt << new column ("No of last days missing", set each value (0));
dt << Update(
With( dt3 ),
Match Columns( :Batch# = :Batch# )
);
close (dt3, no save);
//
dt5 = dt << Stack(
columns(maxlist ),
Source Label Column( "Time" ),
Stacked Data Column( "Data" )
);
dt5 << select where (ismissing (:Data)) << delete rows;
dt5 << select where (:Data<=0.02) << delete rows;
dt6 = dt5 << Summary(
Group( :Batch# ),
Freq( "None" ),
Weight( "None" ),
Link to original data table( 0 )
);
close (dt5, no save);
dt6:N Rows << set name ("Days over 0.02");
dt << new column("Days over 0.02", set each value(0));
dt<< Update(
With( dt6 ),
Match Columns( :Batch# = :Batch# )
);
close (dt6, no save);
<BR /></NEW>
Lassen Sie uns wissen, ob es funktioniert.
Ron
Betreff: Schleife? um fehlende Daten aus der Arbeit mit mehreren Spalten und mit Spaltennamen zu zählen, deren Namen sich zwischen der Analyse (Daten) ändern.Hier ist die alternative Formel, die ich mir ausgedacht habe
If( Row() == 1,
start = 2;
end = 8;
);
count = end;
While( Is Missing( Column( count )[Row()] ) == 1 & count >= start, count-- );
end - count;