如何在不直接調用列名的情況下製作條件子集表?該腳本的前 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
這個改變有幫助嗎?