如何使用 Select Columns 在 for 循环中将数据值添加到表中 在何处创建目标数据的新整体数据表For( date = date_array << First, !Is Empty( date ), date = date_array << Next( date ), //looping through date_array's keys is clunky but done this way in JMP
dt << Select Columns( :Timepoint, :Target Channel, :Run date ), Where(:Timepoint == date);
dt << Subset( ( Selected Rows ), Output Table Name( "Subset" ));<BR />);
我希望通过 for 循环的每次迭代逐步添加由列标准 (:Timepoint == LBCM) 指定的数据,并在循环完成时将其组合到最后的组合数据表中,并显示结果。
到目前为止,它还没有在任何地方添加任何东西;我最终根本没有新的数据表。
我也将所有这些内容都放在另一个 for 循环中,基于示例 ID,但我认为在这里添加这些内容目前只会使事情变得过于复杂。
我在 JMP 社区论坛中找到的所有其他示例都非常复杂,或者看起来如此,构建数据数组并将它们传输到数据表或类似的东西。 我希望这里的解决方案尽可能简单。 当然,我会在收到回复后为对话做出贡献,但到目前为止我完全陷入困境。
感谢您的帮助,
麦克风
高级统计建模内容组织实验设计大规模定制分享和交流结果A回复:如何使用 Select Columns 在 for 循环中将数据值添加到表中 在哪里创建目标数据的新整体数据表选择列部分可能会带来很小的效率提升,但大多数情况下它只会使代码更易于阅读(在我看来)。
您是否尝试过在循环内添加调试打印以查看是否有任何内容需要子集:
For(i = 1, i <= N Items(IDs), i++,
ID = IDs[i];
date_array = Associative Array({"date1", "date2", "date"}, {{}, {}, {}});
For(date = date_array << First, !Is Empty(date), date = date_array << Next(date),
dt << Select Where(:Timepoint == date);
Show(N Items(dt << Get Selected Rows));
dt_ld4 << Subset(Columns({"Timepoint", "Target Channel"}), Selected Rows, Output table name("Subset"));
);
);我添加了Show(N 项(dt << 获取选定行));它应该告诉您是否已选择任何行。 另外,如果您有类似命名的列,我也不会觉得使用 ID 作为变量名很舒服(它可能有效,不确定,但为了确定起见,我确实避免使用此类名称)。 我会将其替换为 currentID 或其他内容。
我认为,在这一点上,如果我们有一个主题可以尝试帮助您部分解决这个问题,可能会更容易。对我们有很大帮助的一件事就是拥有一个示例数据集。 数据集不必很大,可以是匿名的或完全伪造的数据,但它仍然应该是现实的(列数据类型相同,可以测试不同的情况)。
回复:如何使用 Select Columns 在 for 循环中将数据值添加到表中 在哪里创建目标数据的新整体数据表谢谢你,贾莫。 那么,您的代码主要是提高效率还是真正提高功能?
它对我来说并不完全有效,但我不得不说我将所有这些都放在另一个(或两个)循环中:
For( i = 1, i <= N Items( IDs ), i++,
ID = IDs[i];
date_array = Associative Array( {"date1", "date2", "date"}, {{}, {}, {}} );
For( date = date_array << First, !Is Empty( date ), date = date_array << Next( date ), //looping through date_array's keys is clunky but done this way in JMP
dt << Select Where(:Timepoint == date);
dt_ld4 << Subset(Columns({"Timepoint", "Target Channel"}), Selected Rows, Output table name("Subset"));
//...
););计算机在执行时似乎思考了很多,但屏幕上没有显示任何内容。 我必须注意,所有这些代码都是匿名的,因此可能会出现拼写错误和转录错误,以及可能与所编写内容的早期版本混淆。 我想可以安全地假设可以做出近似相似之处......
我不知道这两行应该位于循环内部还是其中一个循环外部,或者此时我是否需要两个循环。 我需要再仔细看一遍剧本。
我还在不同的帖子中讨论了有关这段代码的几个单独的主题。 有人可以告诉我这是否是可以接受的礼仪,或者是否最好将代码块优先放到一篇文章中并在一篇文章中讨论单独的主题,或者这两种方式都可以吗?
穆科斯·格拉西亚斯,
迈克尔
回复:如何使用 Select Columns 在 for 循环中将数据值添加到表中 在哪里创建目标数据的新整体数据表我不是 100% 确定你想在这里做什么,所以我猜测一下
这两行似乎可能存在一些问题:
dt << Select Columns( :Timepoint, :Target Channel, :Run date ), Where(:Timepoint == date);
dt << Subset( ( Selected Rows ), Output Table Name( "Subset" )););
您可以在子集命令中组合所需的列,并且可以使用 << SelectWhere 来选择行(似乎您缺少 Select)。
dt << Select Where(:Timepoint == date);
dt << Subset(Columns({"Timepoint", "TargetChannel"}), Selected Rows, Output table name("Subset"));此外,如果您希望首先选择要子集化的列,则必须在“子集”命令中添加“选定的列”
dt << Subset(Output table name("Subset"), Selected Rows, Selected Columns);回复:如何使用 Select Columns 在 for 循环中将数据值添加到表中 在哪里创建目标数据的新整体数据表看一眼
dt << add rows(n);
根据需要添加新行