我正在尝试分析我公司生产的设备的子组件之一的数据。 不幸的是,实际有用的数据保存在一个表中,该表被压缩为数据库中的单个单元(请参见下文)。 有没有办法在保留所有其他数据的同时将此数据分解为单独的列和行(例如,为所有新的数据行分配相同的序列号)?
谢谢!
大卫

您可以采用该列的值11.000,0.00,0.050,0.001,PASS,11.047,-156,并使用“列”>“实用程序”>“文本到列”来为该列中的不同内容创建单独的列。
使用定界符-
这将为您提供像这样的列:
11,000 0.00 0.050 0.001通过..等
如果您想对其进行更多或不同的分解,可以使用不同的定界符或空格。
希望这是您想要做的。
曼迪
谢谢你的建议! 我在发布此消息之前就了解了“文本到列”实用程序,但是每行创建了84个新列,并且失去了我要使用的列表数据的功能。 我构建了一个示例,希望将输出结果添加到原始帖子中。
谢谢!
首先,无论谁创建了这样的表格,都应该...好吧...我可以想到一些适当的惩罚措施。
幸运的是,我认为JMP将使其相对容易处理。
首先,使用列->实用程序->文本到列.. 。如@Mandy_JMP建议,但使用NEWLINE作为分隔符。

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

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

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

现在,您可以使用文字转栏...再次,这次以逗号(,)作为分隔符。

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

现在,只需复制和粘贴列名称即可。 这里有个提示可以帮助您列名让您失望吗? 试试这个。然后,使用Cols->标准化属性将列的数据类型更改为适当的数值。
您说您有一个14k的数据库。 它们是数据库中14k个不同的表还是一个表的14k行? 希望后者,因为您应该能够使用File-> Database-> Open Table将所有内容放入一个JMP数据表中。
如果确实有14k个不同的表,则需要使用表格->连接将它们全部放入JMP的一个表中,但是在确认数据库中的桥之后,让我们越过该桥。
而不管,选择匹配的单元格是另一个可以帮助您清理的工具。 在取得一些进展之后,我将在后续帖子中进行解释。
嘿杰夫,
我已经和负责测试的工程师说过话,您不用担心:P。 不幸的是,这是14k个单独的表,每个表都有自己的单元格和标题,每个表中都有重复的标题。 我附上了3张图片(14k ...)。 我将尝试您的方法,让您知道它的运行方式!

你好@dpeyer ,
这是一个加载项,您可以调用该加载项来导入数据。
或者,您可以运行脚本将文本文件导入JMP。
我基于附加的示例文本文件进行导入。
脚本和加载项都可以更新,以将类似文件连接到单个文件中。
干杯,
斯坦
嘿,杰夫,很完美! 我有一个后续问题。 有没有一种方法可以将所有这些步骤另存为脚本,这样我就不必在每次需要提取此数据时都重做它们? 我尝试将其保存为会话脚本,但这并没有保存任何数据中断。
我很高兴听到它已经整理好数据供您分析。
是的,您可以创建一个脚本来为您执行此操作。 这将需要一些工作,但JMP会为您创建其中的一些工作。
以下是有关操作方法的概述。
JMP 15不会捕获“文本到列...”命令,但是编写起来很简单:
// 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);
希望对您有所帮助。
不断提出问题。