JSL: 수식의 마지막 용어를 복사하고 이 값을 동일한 수식에 추가하는 방법안녕하세요 여러분,
첫 번째 여러 수식 열을 선택하고 각 수식 열에서 마지막 숫자 용어를 가져와 이 값을 기존 수식에 추가할 수 있는 스크립트를 찾고 있습니다.
설명 목적으로:
스크립트를 실행하기 전 수식 열 1개:

그 후(단순히 값 39,78...이 복사되어 추가되었습니다):

수백 개의 서로 다른 수식 열이 있으므로 여기에 자동화된 스크립트가 있으면 좋을 것입니다.
당신의 도움을 기대합니다!
감사해요!
/마르코
고급 통계 모델링자동화 및 스크립팅데이터 접근품질 및 프로세스 엔지니어링Re: JSL: 수식의 마지막 용어를 복사하고 이 값을 동일한 수식에 추가하는 방법다음은 수식을 문자열로 조작한 다음 표현식으로 조작하여 이를 수행하는 두 가지 방법입니다.
Names Default To Here( 1 );
//Make some sample data
dt =New Table( "Untitled",
Add Rows( 100 )
);
For Each( {i}, 1 :: 6,
Eval(
Eval Expr(
dt << New Column( "ToFix " || char(i),
Expression,
"None",
Formula( Vec Quadratic( [1 3 5, 3 2 6, 5 6 1], [1 3 5, 2 4 6] ) * Expr( i ) )
)
)
)
);
// Select some columns
dt << Select Columns( (dt << Get Column References)[4::5] );
//'fix' each selected column formula by manipulating the formula as a string
for each( {col, c}, dt << Get Column References( dt << Get Selected Columns ),
if( Starts With( col << get name(), "ToFix"),
newf = regex(
char(col << Get Formula),
"(.* \* (\d+))",
"\1 + \2"
);
//show(Parse(newf));
Eval( Eval Expr(
col << Set Formula( Expr( Parse(newf) ) )
) );
)
);
// Select some different columns
dt << Select Columns( (dt << Get Column References)[6::7] );
//'fix' each selected column formula by manipulating the formula as an expression
for each( {col, c}, dt << Get Column References( dt << Get Selected Columns ),
if( Starts With( col << get name(), "ToFix"),
f = col << Get Formula;
v = Arg(col << Get Formula, 2);
//show(Name Expr(f));
newf = Eval Expr( Add(Expr(Name Expr(f)), Expr(Name Expr(v))));
show(newf);
Eval( Eval Expr(
col << Set Formula( Expr( Name Expr(newf) ) )
) );
)
);
Re: JSL: 수식의 마지막 용어를 복사하고 이 값을 동일한 수식에 추가하는 방법귀하의 솔루션에 감사드립니다 @ih !
나는 내 요구를 충족시키기 위해 정규 표현식을 약간 수정해야했지만 귀하의 게시물은 확실히 그것을 찾는 열쇠였습니다!
다른 사용자의 경우 수정된 코드 아래에서 찾으십시오.
// Select some columns
dt = currentdatatable();
dt << Get Selected Columns;
//'fix' each selected column formula by manipulating the formula as a string
for each( {col, c}, dt << Get Column References( dt << Get Selected Columns ),
newf = regex(
char(col << Get Formula),
"(.* \* (\d+\.?\d*))",
"\1 + \2"
);
//show(Parse(newf));
Eval( Eval Expr(
col << Set Formula( Expr( Parse(newf) ) )
) );
);Re: JSL: 수식의 마지막 용어를 복사하고 이 값을 동일한 수식에 추가하는 방법수식에 따라 Arg()를 사용할 수도 있습니다. 아주 간단한 예라면 아래와 같습니다.
Names Default To Here(1);
dt = New Table("Untitled 2",
Add Rows(2),
New Column("Column 1", Numeric, "Continuous", Format("Best", 12), Set Values([1, 2])),
New Column("Column 2", Numeric, "Continuous", Format("Best", 12), Formula(:Column 1 * 2)),
New Column("Column 3", Numeric, "Continuous", Format("Best", 12), Formula(:Column 2 * 3))
);
cur_col_idx = 3;
Show(column(dt, cur_col_idx) << get formula);
Eval(Substitute(
Expr(
Column(dt, cur_col_idx) << Set Formula(_old_f_ + _new_mult_)
),
Expr(_old_f_), Column(dt, cur_col_idx) << Get Formula,
Expr(_new_mult_),
old_f = Column(dt, cur_col_idx - 1) << Get Formula;
Arg Expr(old_f, N Arg(old_f))
));
Show(column(dt, cur_col_idx) << get formula);