Ciao community JMP!
Quindi sto cercando di automatizzare l'analisi dei dati e il mio script JMP è molto hardcoded. Mi piacerebbe renderlo più robusto ma ho problemi con una parte.
Quello che sta facendo il mio script è che sta esaminando tutte le righe di una colonna e analizzando i valori delle stringhe in ogni riga. Poiché i dati vengono raccolti in un formato stringa come: 0,002 | 0,003 | 0,004 | 0,005 | .... eccetera. È delimitato da un '|'. Il mio script crea 30 nuove colonne (perché è il numero di valori che mi aspetto nella mia stringa delimitata) e quindi entra nei cicli annidati per analizzare tutti i dati del delimitatore e mettere i valori in ordine nelle colonne appropriate. Quello che ho appena scoperto è che forse a volte la stringa non ha tutti i 30 valori ... Potrebbe avere solo 20. Quando ciò accade, JMP genera un errore ed esce dal mio script. Come faccio a far sì che JMP non si preoccupi di quell'errore e continua a eseguire lo script? (Ho aggiunto una funzione Continue () alla fine che esegue la riga che ha solo 20 valori, ma poi non analizzerà i dati per il resto della tabella dati ...)
Questo è il mio codice:
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();
);
);
Grazie per tutto l'aiuto!!
Un modo consiste nel mettere i nomi di tutte le nuove colonne in un elenco (per solo tre test questo sarebbe 'testList = {"DDI1_TXP_0_SIU", "DDI1_TXP_1_SIU", "DDI1_TXP_2_SIU"};'). Quindi, il ciclo interno ('k') dovrebbe essere:
for (k = 1, k <= nitems(one_test_result_list), k++,
Column(dt, testList[) = num(one_test_result_list);
);
Ma si noti che questa logica presuppone che i valori misurati siano solo "mancanti a destra" (quindi nel mio esempio se DDI1_TXP_0_SIU mancava dalla stringa e gli altri due non lo erano, allora l'assegnazione non sarebbe corretta).