Le script JSL crée plusieurs colonnes<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Salut
Je voudrais demander de l'aide avec JMP Scripting.
J'ai besoin de récupérer automatiquement plusieurs noms de colonnes de la table actuelle et, pour chaque colonne, de créer une nouvelle colonne à l'aide d'une formule.
Par exemple, voici ma table
ID de l'unité Données1 Données2 Données3
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 - Je dois sélectionner les colonnes de Data1 à Data3
2 - besoin de créer 3 nouvelles colonnes, comme suit Data1_Floor, Data2_Floor, Data3_Floor
3 - chaque nouvelle colonne sera calculée comme une fonction "Floor" en utilisant les données de la colonne d'origine : Data1_Floor = Floor (Data1), ...
J'apprécierais un exemple de script JSL avec quelques commentaires
merci
Alexandre
Re : Le script JSL crée plusieurs colonnesCela devrait le faire:
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 : Le script JSL crée plusieurs colonnesPermettez-moi également de vous demander : et si mes colonnes n'avaient pas de chaîne commune dans leurs noms ?Comment puis-je le faire fonctionner pour qu'au lieu de "ifcontains", je doive dire au script de prendre les colonnes de la colonne B à la colonne D, ou dans l'ordre numérique, de prendre les colonnes de # 2 à # 4?
Re : Le script JSL crée plusieurs colonnesSuper, ça marche, merci
Re : Le script JSL crée plusieurs colonnesVous êtes proche.Vous devez affecter la variable dt pour pointer vers votre table de données.Vous pouvez le faire soit avec :
// 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 : Le script JSL crée plusieurs colonnesSalut PMroz,
merci pour une réponse rapide, j'apprécie.Malheureusement, je suis nouveau sur JSL, donc je n'ai pas pu le reproduire, j'ai essayé d'exécuter votre script à partir de la ligne " col_list = ..." mais je n'ai pas obtenu le résultat que j'attendais.Je dois faire quelque chose de mal.
Voici ce que j'aimerais obtenir.
Ceci est ma table de données d'origine:
| UNITÉ | Données 1 | Données 2 | Données 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 |
Je voudrais exécuter le script qui obtiendra toutes les colonnes avec la chaîne "Data" et pour chacune d'entre elles générera la nouvelle colonne, donc la table finale ressemblera à ceci :
| UNITÉ | Données 1 | Données 2 | Données 3 | Données_Etage 1 | Données_étage 2 | Données_étage 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 |
pourriez-vous s'il vous plaît essayer de faire un script pour faire cette action?
Re : Le script JSL crée plusieurs colonnes
// 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));
);
);