Hola Comunidad JMP!
Así que estoy tratando de automatizar el análisis de datos y mi script JMP está muy codificado. Me gustaría hacer esto más sólido, pero estoy teniendo problemas con una parte.
Lo que mi script está haciendo es pasar por todas las filas de una columna y analizar los valores de las cadenas en cada fila. Dado que los datos se recopilan en un formato de cadena como: 0.002 | 0.003 | 0.004 | 0.005 | .... etc. Se delimita con un '|'. Mi script crea 30 columnas nuevas (porque esa es la cantidad de valores que estoy esperando en mi cadena delimitada) y luego se anida para que los bucles analicen todos los datos del delimitador y pongan los valores en orden en las columnas adecuadas. Lo que acabo de descubrir es que a veces la cadena no tiene los 30 valores ... Puede que solo tenga 20. Cuando eso sucede, JMP lanza un error y sale de mi script. ¿Cómo consigo que JMP no se preocupe por ese error y continúe ejecutando el script? (Agregué una función Continuar () al final que ejecuta la fila que solo tiene 20 valores, pero luego no analizará los datos para el resto de la tabla de datos ...)
Este es mi código:
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();
);
);
¡¡Gracias por cualquier ayuda!!
Una forma es poner los nombres de todas sus nuevas columnas en una lista (para solo tres pruebas sería 'testList = {"DDI1_TXP_0_SIU", "DDI1_TXP_1_SIU", "DDI1_TXP_2_SIU");'). Entonces, el bucle interno ('k') debe ser:
for (k = 1, k <= nitems(one_test_result_list), k++,
Column(dt, testList[) = num(one_test_result_list);
);
Pero tenga en cuenta que esta lógica supone que los valores medidos solo "faltan a la derecha" (por lo que en mi ejemplo, si DDI1_TXP_0_SIU faltaba en la cadena y los otros dos no, entonces la asignación no sería correcta).