如何将列数据类型从字符转换为数字而不丢失列中的数字值亲爱的,
几周前开始使用 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 的)。将数据类型从字符更改为数字,将建模类型更改为连续。