如何在不丢失列中的数字值的情况下将列数据类型从字符转换为数字亲爱的,
几周前开始使用 JMP !! 这是一个天真的问题。
我正在尝试将列数据类型从字符转换为数字,但是在将数据类型转换为数字时我丢失了列中的所有数字值。
请找到相同的附加屏幕截图。
当我将列的数据类型从字符更改为数字时,如何保留列中的数值?
尝试使用以下命令替换字符,
values1 = dt:RequiredColumn<<获取值;
正则表达式(:RequiredColumn, "[^0-9]", "", GLOBALREPLACE);
有了这个,所有的数值也被替换了。
只是我想保留列中的数值(最初是字符数据类型)。 尝试在我们的社区中搜索此问题无法获得任何相关信息。
Picture01 - OriginalColumnFormat - Column的原始数据类型截图
Picture02 - ColumnafterChangingDatatype - 将数据类型更改为数值后的 Column 屏幕截图。
提前致谢...
数据表脚本视窗回复:如何将列数据类型从字符转换为数值而不丢失列中的数值可能有多种方法可以完成您想要的事情,我敢打赌有人(例如 Jim)会有一个脚本来提高效率,但这里有一个潜在的工作流程:
顺便说一句,您的 jpg 不允许我们查看您想要更改的字符列的外观。 如果有任何字符不是数字,则需要在更改数据类型之前处理这些字符。
1. 右键单击列并使用重新编码。 删除所有非数字值。
2. 然后,右键单击并选择列信息。 (如jpg的)。将数据类型从字符更改为数字,将建模类型更改为连续。
回复:如何将列数据类型从字符转换为数值而不丢失列中的数值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 列的示例数据表,这也将非常有用。
回复:如何将列数据类型从字符转换为数值而不丢失列中的数值亲爱的斯塔曼,
感谢您的及时回复。
我确实通过使用列中的重新编码选项删除非数字值来尝试您的建议,并尝试将列数据类型从字符转换为数字。 但是,当数据类型更改为数字时,所有值仍然像以前一样消失。
请找到相同的附加屏幕截图。
在重新编码选项中,JMP 能够区分数值和字符串字符。
很快就会公布JIM先生的建议结果。
谢谢..
回复:如何将列数据类型从字符转换为数值而不丢失列中的数值亲爱的吉姆。
在将其转换为数字之前,我尝试运行第 6 行号的脚本,结果是
:MeasuredValues[6] = "-1.00";
字符转十六进制(:MeasuredValues[6]) = "2D312E3030";
将 Column 的数据类型转换为 Numeric 后:
:MeasuredValues[6] = .;
十六进制字符(:MeasuredValues[6]) = "FFFFD10000000000";
我为正在转换为数值的第二行运行脚本(转换后更改为不同的值),结果是
转换前:
:MeasuredValues[2] = "1.6.1";
字符转十六进制(:MeasuredValues[2]) = "312E362E31";
转换后:
:MeasuredValues[2] = 3061584000;
十六进制字符(:MeasuredValues[2]) = "41E6CF8210000000";
我已附上带有 MeasuredValues 数据的表格。
谢谢 !!
回复:如何将列数据类型从字符转换为数值而不丢失列中的数值转换您拥有的表格很“容易”,但通常这种转换并非如此。 您必须考虑许多不同的值。 然后有一个问题/功能如何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))
));
回复:如何将列数据类型从字符转换为数值而不丢失列中的数值谢谢jthi!
那完成了工作...
回复:如何将列数据类型从字符转换为数值而不丢失列中的数值JMP 似乎在 Num() 函数中存在错误。模式的字符串
“嗯”
应该总是返回一个 JMP 缺失值,但是在许多情况下,它返回一个有效的数值
Num( "9.4.333" )
返回
-49554633600
我在 JMP 文档(非详尽搜索)中找不到有关此问题的任何使用说明。我正在向 JMP 支持团队提交错误报告。