大家好!
比如这段代码,把数据读入“copydt”,如何用JSL一步读取“copydt”中的“KATIE”,我在代码中用了两步。
dt = Open("$SAMPLE_DATA\Big class.jmp");Wait(0);
copydt = dt[0,0];
dt[0,0] = .;
a=copydt[1,1];
b=a[1,1];
c={copydt[1,1][1,1]};
dt[0,0] = copydt;Wait(0);
另外,如何直接用JSL修改“copydt”中的数据呢?
例如,将第一行的名称更改为“KATIE2”,并将第一行的年龄更改为 18。
将修改后的数据写入原数据表。
谢谢!

要回答本次讨论的主题中提出的问题,请对保存从数据表形成的数据的变量使用下标。 您可以在执行示例时使用调试器或日志来检查结果。 我会使用日志。
dt = Open("$SAMPLE_DATA\Big class.jmp");
copydt = dt[0,0];
dt[0,0] 中使用的下标引用所有行和所有列 - 整个表。 变量 copydt 包含一个列表列表。 每个子列表是原始数据表中的一行。
dt[0,0] = .;
所有行和所有列都发生缺失分配 - 整个表。 数据表现在包含 5 个数据列的 40 行缺失值。
a = copydt[1,1];
此表达式使用标准列表下标。 您正在检索列表中的第一项。 该值是一个列表,表示原始数据表中的第一行。 当你学习如何给列表下标时,你就会知道这个表达式要求两次相同的东西——第一个元素。 以下所有表达式都是相同的。
a = copydt[1];
a = copydt[1,1];
a = copydt[1,1,1];
所以第一种形式更简洁,更受青睐。
b = a[1,1];
与前面的表达式相同。您正在检索列表中的第一项。 该值为原始数据表中第一行第一列的字符串。
c = { copydt[1,1][1,1] }; // c = { copydt[1][1] } is equivalent, sufficient, and preferred
您已将单元素列表分配给变量。 没有对列表项进行评估。
dt[0,0] = copydt;
您将列表的列表分配给整个数据表。 每个子列表成为数据表中的新行。 此步骤演示了第二行和最后一行之间的对称行为。
要回答讨论正文中提出的问题,您可以使用下标:
copydt[1][1] = "Katie2";
copydt[1][2] = 18;
下标是嵌套的。 所以读copydt[1][1] = "凯蒂2"将“Katie2”分配给第一项内的第一项。 读copydt[1][2] = 18将 18 分配给第一项内的第二项。
请注意,在数据表、矩阵和列表数据结构之间打乱数据的能力随 JMP 的每个版本而变化。 通常,功能会增加,结构之间的差异会减少。
所以,我已经解释了你做了什么,但我不知道你为什么这样做或你想要完成什么。 你的主题非常广泛和模糊。 你想让我做什么?
选择帮助>图书>脚本指南在 JMP 中获取数据表、列表和矩阵的更完整信息和解释。