Ich habe eine JMP-Tabelle, die Daten enthält, die stündlich an etwa 50 verschiedenen Stationen gemessen werden.An jeder Station werden die Daten manchmal in ppm angegeben, manchmal in ppb, gelegentlich in beiden Einheiten und gelegentlich gibt es überhaupt keine Messungen.Es ist ein ziemlich großer Datensatz und ich frage mich: Wie kann ich die Kombination der Spalten, die sich auf jede Station beziehen, in einer einzigen Spalte in einem Einheitensystem automatisieren?Oder muss ich für jede Station manuell eine neue Spalte erstellen und eine Formel eingeben, um die Konvertierung durchzuführen? Ich versuche nur, diesen Datenvorbereitungsschritt zu beschleunigen, ohne Excel zu verwenden.
DANKE SCHÖN.ES FUNKTIONIERTE!Jetzt ist alles in ppm und ich kann mit meiner Analyse fortfahren.
Hier ist ein Skript, das angesichts der von Ihnen gezeigten Struktur alle Daten in ppm umwandelt und die ppb-Spalten löscht
Dies ist nur der Ausgangspunkt, und wenn weitere Einzelheiten die Berechnungen ändern, können sie in die Logik einbezogen werden
Names Default To Here( 1 );
dt = Current Data Table();
For( i = 1, i <= N Cols( dt ), i++,
If( Trim( Word( -1, Column( dt, i ) << get name, ":" ) ) == "ppm",
ppbCol = Trim( Substr( Column( dt, i ) << get name, 1, Contains( Column( dt, i ) << get name, "ppm" ) - 1 ) || "ppb" );
For( k = 1, k <= N Rows( dt ), k++,
Column( dt, i )[k] = Sum( Column( dt, i )[k], Column( dt, ppbCol )[k]/1000 )
);
)
);
// Get rid of ppb columns
For( i = N Cols( dt ), i >= 1, i--,
If( Trim( Word( -1, Column( dt, i ) << get name, ":" ) ) == "ppb",
dt << delete columns( i )
)
);
Zweifellos gibt es viele Möglichkeiten, dies zu tun. Hier ist die erste, die mir in den Sinn kam, vorausgesetzt, das Spaltenformat in Ihrem Beispiel ist konsistent. Sie können entweder das Skript am Ende des Beitrags ausführen, um ein vollständiges Beispiel zu sehen, oder den grünen Kommentaren im Skript und den Screenshots unten folgen:
Bringen Sie alle Stationsdaten mit Stack in eine einzige Spalte:

Formel für Station (sowohl im „hübschen“ Format als auch im Code angezeigt, den Sie erhalten, wenn Sie auf die Formel doppelklicken:

Die Formel für die Einheit ist ähnlich:

Formel für Datenkonten für jede potenzielle Einheit:

Tabulate basiert auf dem ordinalen oder nominalen Datentyp für Intervalle und Stationen:

Verwenden Sie dann „In Datentabelle umwandeln“ aus dem Tabulatormenü.
Skript zum Nachstellen eines Beispiels:
//To see a full example you can copy this this into a new script window and press Run, or just following along
//with the green comments
Names default to here(1);
//Recreate part of your sample data table, you could skip this part and open your original data instead
//Note that the times are ordinal or nominal data types, this will be imporant in the tabulate platform later
dt = New Table( "Raw Data",
Add Rows( 2 ),
New Column( "IntervalStart", Numeric, "Ordinal", Format( "m/d/y h:m", 19 ), Input Format( "m/d/y" ),
Set Values( [3503606400, 3503610000] ),
),
New Column( "IntervalEnd", Numeric, "Ordinal", Format( "m/d/y h:m", 19 ), Input Format( "m/d/y h:m" ),
Set Values( [3503609940, 3503613540] )
),
New Column( "StationName: Anzac-Unit:ppb", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [1, 2] ) ),
New Column( "StationName: Anzac-Unit:ppm", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [., .] ) ),
New Column( "StationName: Ardrossan-Unit: ppb", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [., .] ) ),
New Column( "StationName: Ardrossan-Unit: ppm", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [11, 12] ) )
);
//Get a reference to your current data table
dt = Current data table();
//Stack all of the columns - use Tables > Stack and include all of the columns except the first two which are times
dtStacked = dt << Stack(
columns(
(dt << Get Column Names())[3::n col(dt)]
),
Source Label Column( "Label" ),
Stacked Data Column( "Data" )
);
//Now add three new columns to find the station and units, and calculate the concentration based on the units
//you should be able to copy and paste the part inside the 'Formula' function below into the formulas of your new columns
dtStacked << New Column("Station", Character, "Nominal", Formula(Words(:Label, "-")[1]));
dtStacked << New Column("Unit", Character, "Nominal", Formula(Words(:Label, "-")[2]), Set Display Width(65));
dtStacked << New Column("Data (ppm)", Numeric, "Continuous", Format("Best", 12), Formula(If(Contains(:Unit, "ppm"), :Data, Contains(:Unit, "ppb"), :Data / 1000)));
//Put back in standard format using the tabulate platform. Drag times and the station into
//columns on the left and add the mean and N as data fields. Note that in the resulting table anything
//with a N(Data) greater than 1 might have a problem!
(dtStacked << Tabulate(
Show Control Panel( 0 ),
Add Table(
Column Table( Analysis Columns( :Data ), Statistics( Mean, N ) ),
Row Table( Grouping Columns( :IntervalStart, :IntervalEnd, :Station ) )
)
)) << Make Into Data Table;
Hallo Jim,
Als Antwort auf Ihre Frage habe ich ein Bild gepostet, auf dem die Daten zu sehen sind.Bitte teilen Sie mir die Schritte mit, um die vorhandenen Daten zu ändern.
Danke schön.
Hallo,
So sehen die Daten aus.Der Spaltenname gibt die Station und die Einheiten für die Messung an.
Vielen Dank für die Hilfe.
Erscheinen die Daten numerisch (ohne Einheiten – oder Einheiten in einem separaten Feld) oder als Zeichendaten, bei denen die Einheiten zusammen mit der Zahl erscheinen (z. B. 13 ppm)?Es wäre einfacher, wenn Sie ein Beispiel dafür liefern könnten, wie die Daten angezeigt werden.Eine Formel sollte die gewünschte Konvertierung bewirken, aber welche Formel genau ist, hängt davon ab, wie die Daten aussehen.
Mit einem sehr einfachen Skript können die Werte direkt in der Spalte geändert werden, in die sie eingegangen sind.Oder Sie können das Recode-Tool verwenden, um dasselbe in einem interaktiven Format zu tun.Wie bestimmen Sie die Maßeinheiten?Gibt es eine separate Spalte, die darauf hinweist?