如何製作一個可以接受可變數量輸入列的公式?嘿大家,
我編寫了一個腳本,用於透過分組列將資料列居中:

現在它只尊重以列為中心的一列,但我希望能夠放入多列。關於如何使公式更具動態性,有什麼指導嗎?目前我只是用它來開始一個新列,然後進入並手動新增要居中的附加列。
Names Default To Here( 1 );
dt = current data table();
results = Column Dialog(src=ColList("Cols to be centered", Min Col(1)),trg = ColList("centered by", Min Col(1)));
for(i=1, i<= n items(eval(results[1])), i++,
ts=expr(dt << New Column( "cent col", "Numeric",Formula(Expr(Eval( results[1] )[i]) - Col Mean( Expr(Eval( results[1] )[i]), Expr(Eval( results[2] )[1]) ))));
eval(eval expr(TS));
ts=expr(dt:"cent col"n<<SET name=""></SET>
<P>謝謝您的意見!</P>
<BR />
<BR /><LINGO-LABS id="lingo-labs-869624" slang="en-US" mode="CREATE"><LINGO-LABEL>自動化和腳本</LINGO-LABEL></LINGO-LABS>回覆:如何製作一個可以接受可變數量輸入列的公式?「居中列」-這是經常需要的。關於如何居中(除法或減法)以及如何計算“參考”,有數百種組合:

您可以查看https://marketplace.jmp.com/appdetails/Normalization+GUI - 它會在 JMP 選單中新增一個 GUI 來為您完成工作。如果排除行,它也有效。
如果你想自己設置,基本想法就是一步一步操作表達式。
例如使用插入新增動態數量的分組欄位:
For Each( {groupByCol, idx}, currentGroupCols,
Insert Into( secondArgumentDirect, Name Expr( As Column( dt, groupByCol ) ) )
);回覆:如何製作一個可以接受可變數量輸入列的公式?您的意思是您希望新增更多分組列嗎?
Names Default To Here(1);
dt = Current Data Table();
results = Column Dialog(
src=ColList("Cols to be centered", Min Col(1)),
trg = ColList("centered by", Min Col(1))
);
srcs = results["src"];
trgs = results["trg"];
For Each({src}, srcs,
colname = (src << get name) || " centered by";
mean_expr = Expr(Col Mean());
Insert Into(mean_expr, NameExpr(src));
For Each({trg}, trgs,
colname = colname || " " || (trg << get name);
Insert Into(mean_expr, NameExpr(trg));
);
Eval(Substitute(
Expr(dt << New Column(colname, "Numeric", "Continuous", Formula(
_col1_ - _mean_
));
),
Expr(_col1_), Name Expr(src),
Expr(_mean_), Name Expr(mean_expr),
));
);
您也可以選擇讓 JMP 透過使用「新公式列」並在之後變更名稱來執行更多操作
Names Default To Here(1);
dt = Current Data Table();
results = Column Dialog(
src=ColList("Cols to be centered", Min Col(1)),
trg = ColList("centered by", Min Col(1))
);
srcs = results["src"];
trgs = results["trg"];
res = dt << New Formula Column(
Operation(Category("Distributional"), "Center"),
Columns(srcs),
Group By(trgs)
);回覆:如何製作一個可以接受可變數量輸入列的公式?謝謝@hogi 。我必須添加該插件。
啊,“插入”,這看起來就是票(因為@jthi也進入了)。
回覆:如何製作一個可以接受可變數量輸入列的公式?嘿@jthi ,
是的,它可以添加更多的分組列,並且第一個腳本是完美的!謝謝您的幫忙!
回覆:如何製作一個可以接受可變數量輸入列的公式?一個選項是使用 Substitute 來用 Col Mean 使用公式中的列列表取代某些表達式。
這是您的資料的懶惰範例
Names Default To Here(1);
dt = Current Data Table();
results = Column Dialog(
src=ColList("Cols to be centered", Min Col(1)),
trg = ColList("centered by", Min Col(1))
);
srcs = results["src"];
trgs = results["trg"];
For Each({src}, srcs,
colname = (src << get name) || " centered by";
l = Insert(trgs, Name Expr(src), 1);
f = Substitute(l, Expr(List), Expr(Col Mean()));
Eval(Substitute(
Expr(dt << New Column(colname, "Numeric", "Continuous", Formula(
_col1_ - _mean_
));
),
Expr(_col1_), Name Expr(src),
Expr(_mean_), Name Expr(f),
));
);
只需注意一點:我將使用“新視窗”而不是“列對話框”來建立對話框,因為即使在相當簡單的情況下它也提供了更大的靈活性。
回覆:如何製作一個可以接受可變數量輸入列的公式?感謝@jthi新增的選項。
是的,這是一個較舊的腳本,我還沒有切換到使用新窗口,所以我現在已經改正了這個壞習慣!