JSL-Skript erstellt mehrere Spalten<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Hallo
Ich würde gerne um Hilfe bei der JMP-Skripterstellung bitten.
Ich muss automatisch mehrere Spaltennamen aus der aktuellen Tabelle abrufen und für jede Spalte mithilfe einer Formel eine neue Spalte erstellen.
Das ist zum Beispiel mein Tisch
Einheiten-ID Daten1 Daten2 Daten3
A 1.1 1.2 1.1
B 1,2 1,2 1,0
C 1,3 1,2 1,4
D 1.1 1.2 1.1
1 – Ich muss die Spalten von Data1 bis Data3 auswählen
2 – Es müssen drei neue Spalten erstellt werden, wie folgt: Data1_Floor, Data2_Floor, Data3_Floor
3 – jede neue Spalte wird als „Floor“-Funktion unter Verwendung der Daten der ursprünglichen Spalte berechnet: Data1_Floor = Floor (Data1), ...
Ich würde mich über ein Beispiel eines JSL-Skripts mit einigen Kommentaren freuen
Danke
Alex
Betreff: JSL-Skript erstellt mehrere SpaltenDas sollte reichen:
dt = current data table();
startcol = 2;
endcol = 4;
for (i = startcol, i <= endcol, i++,
data_col = column(i) << get name;
floor_col = data_col || "_Floor";
str = evalinsert(
"\[dt << new column( "^floor_col^", Numeric, Continuous, Format( "Best", 12 ),
formula(floor(:^data_col^)));]\");
eval(parse(str));
);
Betreff: JSL-Skript erstellt mehrere SpaltenIch möchte Sie auch fragen: Was wäre, wenn meine Spalten keine gemeinsame Zeichenfolge im Namen hätten?Wie kann ich dafür sorgen, dass es funktioniert, sodass ich anstelle von „ifcontains“ dem Skript anweisen müsste, die Spalten von Spalte B bis Spalte D oder in numerischer Reihenfolge die Spalten von Nr. 2 bis Nr. 4 zu übernehmen?
Betreff: JSL-Skript erstellt mehrere SpaltenSuper, das funktioniert, danke
Betreff: JSL-Skript erstellt mehrere SpaltenDu bist nah dran.Sie müssen die Variable zuweisen dt um auf Ihre Datentabelle zu verweisen.Das können Sie entweder tun mit:
// Replace <YOUR table="" name=""> with the actual name of your table
dt = data table("<YOUR table="" name="">");
or with:
dt = current data table();</YOUR></YOUR>
Betreff: JSL-Skript erstellt mehrere SpaltenHallo PMroz,
Vielen Dank für eine schnelle Antwort, ich weiß das zu schätzen.Leider bin ich neu bei JSL und konnte es daher nicht reproduzieren. Ich habe versucht, Ihr Skript über die Zeile „ auszuführen. col_list = ...“, aber ich habe nicht die Ausgabe erhalten, die ich erwartet hatte.Ich muss etwas falsch machen.
Hier ist, was ich gerne bekommen würde.
Dies ist meine ursprüngliche Datentabelle:
| EINHEIT | Daten 1 | Daten 2 | Daten 3 |
| A | 12.35336 | 8.876483 | 3.207919 |
| B | 9.838289 | 1.483974 | 2.5232 |
| C | 3.136643 | 6.092754 | 0,980194 |
| D | 0,3593 | 4.639877 | 6.672549 |
Ich möchte das Skript ausführen, das alle Spalten mit der Zeichenfolge „Data“ abruft und für jede einzelne eine neue Spalte generiert, sodass die endgültige Tabelle so aussehen würde:
| EINHEIT | Daten 1 | Daten 2 | Daten 3 | Daten_Etage 1 | Daten_Etage 2 | Daten_Etage 3 |
| A | 12.35336452 | 8.876483446 | 3.207918972 | 12 | 8 | 3 |
| B | 9.838288756 | 1.483974287 | 2.523200042 | 9 | 1 | 2 |
| C | 3.136642653 | 6.092754288 | 0,980193636 | 3 | 6 | 0 |
| D | 0,359299803 | 4.639877062 | 6.672548555 | 0 | 4 | 6 |
Könnten Sie bitte versuchen, ein Skript für diese Aktion zu erstellen?
Betreff: JSL-Skript erstellt mehrere Spalten
// Create data table
dt = New Table( "Floor Example",
Add Rows( 4 ),
New Column( "Unit ID", Character, Nominal, Set Values( {"A", "B", "C", "D"} ) ),
New Column( "Data1", Numeric, Continuous, Format( "Best", 12 ),
Set Values( [1.1, 1.2, 1.3, 1.1] ) ),
New Column( "Data2", Numeric, Continuous, Format( "Best", 12 ),
Set Values( [1.2, 1.2, 1.2, 1.2] ) ),
New Column( "Data3", Numeric, Continuous, Format( "Best", 12 ),
Set Values( [1.1, 1, 1.4, 1.1] ) ),
);
// Get the list of column names
col_list = dt << get column names(string);
// Loop over column names, searching for data columns
for (i = 1, i <= nitems(col_list), i++,
// If it's a Data column then add the floor formula
if (contains(col_list[i], "Data"),
data_col = ":" || col_list[i];
floor_col = col_list[i] || "_Floor";
// Build new column string dynamically and then execute it.
str = evalinsert(
"\[dt << New Column( "^floor_col^", Numeric, Continuous, Format( "Best", 12 ),
Formula( Floor( ^data_col^))
);]\");
eval(parse(str));
);
);