使用列和行

本演示将说明如何管理数据列和数据表行。我将使用脚本创建一个只有一列的新数据表。在课程日志的“新建数据表和列”部分中,我将点击“新建数据表和列”。您可以看到我们正在使用新的表函数。我们将把由此创建的数据表对象引用存储在变量 dt 中。该表将命名为“测试数据”。我将有一列名为 pH。数据类型为数值型,建模类型为连续型。然后,我将使用值参数(也可以称为“设置值”)——这两个参数是同义词——并使用索引运算符(中缀运算符)进行填充。因此,我们将以 1 为增量从 1 数到 7。由于我提供了这些值,所以这就是该数据表的行数。还有一个可选参数可以添加指定数量的行,如果我最初没有填充值,我可能会使用这些参数。您还将看到,如果您使用 JMP 为数据表编写脚本,其中包含获取脚本消息,该消息将包含添加行的参数。我们还将使用固定小数参数指定格式,该格式包含一个包含三个小数位的字段。我们将打开列的锁定选项,这样在未解锁的情况下就无法修改它。我们将使用范围检查参数来分配该列的属性。这里的语法 LELE() 表示小于或等于列中的值小于或等于。最后,我们有一个设置属性参数的示例,其中我们正在设置规格限值的属性。由于有多个选项可以指示规格限值,因此我们列出了三个限值——规格下限、规格上限和目标值。还要记住,所有这些新列的可选参数都可以在创建列后作为消息发送到列,或者像我们在这里看到的一样,作为新列的参数。我要运行这个脚本。您可以在下面的日志中看到,我们创建了一个名为“测试数据”的数据表对象实例。当然,如果我将鼠标悬停在脚本中的变量 dt 上,就会看到以下内容。我得到了一个只有一列七行的数据表。我们可以在表格本身中看到脚本中的所有元素。首先,我知道数据类型是数字,因为我可以看到建模类型图标显示它是连续的。连续建模类型只接受数字数据。而且,数值是右对齐的。如果我们将数字视为字符,它们就会左对齐。如果我们查看列面板中的图标,就会看到一个锁图标,表示我锁定了该列。小勾号表示范围检查。星号表示任意数量的没有自己唯一符号的附加属性。当然,要进入列信息对话框,有几种方法。我们可以通过单击这个星号来快捷操作。我们看到该属性是规格限制。同样,下拉菜单中可能列出了多个属性。我可以选择这些属性。然后我会进入列信息界面。当然,我们也可以选择列并使用列菜单,或者右键单击该列并选择列信息。这样,就会出现规格限制,其值在设置属性参数中指示。我们还有范围检查。同样,它是小于或等于——通用语法中表示为LELE——然后我们得到实际值。在这里我们可以看到该列已被锁定。数据类型为数值。建模类型为连续。格式为固定小数,字段宽度为列中可显示的最大字符数,并保留三位小数。因此,我将取消列信息对话框。然后我将继续取消选择pH列。现在,列属性下拉菜单中有一个选项,可以设置您自己的用户列属性。如果您以交互方式执行此操作,菜单选项就称为“其他”。您可以命名属性及其将采用的值。日志中有一个脚本,名为“添加用户列属性”。我们将它发送到 pH 列。这个用户列的正确名称应该是“仪表校准”。我只想将今天的日期格式化为月、日、年的字符串。因此,这里的文本,即设置属性的第二个参数,在本例中,我使用“今日”函数来检索自运行此行代码时一月午夜以来的秒数。我将其包装在格式函数中,并指定我想要显示的字符串格式。同样,在编写脚本时,这可能是一个反复试验的过程。如果我只是提供了我突出显示的内容——我想我可能已经……是的。我想确保我指定的括号数量正确。让我运行这个,我刚刚突出显示的内容。所以我选择它。然后我按 Ctrl+R。我看到那个字符串在日志中显示的正是我想要的样子。所以我可能会运行这个设置属性消息,也就是这段带有属性消息的代码,一开始没有使用 eval 函数。如果我这样做,当我查看仪表校准属性的列信息时,看到的就是代码本身,它实际上并不会求值。所以设置属性可能不会求它的第二个参数的值,这就需要我们把它包装在 eval 函数中。现在,在设置属性消息之外运行它,结果——让我继续运行它——它会返回完全相同的结果。所以,你可能一开始只使用了 Today 函数的格式,然后发现它没有返回你想要的列属性值。然后你就会意识到你需要添加那个 eval 函数。所以我不会选择任何选项,而是运行这个脚本。我在日志中收到的消息是可脚本化的。这意味着我做了一些可脚本化的事情。所以,有时你会发现运行一些代码时,预期的事情并没有发生。你可能会看到这条可编写脚本的消息。所以,你需要尝试找出问题所在,因为“可编写脚本”这个词并不能真正提供信息。但在我们的例子中,让我们继续查看表格。同样,我们可以通过点击这个星号来查看列信息。我这样做是为了表明现在菜单中又多了一项。同样,任何没有自己专属图标的列属性都会显示在星号菜单中。我点击“仪表校准”,这样当列信息对话框打开时,它就是被选中的属性。这里还有使用“今日”函数并将其格式化为字符串的评估结果。所以我会取消它。我将使用“添加用户列属性脚本编辑器窗口”来进一步操作这个表格。现在它不需要那么宽了。我现在想将新列作为消息发送到数据表。我将新列命名为 Hydronium。创建后,我会添加一个公式。当然,我可以在创建列的过程中添加公式。实际上,我还会将代码生成的列对象引用存储在一个变量中。我将其命名为 HYD,hyd 代表 Hydronium。我将向 dt 发送消息的结果赋值给它,因为我们将测试数据对象引用存储在这个变量中。所以我将消息发送到 dt 的新列,然后打开括号和字符串。新列唯一需要的参数是列名 Hydronium。我继续运行这个程序。将结果存储在这个变量中意味着我不需要再次输入完整的名称 Hydronium。所以我不必存储该对象引用。我仍然可以与该列进行通信。但这只是为了节省我一点打字时间,因为它使用了缩写名称。现在,假设,正如我提到的,我想为这个列添加一个公式。所以我只需换行即可。而且我要小心,不要意外地再次运行整个脚本并创建第二个 Hydronium 列。所以我要注释掉第一行。我要向变量 hyd 发送一条消息。消息是设置公式。我要将公式的 pH 值乘以负数,也就是 pH 值到——然后我会打开括号——减——并且我将使用冒号范围运算符,因为我指的是 pH 列,只是为了安全起见,以防我的全局命名空间中还有其他名为 ph 的变量。我没有使用“名称默认为此处”,尽管在实践中我们建议将其作为最佳实践。所以我要输入分号并运行这行脚本。再次,我们在日志中看到了可编写脚本的消息。但我们可以检查表格,看看这些值是否已填充。处理列和行时,还有一些其他操作可以尝试。假设我想为数据表中的单元格着色,以标记超过某个数字的值。因此,我将在“脚本编辑器”窗口中转到一个新行。我将创建一个名为 callout 的变量。我将把存储在 dt 中的数据表的结果赋给该变量,该变量接收了 get rows where 消息。然后,我的布尔比较结果是 pH 列中的值大于。因此,我只运行这一行。您可以看到,rows 和 get rows where 返回一个包含行号的列向量。然后,我将向 pH 发送一条消息。由于该列对象引用未存储在变量中,因此我只需通过名称引用它即可。因此,pH 将接收 color cells 消息。这是我们可以发送给列的另一条消息。我将使用颜色名称作为第一个参数。还有索引值,您可以使用RGB值。我将使用名称作为字符串。所以我要把这些单元格涂成红色。第二个参数是,你想给哪些单元格涂色?你可以涂整列,也可以提供行号。所以我将使用变量Callout,它存储pH值大于3的行。我只运行这一行。顺便说一句,注意我忘了加分号。这说明结尾的分号是不必要的。只有当我有其他参数时才需要。如果我们现在查看数据表,你会看到这四个单元格被涂成了红色。所以,如果你有一个大数据表,并且某些列可能有规格限制,这样做可能会很不错。例如,你可以根据这些规格限制为超出规格的单元格涂色,这样在你开始查看图表之前,就可以在数据表中直观地标记出来。当然,您不必为单元格着色,但这是一个可以使用的选项。在本演示中,我们看到了一个示例:创建一个包含一列的新数据表,向该数据表添加一列,并稍微尝试了一下我们可以对列和行进行的一些操作。
回复:使用列和行我尝试在没有“Eval”的情况下运行设置属性,它仍然有效。 (当前使用 JMP 16.2)
:pH << Set Property( "Meter Calibration2", Format( Today(), "m/d/y" ) );
