我需要根據 if/then 語句的結果填充新列您好 - 我正在嘗試根據 if/then 語句的結果創建和填充一組新列。
步驟1:
我需要創建將填充的新空列。(共55個)
(每個新列都是一個數字連續字段。)
每列的名稱將對應於該組中 55 個化合物中每個化合物的名稱,後跟“_ppt”。例如,名為“4:2 FTS”的化合物會生成名為 [4:2 FTS_ppt] 的新列。
第2步:
我將使用 if/then 語句逐行填充新列,該語句評估與組中 55 種化合物中的每一種關聯的三個現有列。具體來說,
如果 [RES_VALUE_4:2 FTS] >= [RL_4:2 FTS] 那麼 [4:2 FTS_ppt] = [RES_VALUE_4:2 FTS]
如果 [RES_VALUE_4:2 FTS] < [RL_4:2 FTS] 並且 DETECT_FLAG_4:2 FTS] = N 並且 [RL_4:2 FTS] <= 3 那麼 [4:2 FTS_ppt] = 0.0009。
如果 [RES_VALUE_4:2 FTS] < [RL_4:2 FTS] AND DETECT_FLAG_4:2 FTS] = N AND [RL_4:2 FTS] > 3 那麼 [4:2 FTS_ppt] = NULL。
以下是帶有復合名稱後綴的現有列名稱。我使用的是 JMP Pro 17.0。



任何指導將不勝感激!
自動化和腳本編寫內容組織回复:我需要根據 if/then 語句的結果填充新列- 討論社區的目的不是成為 JMP 用戶根據其請求編寫腳本的來源。它可以幫助用戶學習 JMP。
- 鑑於您提供的偽代碼,顯然您需要花時間閱讀《JMP 腳本指南》。它位於 JMP 幫助下拉菜單下的 JMP 文檔庫中。
- 以下是嘗試幫助您解決問題的嘗試。它沒有經過測試,因為我沒有你的任何數據。請花時間研究和學習代碼。這些函數在腳本索引和 JSL 腳本參考中都有詳細記錄。
Names Default To Here( 1 );
groupList = {"RES_VALUE", "RES_TEXT", "DETECT_FLAG", "RL", "DILUTION_FACTOR"};
dt = Current Data Table();
// Find all of the different compounds. This is done by using the "RES_VALUE" columns
// and stripping off the compound names from each of them
compList = {};
For( i = 1, i <= N Cols( dt ), i++,
colName = Column( dt, i ) << get name;
If( Contains( colName, "RES_VALUE" ) == 1,
Insert Into( compList, Substr( colName, 11 ) )
);
);
// Create the columns
For Each( {comp, i}, compList,
Eval(
Parse(
"dt << New Column( \!"" || compList[i] || "_ppt" || "\!",
numeric,
continuous,
formula(
If( :\!"RES_VALUE "
|| comp || "\!"n >= :\!"RL " || comp || "\!"n,
x = :\!"RES_VALUE " || comp ||
"\!"n
);
If(
:\!"RES_VALUE " || comp ||
"\!"n < :\!"RL " || comp || "\!"n & :\!"DETECT_FLAG " || comp || "\!"n == \!"N\!" &
:\!"RL " || comp ||
"\!"n <= 3,
x = 0.0009
);
If(
:\!"RES_VALUE "
|| comp || "\!"n < :\!"RL " || comp || "\!"n & :\!"DETECT_FLAG " || comp || "\!"n == \!"N\!" &
:\!"RL "
|| comp || "\!"n > 3,
x = .
);
x;
)
);"
)
)
);
回复:我需要根據 if/then 語句的結果填充新列謝謝吉姆。是的,這一點很好。在投入工作之前,我需要花更多時間了解 jsl 的基礎知識。
上面的代碼正確創建了所有列,但公式僅生成空值(“.”)。我無法解決該錯誤,但會繼續嘗試。再次感謝。
回复:我需要根據 if/then 語句的結果填充新列如果您能提供一些樣本數據,我會看一下。
回复:我需要根據 if/then 語句的結果填充新列謝謝吉姆。我附上了下面的 jmp 表,其中包含數據集中的一小部分行。
回复:我需要根據 if/then 語句的結果填充新列有兩件事需要改變。
- 公式中使用的變量 x 的值需要為每行執行進行初始化。
- 公式執行需要取消抑制。
Names Default To Here( 1 );
groupList = {"RES_VALUE", "RES_TEXT", "DETECT_FLAG", "RL", "DILUTION_FACTOR"};
dt = Current Data Table();
// Find all of the different compounds. This is done by using the "RES_VALUE" columns
// and stripping off the compound names from each of them
compList = {};
For( i = 1, i <= N Cols( dt ), i++,
colName = Column( dt, i ) << get name;
If( Contains( colName, "RES_VALUE" ) == 1,
Insert Into( compList, Substr( colName, 11 ) )
);
);
// Create the columns
For Each( {comp, i}, compList,
Eval(
Parse(
"dt << New Column( \!"" || compList[i] || "_ppt" ||
"\!",
numeric,
continuous, formula(
x=.;
If( :\!"RES_VALUE "
|| comp || "\!"n >= :\!"RL " || comp || "\!"n,
x = :\!"RES_VALUE " || comp ||
"\!"n
);
If(
:\!"RES_VALUE " ||
comp || "\!"n < :\!"RL " || comp || "\!"n & :\!"DETECT_FLAG " || comp || "\!"n == \!"N\!" &
:\!"RL "
|| comp || "\!"n <= 3,
x = 0.0009
);
If(
:\!"RES_VALUE "
|| comp || "\!"n < :\!"RL " || comp || "\!"n & :\!"DETECT_FLAG " || comp || "\!"n == \!"N\!" &
:\!"RL "
|| comp || "\!"n > 3,
x = .
);
x;
)
);"
)
)
);
dt << Suppress Formula Eval( 0 );
回复:我需要根據 if/then 語句的結果填充新列謝謝吉姆。我本想在你回復後不久再回來,但一直在嘗試調試代碼。由於某種原因我還沒有讓它工作。我使用調試器並收到以下消息:

只是想讓你知道我收到了你的意見 - 我會繼續努力。謝謝。
回复:我需要根據 if/then 語句的結果填充新列
回覆:我需要根據 if/then 語句的結果填入新列是的!我剛剛讓它工作。再次感謝您對此的幫助!