It does seem odd, doesn't it?
It is all about context. For example, you might use this in a column formula:
If( Column("height") < 60, 0, 1 ); // implicit assignment of Row() = current row number
Or you might use it in the For Each Row() function to accomplish the same thing in a script:
For Each Row(
// implicit assignment of Row() = current row number
If( Column("height" ) < 60,
:status = "small",
:status = "large"
)
)
The context of the column formula and the iteration above is such that JMP is implicitly setting the Row() function for you. So JMP uses that information to figure out where to get or store the value (i.e., which row). That is not the context of the general case here:
dtSubgroup = dt << Subset(Rows(dt << get rows where(Column("height") < 60)));
The data table does not implicitly use the current row number when you tries to evaluate the comparison. You force it to by adding the empty subscript operator, [ ].