你好JMP社區!
所以我試圖自動化數據分析,我的JMP腳本非常硬編碼。我想讓這個更強大,但我遇到了一個問題。
我的腳本正在做的是它遍歷列的所有行並解析每行的字符串值。由於數據是以字符串格式收集的,例如:0.002 | 0.003 | 0.004 | 0.005 | .... 等等 它以“|”分隔。我的腳本生成30個新列(因為這是我在分隔字符串中預期的值),然後進入嵌套for循環以通過分隔符解析所有數據並將值按順序放入正確的列中。我剛剛發現的是,有時字符串可能沒有全部30個值...... 它可能只有20個。發生這種情況時,JMP會拋出錯誤並退出我的腳本。如何讓JMP不關心該錯誤並繼續執行腳本?(我在末尾添加了一個Continue()函數,它執行只有20個值的行,但是它不會解析數據表的其餘部分的數據...)
這是我的代碼:
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();
);
);
感謝您的任何幫助!!
一種方法是將所有新列的名稱放入列表中(僅對於三個測試,這將是'testList = {“DDI1_TXP_0_SIU”,“DDI1_TXP_1_SIU”,“DDI1_TXP_2_SIU”};')。然後,內部('k')循環應該是:
for (k = 1, k <= nitems(one_test_result_list), k++,
Column(dt, testList[) = num(one_test_result_list);
);
但請注意,此邏輯假設測量值僅“向右丟失”(因此在我的示例中,如果字符串中缺少DDI1_TXP_0_SIU而其他兩個不是,則分配將不正確)。