如何將列數據類型從字符轉換為數字而不丟失列中的數字值親愛的,
幾週前開始使用 JMP! 這是一個天真的問題。
我正在嘗試將列數據類型從字符轉換為數字,但是在將數據類型轉換為數字時,我丟失了該列中的所有數字值。
請查找隨附的屏幕截圖。
當我將列的數據類型從字符更改為數字時,如何保留列中的數值?
嘗試使用以下命令替換字符,
value1 = dt:RequiredColumn<<獲取值;
Regex( :RequiredColumn, "[^0-9]", "", GLOBALREPLACE );
這樣所有的數值也將被替換。
只是我想保留列中的數字值(最初為字符數據類型)。 嘗試在我們的社區中搜索此問題無法獲得任何相關信息。
Picture01 - OriginalColumnFormat - Column原始數據類型的截圖
Picture02 - ColumnafterChangingDatatype - 將數據類型更改為數字後列的屏幕截圖。
提前致謝...

高級統計建模數據存取數據混合和清理大規模定制質量和工藝工程視窗回复:如何將列數據類型從字符轉換為數字而不丟失列中的數字值大家好。 為您提供的更新 - 看起來 JMP 17 時間範圍內已針對此問題完成了一些工作。 具體來說,Num() 和 Informat() 中添加了一個附加參數,以幫助您控制有效數字。 任何 JMP 17 EA7(或更高版本)用戶現在都可以嘗試此操作;其他人則需要等到 JMP 17 於 2022 年秋季推出。 感謝您報告此事! 我們確實會監控這些論壇,並希望盡可能修復此類問題。
回复:如何將列數據類型從字符轉換為數字而不丟失列中的數字值JMP 是否會將其解釋為日期,並且由於該日期早於 01.01.1904(這是 JMP 日期時間的開始時間),因此為負數。
Names Default To Here(1);
a = Num("9.4.333");
b = Num("31.12.1903");
c = Num("1.12.1903");
Show(a, b, c);
經過社區討論後關於 Num() 的行為我使用自己的驗證器來檢查數值,這是一個示例:
Names Default To Here(1);
num_validator = Function({str}, {Default Local},
regex_validator_string = "^[-\+]{0,1}[0-9\.\,]+$";
If(Is Missing(Regex(str, regex_validator_string)),
retval = .; //use missing as non match due to num returning . in case of non-numeric
, //else
retval = Num(str)
);
return(retval);
);回复:如何將列數據類型從字符轉換為數字而不丟失列中的數字值感謝您抽出寶貴時間調查此問題,吉姆!
回复:如何將列數據類型從字符轉換為數字而不丟失列中的數字值JMP 的 Num() 函數似乎存在錯誤。模式的字符串
“恩恩”
應始終返回 JMP 缺失值,但在許多情況下,它返回有效的數值
Num( "9.4.333" )
回報
-49554633600
我在 JMP 文檔中找不到有關此問題的任何使用說明(非詳盡搜索)。我正在向 JMP 支持團隊提交錯誤報告。
回复:如何將列數據類型從字符轉換為數字而不丟失列中的數字值謝謝jthi!!
就這樣完成了工作...
回复:如何將列數據類型從字符轉換為數字而不丟失列中的數字值轉換您擁有的表很“容易”,但通常這種轉換並不容易。 您必須考慮許多不同的價值觀。 然後有一個問題/功能如何JMP 的 Num 函數有效。 下面是一個想法,但這仍然會遺漏許多不同的“數字”格式,例如持續時間、日期、時間、百分比、千位分隔符等。 它還只刪除一些與數字無關的可能字符
Names Default To Here(1);
dt = Current Data Table();
//remove alphabetical characters, should also remove some special characters
regex_one = "[a-zA-Z\s]";
dt << New Column("no_alph", Character, Nominal, << Set Each Value(
Regex(:MeasuredValues, regex_one, "", GLOBALREPLACE);
));
regex_two = "^-?[0-9]+\.?[0-9]*$";
dt << New Column("nums", Numeric, Nominal, << Set Each Value(
Num(Regex(:no_alph, regex_two))
));
回复:如何將列數據類型從字符轉換為數字而不丟失列中的數字值親愛的吉姆。
我嘗試運行第 6 行號的腳本,然後將其轉換為數字,結果是
:測量值[6] = "-1.00";
字符轉十六進制(:MeasuredValues[6]) = "2D312E3030";
將列的數據類型轉換為數字後:
:測量值[6] = .;
字符轉十六進制(:MeasuredValues[6]) = "FFFFD10000000000";
我運行了第二行的腳本,該腳本正在轉換為數字值(轉換後更改為不同的值),結果是
轉換前:
:測量值[2] = "1.6.1";
字符轉十六進制(:MeasuredValues[2]) = "312E362E31";
轉換後:
:測量值[2] = 3061584000;
字符轉十六進制(:MeasuredValues[2]) = "41E6CF8210000000";
我已附上包含測量值數據的表格。
謝謝 !!
回复:如何將列數據類型從字符轉換為數字而不丟失列中的數字值親愛的統計員,
感謝您的及時回复。
我確實嘗試了您的建議,通過使用列中的重新編碼選項刪除非數字值,並嘗試將列數據類型從字符轉換為數字。 但是,當數據類型更改為數字時,所有值仍然像以前一樣消失。
請查找隨附的屏幕截圖。
在重新編碼選項中,JMP 能夠區分數字值和字符串字符。
很快就會公佈JIM先生建議的結果。
謝謝..
回复:如何將列數據類型從字符轉換為數字而不丟失列中的數字值JMP 應轉換所有正確表示數值的值。所以,
1.6.1、V1.6 應轉換為缺失值,因為它們不是有效的數值。
但是,-1.00、5.00 和 -15.000 應進行轉換。
請運行以下腳本來查看數據中是否存在可能導致問題的隱藏字符。
show(:MeasuredValues[6],char to hex(:MeasuredValues[6]);
該腳本將顯示數據表第 6 行中的值的十六進制值。如果 -1.00 不在第 6 行,則將 6 更改為其中字符表示形式似乎是有效數值但單元格被更改為缺失值的行之一的行號。
如果您可以附加僅包含 MeasuredValues 列的示例數據表,這也會非常有用。
回复:如何將列數據類型從字符轉換為數字而不丟失列中的數字值可能有多種方法可以完成您想要的事情,我敢打賭有人(例如吉姆)會有一個腳本來提高效率,但這裡是一個潛在的工作流程:
順便說一句,您的 jpg 不允許我們看到您想要更改的字符列的樣子。 如果存在任何非數字字符,則需要在更改數據類型之前處理這些字符。
1. 右鍵單擊該列並使用重新編碼。 刪除所有非數字值。
2. 然後,右鍵單擊並選擇列信息。 (如 jpg 的)。將數據類型從字符更改為數字,將建模類型更改為連續。