单格表分组我正在尝试分析我公司生产的设备的一个子组件的数据。 不幸的是,实际有用的数据保存在一个表格中,该表格被压缩为数据库中的单个单元格(见下文)。 有没有办法将此数据分解为单独的列和行,同时保留所有其他数据(例如,为所有新数据行分配相同的序列号)? 最终目标是得到类似于下面的 Excel 表格(我必须手工制作:P)的内容,其中包含每行的所有序列号、站 ID 等数据。
前:
| 站号 | 开始日期时间 | 串行 | 功能测试台 |
| 1223 | 2020年1月1日 | ASDF1234 | 压力、流量设置、流量方差、流量值、流量结果、UUT dP、步长位置 11.000,0.00,0.050,0.001,通过,11.047,-156 10.000,3.00,0.250,3.097,通过,9.984,-119 10.000,5.00,0.250,4.933,通过,9.990,-103 10.000,10.00,0.500,9.847,通过,9.973,-64 10.000,100.00,5.000,101.048,通过,9.968,525 7.000,3.00,0.250,2.957,通过,6.983,-114 7.000,5.00,0.250,4.885,通过,6.988,-95 7.000,10.00,0.500,9.822,通过,6.990,-48 7.000,80.00,4.000,80.916,通过,6.981,518 4.000,3.00,0.250,3.078,通过,3.981,-101 4.000,5.00,0.250,5.110,通过,3.988,-76 4.000,10.00,0.500,9.980,通过,3.987,-15 4.000,50.00,2.500,52.123,通过,3.993,447 |
后:
| 站号 | 开始日期时间 | 串行 | 压力 | 流量设定 | 流量方差 | 流量值 | 流量结果 | 待测物dP | 步进位置 |
| 1223 | 2020年1月1日 | ASDF1234 | 11.000 | 0.00 | 0.050 | 0.001 | 经过 | 11.047 | -156 |
| 1223 | 2020年1月1日 | ASDF1234 | 10.000 | 3.00 | 0.250 | 3.097 | 经过 | 9.984 | -119 |
| 1223 | 2020年1月1日 | ASDF1234 | 10.000 | 5.00 | 0.500 | 4.933 | 经过 | 9.990 | -103 |
| 1223 | 2020年1月1日 | ASDF1234 | 10.000 | 10:00 | 5.000 | 9.847 | 经过 | 9.973 | -64 |
| 1223 | 2020年1月1日 | ASDF1234 | 10.000 | 100.00 | 0.250 | 101.048 | 经过 | 9.968 | 第525章 |
| 1223 | 2020年1月1日 | ASDF1234 | 7.000 | 3.00 | 0.250 | 2.957 | 经过 | 6.983 | -114 |
| 1223 | 2020年1月1日 | ASDF1234 | 7.000 | 5.00 | 0.250 | 4.885 | 经过 | 6.988 | -95 |
| 1223 | 2020年1月1日 | ASDF1234 | 7.000 | 10:00 | 0.500 | 9.822 | 经过 | 6.990 | -48 |
| 1223 | 2020年1月1日 | ASDF1234 | 7.000 | 80.00 | 4.000 | 80.916 | 经过 | 6.981 | 518 |
| 1223 | 2020年1月1日 | ASDF1234 | 4.000 | 3.00 | 0.250 | 3.078 | 经过 | 3.981 | -101 |
| 1223 | 2020年1月1日 | ASDF1234 | 4.000 | 5.00 | 0.250 | 5.110 | 经过 | 3.988 | -76 |
| 1223 | 2020年1月1日 | ASDF1234 | 4.000 | 10:00 | 0.500 | 9.980 | 经过 | 3.987 | -15 |
| 1223 | 2020年1月1日 | ASDF1234 | 4.000 | 50.00 | 2.500 | 52.123 | 经过 | 3.993 | 第447章 |
谢谢!
大卫

数据存取回复:单单元格表突破@杰夫·珀金森我希望您在 JMP 16 中做到了这一点...
回复:单单元格表突破我很高兴听到它已将数据整理好供您分析。
是的,您可以创建一个脚本来为您执行此操作。 这需要一些工作,但 JMP 会为您创建一些工作。
以下是如何执行此操作的概述。
JMP 15 不会捕获 Text to Columns... 命令,但编写语法非常简单:
// Text to columns
Data Table( "Community330288.jmp" ) <<
Text to Columns( columns( :FunctionalTestTable ), Delimiters( NEWLINE ) );
下一步是堆栈命令。 JMP 将为此的 JSL 放入结果表中名为 Source 的脚本中。

