가변적인 개수의 입력 열을 받을 수 있는 수식을 만드는 방법은 무엇입니까?안녕하세요 여러분,
그룹화 열을 기준으로 데이터 열을 가운데 정렬하기 위해 만든 스크립트가 있습니다.

현재는 열 가운데 정렬 기준이 하나만 적용되는데, 여러 열을 추가할 수 있게 하고 싶습니다. 수식을 더 동적으로 만드는 방법에 대한 조언이 있나요? 현재는 새 열을 만든 후, 가운데 정렬 기준에 추가할 열을 수동으로 추가하는 방식으로 사용하고 있습니다.
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>Re: 가변 개수의 입력 열을 받을 수 있는 수식을 만드는 방법은 무엇입니까?"열 가운데 정렬" - 이 기능은 매우 자주 필요합니다. 가운데 정렬(나누기 또는 빼기) 방법과 "참조"를 계산하는 방법은 수백 가지가 있습니다.

https://marketplace.jmp.com/appdetails/Normalization+GUI 를 확인해 보세요. JMP 메뉴에 GUI가 추가되어 작업을 자동으로 처리합니다. 행이 제외된 경우에도 작동합니다.
직접 설정하고 싶다면, 기본적인 아이디어는 표현을 단계별로 조작하는 것입니다.
예를 들어, Insert Into를 사용하여 동적인 개수의 그룹화 열을 추가합니다.
For Each( {groupByCol, idx}, currentGroupCols,
Insert Into( secondArgumentDirect, Name Expr( As Column( dt, groupByCol ) ) )
);Re: 가변 개수의 입력 열을 받을 수 있는 수식을 만드는 방법은 무엇입니까?더 많은 그룹화 열을 추가하고 싶다는 뜻인가요?
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)
);Re: 가변 개수의 입력 열을 받을 수 있는 수식을 만드는 방법은 무엇입니까?@hogi 님 , 감사합니다. 해당 광고를 추가해야겠네요.
아, "Insert Into", 이게 정답인 듯합니다( @jthi 도 그렇게 말했죠).
Re: 가변 개수의 입력 열을 받을 수 있는 수식을 만드는 방법은 무엇입니까?안녕하세요 @jthi ,
네, 그룹화 열을 더 추가할 수 있을 것 같아요. 첫 번째 스크립트가 완벽하네요! 도와주셔서 감사합니다!
Re: 가변 개수의 입력 열을 받을 수 있는 수식을 만드는 방법은 무엇입니까?한 가지 옵션은 수식에서 열 목록을 사용하여 일부 표현식을 열 평균으로 대체하는 것입니다.
다음은 귀하의 데이터를 사용한 게으른 예입니다.
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),
));
);
한 가지 주의할 점: 열 대화 상자 대신 새 창을 사용하여 대화 상자를 만드는 것이 좋습니다. 그렇게 하면 비교적 간단한 경우에도 훨씬 더 많은 유연성을 얻을 수 있습니다.
Re: 가변 개수의 입력 열을 받을 수 있는 수식을 만드는 방법은 무엇입니까?추가 옵션을 알려준 @jthi 에게 감사드립니다.
네, 이건 제가 새 창을 사용하도록 전환하지 않았던 오래된 스크립트였는데, 이제 그 나쁜 습관을 고쳤어요!