在列公式內宣告變數你好,
在列公式中宣告變數是個好習慣嗎?或者這會產生錯誤的風險嗎?我的公式效果很好,但我擔心它可能不可靠。
rownum = Row();
If( :Measurement type == "STUDY_VARIABLE",
:Control means[Min(
Current Data Table() << get rows where( :Measurement type == "STUDY_CONTROL" & :Control group == :Control group[rownum] )
)],
:Control means
);
設定如下:
- :測量類型是一列,它將每行標記為 STUDY_CONTROL 或 STUDY_VARIABLE
- :控制組是一列,它使用標籤(只是一個字母)將 STUDY_VARIABLES 行與相關 STUDY_CONTROL 行的適當平均值(:控制平均值)關聯起來
- :Control group[Row()] 不起作用,所以我預先指定了 rownum 變數
這是一個優雅的解決方案還是一個危險的駭客?
作為第二個問題,編輯警告我在公式中使用 Current Data Table() 是危險的 - 有更好的選擇嗎?
非常感謝您的幫助 - 這是我的第一個問題!
大衛
回覆:在列公式中宣告變數歡迎來到俱樂部!
:)
關於您關於「目前資料表()」的問題,這裡是腳本者俱樂部記錄中共享腳本的螢幕截圖:建立健壯且故障安全的腳本:

將表格儲存在變數中並在腳本中使用該變數。在螢幕截圖範例中,這將是“dt”。
回覆:在列公式中宣告變數確實是關於 JSL 腳本的精彩講座!
這 1 小時將為您節省數月的頭痛:)
對於您的問題,請查看Col Min( ...) 。
它將為您完成所有工作:
無需宣告任何 rownum - 無需存取當前資料表,也無需取得行 where()


Names Default to Here(1);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt << New Column( "Measurement type",
Character,
Formula(
Map Value(
:sex,
{"F", "STUDY_VARIABLE", "M", "STUDY_CONTROL"}
)
)
);
:weight << Set Name( "Control means" );
:age << Set Name( "Control_Group" );
// ^^^^^^^^prepare table
// vvvvvvvv how to use Col Min()
New Column( "myCol",
Formula(
If( :Measurement type == "STUDY_VARIABLE",
Col Minimum(
If( :Measurement type == "STUDY_CONTROL",
:Control means,
Empty()
),
:Control_Group
),
:Control means
)
)
)