右键单击它并选择“编辑”,您将获得要复制和粘贴的脚本:
stacked_data = Data Table( "Community330288.jmp" ) << Stack(
columns(
:FunctionalTestTable 1,
:FunctionalTestTable 2,
:FunctionalTestTable 3,
:FunctionalTestTable 4,
:FunctionalTestTable 5,
:FunctionalTestTable 6,
:FunctionalTestTable 7,
:FunctionalTestTable 8,
:FunctionalTestTable 9,
:FunctionalTestTable 10,
:FunctionalTestTable 11,
:FunctionalTestTable 12,
:FunctionalTestTable 13,
:FunctionalTestTable 14
),
Source Label Column( "Label" ),
Stacked Data Column( "Data" ),
Name( "Non-stacked columns" )(Keep( :StationID, :StartDateTime, :Serial ))
)
下一步是使用逗号作为分隔符重复“文本到列”:
// Text to columns
stacked_data << Text to Columns( columns( :Data ), Delimiters( "," ) );
JMP 不会记录的另一件事是重命名数据第一行中的列。 重命名可以通过脚本编写,但您必须自己编写。
如果您知道列数始终相同(在本例中为 7),您可以对其进行硬编码。 如果列数是可变的,您将需要做更多的工作。 如果是这样,请告诉我,这是我们可以帮助您跨越的另一座桥梁。
for(i=1, i<=7, i++,
column("Data " || char(i))<<SET name=""></SET>
最后,您需要选择包含列名称的行并将其删除。 我已经对下面的列名称和值进行了硬编码。 如果它们是可变的……那么,只需要多做一点工作即可。
stacked_data << Select Where( :Pressure == "Pressure" ) << Delete Rows;
最后,将一些列更改为数字。 您需要对每一列重复此操作。
:Pressure << set data type(Numeric);
我希望这有帮助。
继续提出问题。
回复:单单元格表突破嘿,杰夫,效果非常好! 我确实有一个后续问题。 有没有办法将所有这些步骤保存为脚本,这样我就不必每次需要提取这些数据时都重做它们? 我尝试将其保存为会话脚本,但这并没有保存任何数据突破。
回复:单单元格表突破你好@dpeyer ,
您可以调用以下插件来导入数据。
或者,您可以运行脚本将文本文件导入到 JMP 中。
我基于所附示例文本文件进行导入。
脚本和加载项都可以更新,以将类似的文件连接到单个文件中。
干杯,
斯坦
回复:单单元格表突破嘿杰夫,
我已经和负责的测试工程师谈过了,你不用担心:P。 不幸的是,这是 14k 个独立的表格,每个表格都有自己的单元格和重复的标题。 我已附上 3 个图像(14k...)。 我会尝试你的方法并让你知道效果如何!

回复:单单元格表突破首先,无论是谁创建了这样的表格,都应该……嗯……我可以想到一些适当的惩罚。
幸运的是,我认为 JMP 将使这个问题相对容易处理。
首先,使用列 -> 实用工具 -> 文本到列.. 。作为@Mandy_Chambers建议,但使用 NEWLINE 作为分隔符。

这将为您的FunctionalTextTables 列中的每一行提供一个新列。

现在,使用表->堆栈堆叠所有FunctionalTestTable #(即FunctionalTestTable 1、FunctionalTestTable 2 等)列。

这将为您的每一列提供一行。

现在,您可以使用文本到列...再次,这次使用逗号 (,) 作为分隔符。

现在您将获得各个值的列。

现在只需复制并粘贴列名称即可。 这是一个可以帮助您的提示栏目名称让您失望? 尝试这个。然后,使用列->标准化属性根据需要将列的数据类型更改为数字。
你说你有一个包含 14k 的数据库。 它们是数据库中的 14k 个不同表还是一个表的 14k 行? 希望是后者,因为您应该能够使用“文件”->“数据库”->“打开表”将所有内容放入一个 JMP 数据表中...
如果确实有 14k 个不同的表,那么您需要使用表格->连接将它们全部放入 JMP 中的一个表中,但在确认数据库中的哪个表后,让我们跨过那座桥。
不管,选择匹配的单元格是另一个可以帮助您清理的工具。 当我们取得更多进展后,我将在后续文章中解释这一点。
回复:单单元格表突破嗯...我一定没有描述我想要正确做的事情。 我已经用之前/之后的示例更新了我原来的问题,以尝试更好地说明。 此外,我有一个包含 14,000 个功能测试表的数据库,我需要执行此操作,因此将文本转换为列,然后转置每个单独的表并不是一个可行的选择。
感谢您的帮助! 我真的很感激:D回复:单单元格表突破
回复:单单元格表突破曼迪,
感谢您的建议! 在发布此消息之前,我了解了“文本到列”实用程序,但这会每行创建 84 个新列,并且丢失了我尝试使用的表格数据的功能。 我构建了一个我想要的输出示例,并将其添加到我的原始帖子中。
谢谢!
回复:单单元格表突破我认为我们的帖子交叉了。 因此,在使用 Text to columns 之后,现在使用 Tables Transpose,您可以翻转表格并将数据放入列中。
回复:单单元格表突破您可以采用该列的值,如 11.000,0.00,0.050,0.001,PASS,11.047,-156,并使用“列”>“实用工具”>“文本转列”为该列中的不同内容创建单独的列。
使用分隔符 ,-
这会给你这样的列:
11,000 0.00 0.050 0.001 通过..等等..
如果您想更多或以不同的方式分解它,您可以使用不同的分隔符或空格。
希望这就是您想要做的。