JSL을 사용한 새 열 공식사용자 입력을 기반으로 테이블에 새 열 수식을 추가하려고 합니다. 입력은 단일 값 또는 열 선택일 수 있습니다.
몇 가지 방법을 시도했지만 이것을 교환 가능하게 처리할 수 있는 방법을 얻을 수 없었습니다.
아래에서 시도한 샘플 스크립트.
이상적으로는 입력에 관계없이 "newcoexpr" 표현식을 동일하게 유지할 수 있습니다. 이것은 주로 많은 입력(예: >8 입력)을 사용하는 사용자 지정 수식 열을 배포하려고 하기 때문입니다.
도움을 주셔서 감사합니다.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
//when selection is a single value
//desired outcome: a new column "Test" with formula (1*5)
selection = {1};
newcolexpr = expr(
dt << new column("Test", formula(expr(selection[1])*5))
);
eval(eval expr(newcolexpr));
//when selection is a column (e.g. "height")
//desired outcome: a new column "Test" with formula ("height"*5)
selection = {"height"};
newcolexpr = expr(
dt << new column("Test", formula(expr(selection[1])*5))
);
eval(eval expr(newcolexpr));스크립팅Re: JSL을 사용한 새 열 공식대부분의 경우 입력을 확인한 다음 이를 기반으로 열을 생성해야 합니다(수식에서 Expr 내부를 확인할 수 있지만 이 방법이 더 명확함). 다음은 하나의 옵션입니다.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
new_col_expr = Expr(
cur_sel = selection[1];
show(cur_sel);
If(IsNumber(cur_sel),
Eval(EvalExpr(dt << New Column("Test", Numeric, Formula(Expr(cur_sel)*5))));
,
Eval(EvalExpr(dt << New Column("Test", Numeric, Formula(Expr(NameExpr(AsColumn(cur_sel)))*5))));
);
);
selection = {1};
new_col_expr;
selection = {"height"};
new_col_expr;Re: JSL을 사용한 새 열 공식야 @jthi 응답해 주셔서 감사합니다. 나도 이런 생각을 하고 있었는데, 수식에서 고려해야 할 변수가 1개 이상이라면 어떻게 될까요? nested-if가 유일한 해결책이 될까요? (나는 정말로 그것을 피하려고 노력하고 있습니다)?
표현식으로 대체하기 전에 입력 유형에 따라 숫자 또는 NameExpr(asColumn())을 할당할 수 있도록 구문이 expr() 내부의 변수를 처리할 수 있는지 궁금합니다.
Re: JSL을 사용한 새 열 공식이에 접근하는 방법에 대한 접근 방식은 변수, 입력 및 공식에 따라 크게 달라집니다.
다른 예:
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
formula_expr = Expr(Expr(dt << New Column("Test", Numeric, Formula(placeholder*5))));
selection = {1};
Eval(Substitute(formula_expr, Expr(placeholder), selection[1]));
selection = {:height};
Eval(Substitute(formula_expr, Expr(placeholder), selection[1]));
formula_expr2 = Expr(Expr(dt << New Column("Test", Numeric, Formula(Sum(placeholder)))));
selection = {1,3};
Eval(Substitute(formula_expr2, Expr(placeholder), selection));
selection = {:height, :weight};
Eval(Substitute(formula_expr2, Expr(placeholder), selection));
formula_expr3 = Expr(Expr(dt << New Column("Test", Numeric, Formula(Col Sum(placeholder)))));
selection = {:height, :age, :sex};
Eval(Substitute(formula_expr2, Expr(placeholder), selection));
일부 링크:
Eval Insert, Eval Expr, Parse 및 Substitute를 사용하여 한 표현식을 다른 표현식에 삽입
수식에서 열 목록 사용
표현식을 문자열로 작성하지 않고 이것을 구성할 수 있습니까?
Re: JSL을 사용한 새 열 공식답장을 늦게 보내서 미안해. 감사 해요 @jthi !
나는 내가하고 싶은 일에 다음이 효과가 있음을 발견했습니다.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
new_col_expr = expr(
dt << new column("Testing",formula(t1+t2+3))
);
Selection1 = {1,5};
if(Selection1[1] == 1,
Substitute into(new_col_expr,
expr(t1),
Selection1[2]
),
Selection1[1] == 0,
Substitute into(new_col_expr,
expr(t1),
Nameexpr(ascolumn(Selection1[2]))
)
);
Selection2 = {0,"weight"};
if(Selection2[1] == 1,
Substitute into(new_col_expr,
expr(t2),
Selection1[2]
),
Selection2[1] == 0,
Substitute into(new_col_expr,
expr(t2),
Nameexpr(ascolumn(Selection2[2]))
)
);
eval(evalexpr(new_col_expr))위의 모든 참조에 감사드립니다. 그들은 도왔다.
새해 복 많이 받으세요!