如何在不直接调用列名的情况下制作条件子集表?该脚本的前 3 行创建一个高度小于 60 的新数据表。 这部分运行良好。
对于我想要开发的功能,我想以与使用 :height 不同的方式引用列。
我尝试了 4 种不同的方法来引用该专栏,但都不起作用。 我已经使用了列函数和获取列引用函数(请参见下文)。
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
//This one works
dtSubgroup = dt << Subset(Rows(dt << get rows where(:height < 60)));
//None of these work
dtSubgroup = dt << Subset(Rows(dt << get rows where(Column("height") < 60)));
dtSubgroup = dt << Subset(Rows(dt << get rows where(Column(dt, "height") < 60)));
dtSubgroup = dt << Subset(Rows(dt << get rows where(Column(4) < 60)));
refList = dt << Get Column Reference( {"height"} );
dtSubgroup = dt << Subset(Rows(dt << get rows where(refList[1] < 60)));它们不工作有什么原因吗?
关于解决方案有什么建议吗?
感谢您的帮助。
回复:如何在不直接调用列名的情况下制作条件子集表?这看起来确实很奇怪,不是吗?
这一切都与背景有关。 例如,您可以在列公式中使用它:
If( Column("height") < 60, 0, 1 ); // implicit assignment of Row() = current row number
或者您可以在 For Each Row() 函数中使用它来在脚本中完成相同的操作:
For Each Row(
// implicit assignment of Row() = current row number
If( Column("height" ) < 60,
:status = "small",
:status = "large"
)
)
列公式和上面迭代的上下文使得 JMP 隐式为您设置 Row() 函数。 因此,JMP 使用该信息来确定在哪里获取或存储该值(即哪一行)。 这不是这里一般情况的上下文:
dtSubgroup = dt << Subset(Rows(dt << get rows where(Column("height") < 60)));
当您尝试评估比较时,数据表不会隐式使用当前行号。 您可以通过添加空下标运算符 [ ] 来强制执行此操作。
回复:如何在不直接调用列名的情况下制作条件子集表?谢谢,这正是我想要的。
我可以问为什么这有效吗?
我已经多次使用列函数而没有使用方括号。
这个案例有什么不同呢? 要遵循什么规则?回复:如何在不直接调用列名的情况下制作条件子集表?尝试在 Column() 函数的右括号后附加空方括号。 像这样:
Column("height")[] < 60
这个改变有帮助吗?