Bonjour la communauté JMP!
J'essaie donc d'automatiser l'analyse des données et mon script JMP est très codé en dur. Je voudrais rendre cela plus robuste, mais j'ai un problème avec une partie.
Mon script consiste à parcourir toutes les lignes d'une colonne et à analyser les valeurs des chaînes de chaque ligne. Puisque les données sont collectées dans un format de chaîne tel que: 0.002 | 0.003 | 0.004 | 0.005 | .... etc. Il est délimité par un '|'. Mon script crée 30 nouvelles colonnes (parce que c'est le nombre de valeurs que j'attends dans ma chaîne délimitée), puis passe en boucle for imbriquée pour analyser toutes les données du délimiteur et les mettre en ordre dans les colonnes appropriées. Ce que je viens de découvrir, c'est que parfois, la chaîne n'a pas les 30 valeurs ... Il ne peut en avoir que 20. Lorsque cela se produit, JMP génère une erreur et quitte mon script. Comment faire en sorte que JMP ne se préoccupe pas de cette erreur et continue à exécuter le script? (J'ai ajouté une fonction Continue () à la fin qui exécute la ligne qui n'a que 20 valeurs, mais elle n'analysera pas les données pour le reste de la table de données ...)
Ceci est mon code:
dt << New Column("Year1", Numeric, Continuous, Format("Best",12))
<< New Column("Year2", Numeric, Continuous, Format("Best",12))
<< New Column("Year3", Numeric, Continuous, Format("Best",12))
<< New Column("Year4", Numeric, Continuous, Format("Best",12))
<< New Column("Year5", Numeric, Continuous, Format("Best",12))
<< New Column("Year6", Numeric, Continuous, Format("Best",12))
<< New Column("Year7", Numeric, Continuous, Format("Best",12))
<< New Column("Year8", Numeric, Continuous, Format("Best",12))
<< New Column("Year9", Numeric, Continuous, Format("Best",12))
<< New Column("Year10", Numeric, Continuous, Format("Best",12))
<< New Column("Year11", Numeric, Continuous, Format("Best",12))
<< New Column("Year12", Numeric, Continuous, Format("Best",12))
<< New Column("Year13", Numeric, Continuous, Format("Best",12))
<< New Column("Year14", Numeric, Continuous, Format("Best",12))
<< New Column("Year15", Numeric, Continuous, Format("Best",12))
<< New Column("Year16", Numeric, Continuous, Format("Best",12))
<< New Column("Year17", Numeric, Continuous, Format("Best",12))
<< New Column("Year18", Numeric, Continuous, Format("Best",12))
<< New Column("Year19", Numeric, Continuous, Format("Best",12))
<< New Column("Yearn20", Numeric, Continuous, Format("Best",12))
<< New Column("Year21", Numeric, Continuous, Format("Best",12))
<< New Column("Year22", Numeric, Continuous, Format("Best",12))
<< New Column("Year23", Numeric, Continuous, Format("Best",12))
<< New Column("Year24", Numeric, Continuous, Format("Best",12))
<< New Column("Year25", Numeric, Continuous, Format("Best",12))
<< New Column("Year26", Numeric, Continuous, Format("Best",12))
<< New Column("Year27", Numeric, Continuous, Format("Best",12))
<< New Column("Year28", Numeric, Continuous, Format("Best",12))
<< New Column("Year29", Numeric, Continuous, Format("Best",12))
<< New Column("Year30", Numeric, Continuous, Format("Best",12));
// Iterate through the rows of :Test_Result (where the delimited string is stored)
for (i = 1, i <= nrows(dt), i++,
one_test_result_list = words(column(dt,"Test_Result"), "|");
for (k = 1, k <= nitems(one_test_result_list), k++,
// Put the values in the proper column at the proper row (i)
dt:Year1 = num(one_test_result_list[1]);
dt:Year2 = num(one_test_result_list[2]);
dt:Year3 = num(one_test_result_list[3]);
dt:Year4 = num(one_test_result_list[4]);
dt:Year5 = num(one_test_result_list[5]);
dt:Year6 = num(one_test_result_list[6]);
dt:Year7 = num(one_test_result_list[7]);
dt:Year8 = num(one_test_result_list[8]);
dt:Year9 = num(one_test_result_list[9]);
dt:Year10 = num(one_test_result_list[10]);
dt:Year11 = num(one_test_result_list[11]);
dt:Year12 = num(one_test_result_list[12]);
dt:Year13 = num(one_test_result_list[13]);
dt:Year14 = num(one_test_result_list[14]);
dt:Year15 = num(one_test_result_list[15]);
dt:Year16 = num(one_test_result_list[16]);
dt:Year17 = num(one_test_result_list[17]);
dt:Year18 = num(one_test_result_list[18]);
dt:Year19 = num(one_test_result_list[19]);
dt:Year20 = num(one_test_result_list[20]);
dt:Year21 = num(one_test_result_list[21]);
dt:Year22 = num(one_test_result_list[22]);
dt:Year23 = num(one_test_result_list[23]);
dt:Year24 = num(one_test_result_list[24]);
dt:Year25 = num(one_test_result_list[25]);
dt:Year26 = num(one_test_result_list[26]);
dt:Year27 = num(one_test_result_list[27]);
dt:Year28 = num(one_test_result_list[28]);
dt:Year29 = num(one_test_result_list[29]);
dt:Year30 = num(one_test_result_list[30]);
Continue();
);
);
Merci pour toute aide !!
Une solution consiste à mettre les noms de toutes vos nouvelles colonnes dans une liste (pour seulement trois tests, il s'agit de 'testList = {"DDI1_TXP_0_SIU", "DDI1_TXP_1_SIU", "DDI1_TXP_2_SIU"};'). Ensuite, la boucle interne ('k') devrait être:
for (k = 1, k <= nitems(one_test_result_list), k++,
Column(dt, testList[) = num(one_test_result_list);
);
Notez cependant que cette logique suppose que les valeurs mesurées ne sont que "manquantes à droite" (ainsi dans mon exemple, si DDI1_TXP_0_SIU était manquant dans la chaîne et que les deux autres ne l'étaient pas, l'affectation ne serait pas correcte).