For 루프를 사용하여 새 열 만들기안녕
for 루프를 사용하여 새 열을 만들려고 합니다.
names default to here (1);
dt = current data table ();
summarize (PN=by (:Name("~DEVICE TYPE" )));
for (i=1, i <= N items(PN), i++,
new column("Cnt "||PN[i],
formula(If( :Name( "~DEVICE TYPE" ) == PN[i],
If( :SERIAL_NO || :TIME_DATE == Lag( :SERIAL_NO || :TIME_DATE, -1 ),0,1)
))));
새 열을 만들 수 있지만 수식이 작동하지 않습니다. 로그 파일은 아래 오류 메시지를 보여줍니다.
Column Cnt TRB100BC-08 Formula Interrupted
Subscript Range 1 times At rows: 2 Operation: PN[i], PN[/*###*/i]
Formula evaluation errors have been ignored
Re: For 루프를 사용하여 새 열 만들기감사합니다Re: For 루프를 사용하여 새 열 만들기주요 문제는 New Column() 함수 내의 수식 요소가 처리 전에 평가되지 않으므로 사양 PN[i]를 수식에 배치하고 루프가 실행될 때 변수 "i"가 변경되기 때문입니다. 만들고 있는 각 열의 수식이 변경됩니다.따라서 해야 할 일은 수식을 정적 값으로 변경하는 것입니다.즉, 설치된 공식이 PN[i]를 갖는 것이 아니라 PN[i]가 무엇이든 실제 평가된 값을 갖기를 원합니다.Substitution() 함수를 사용하면 이 작업을 수행할 수 있습니다.나는 아래 스크립트가 당신이 원하는 것을 할 것이라고 생각합니다
Names Default To Here( 1 );
dt = Current Data Table();
Summarize( PN = by( :Name( "~DEVICE TYPE" ) ) );
PN={"X"}
For( i = 1, i <= N Items( PN ), i++,
Eval(
Substitute(
Expr(
New Column( __name__,
formula(
If( :Name( "~DEVICE TYPE" ) == __PN__,
If(
:SERIAL_NO || :TIME_DATE ==
Lag( :SERIAL_NO || :TIME_DATE, -1 ),
0,
1
)
)
)
)
),
Expr( __name__ ), "Cnt " || PN[i],
Expr( __PN__ ), PN[i]
)
)
);