Lo script JSL crea più colonne<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />CIAO
Vorrei chiedere aiuto con JMP Scripting.
Devo recuperare automaticamente diversi nomi di colonna dalla tabella corrente e per ogni colonna creare una nuova colonna, utilizzando una formula.
Ad esempio, questo è il mio tavolo
ID unità Dati1 Dati2 Dati3
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 - Devo selezionare le colonne da Data1 a Data3
2 - è necessario creare 3 nuove colonne, come segue Data1_Floor, Data2_Floor, Data3_Floor
3 - ogni nuova colonna verrà calcolata come una funzione "Floor" utilizzando i dati della colonna originale: Data1_Floor = Floor (Data1), ...
Gradirei un esempio di script JSL con alcuni commenti
Grazie
Alex
Re: lo script JSL crea più colonneQuesto dovrebbe farlo:
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));
);
Re: lo script JSL crea più colonneLascia che ti chieda anche: e se le mie colonne non avessero una stringa comune nei loro nomi?Come posso farlo funzionare così invece di "ifcontains" dovrei dire allo script di prendere le colonne dalla colonna B alla colonna D, o in ordine numerico, prendere le colonne da #2 a #4?
Re: lo script JSL crea più colonnePerfetto, funziona, grazie
Re: lo script JSL crea più colonneSei vicino.Devi assegnare la variabile dt per puntare alla tabella dei dati.Puoi farlo con:
// 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>
Re: lo script JSL crea più colonneCiao PMroz,
grazie per una risposta veloce, lo apprezzo.Sfortunatamente sono nuovo in JSL, quindi non sono riuscito a riprodurlo, ho provato a eseguire il tuo script dalla riga " col_list = ..." ma non ho ottenuto l'output che mi aspettavo.Devo fare qualcosa di sbagliato.
Ecco cosa vorrei ottenere.
Questa è la mia tabella dati originale:
| UNITÀ | Dati 1 | Dati 2 | Dati 3 |
| UN | 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 |
Mi piacerebbe eseguire lo script che otterrà tutte le colonne con la stringa "Dati" e per ognuna di esse genererà la nuova colonna, quindi la tabella finale sarebbe simile a questa:
| UNITÀ | Dati 1 | Dati 2 | Dati 3 | Dati_Piano 1 | Dati_Piano 2 | Dati_Piano 3 |
| UN | 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 |
potresti per favore provare a creare uno script per eseguire questa azione?
Re: lo script JSL crea più colonne
// 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));
);
);