JSL - 목록을 사용하여 채울 때 열의 마지막 값이 누락됨여보세요
다른 목록의 요소가 다른 열에 표시되는 행의 목록에서 한 요소를 할당하기 위해 수식을 실행할 때 예기치 않은 문제가 발생합니다. 마지막 행의 값이 누락되었습니다.
ID_List = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", "40", "41", "42", "43", "44", "45", "46", "47", "48"};
Vessel_List = {"CS1-1", "CS1-2", "CS1-3", "CS1-4", "CS1-5", "CS1-6", "CS1-7", "CS1-8", "CS1-9", "CS1-10", "CS1-11", "CS1-12", "CS2-1", "CS2-2", "CS2-3", "CS2-4", "CS2-5", "CS2-6", "CS2-7", "CS2-8", "CS2-9", "CS2-10", "CS2-11", "CS2-12", "CS3-1", "CS3-2", "CS3-3", "CS3-4", "CS3-5", "CS3-6", "CS3-7", "CS3-8", "CS3-9", "CS3-10", "CS3-11", "CS3-12", "CS4-1", "CS4-2", "CS4-3", "CS4-4", "CS4-5", "CS4-6", "CS4-7", "CS4-8", "CS4-9", "CS4-10", "CS4-11", "CS4-12"};
dt << New Column( "Vessel NB",
"Numeric",
"Continuous",
Formula(
For( i = 1, i < N+1, i++,
r= dt<<GETROWSWHERE></GETROWSWHERE>다음은 어떻게 생겼는지입니다.

동일한 운동을 하는 여러 분야에서 문제가 발생했습니다.
이전 값을 사용하여 해결 방법을 찾았습니다(표를 정렬한 것과 동일하다는 것을 알고 있음).
// change data type of Vessel Nb to numeric continuous
Column("Vessel NB") << delete formula;
Column("Vessel NB") << unlock;
Column("Vessel NB")<< data type(numeric)<<FORMAT></FORMAT>그러나 이 해결 방법은 첫 번째 테이블에서 작동했지만 두 번째 테이블에서 작업할 때 다음 메시지가 표시되고 문제를 해결할 수 없습니다.

수식을 포함하고 잠긴 것으로 표시되는 열을 분명히 생성했지만 이 메시지가 표시되는 이유를 이해할 수 없습니다.
이 문제를 해결하는 방법과 처음에 왜 이런 일이 발생했는지에 대한 제안이 있으십니까?
미리 감사합니다
문안 인사
주의: JMP 16을 사용하고 있습니다.
스크립팅Re: JSL - 목록을 사용하여 채울 때 열의 마지막 값이 누락되었습니다.안녕,
이런 공사는 정말 피하고 싶습니다. 해당 표의 공식을 보면 문제가 있음을 알 수 있습니다. 범위 지정 문제(수식 외부에 정의된 목록 사용)가 발생하고 열의 수식 내에서 열 자체를 작성하려고 합니다. JMP가 우리를 허용할 줄은 몰랐습니다...
그러나 귀하의 문제를 재현할 수는 있지만 그 이유를 정확히 설명할 수는 없습니다.
그래서 내 제안은 아래 스크립트와 같이 외부에서 루프를 만드는 것입니다. 훨씬 더 투명합니다.
loc() 함수는 목록에서 위치(인덱스)를 제공합니다.
또 다른 방법은 ID_LIST 및 Vessel_LIST에서 테이블을 생성하는 것입니다.
참조 dt가 있는 테이블에 해당 테이블을 조인합니다.
Names Default To Here( 1 );
ID_List = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24",
"25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", "40", "41", "42", "43", "44", "45", "46", "47", "48"};
Vessel_List = {"CS1-1", "CS1-2", "CS1-3", "CS1-4", "CS1-5", "CS1-6", "CS1-7", "CS1-8", "CS1-9", "CS1-10", "CS1-11", "CS1-12", "CS2-1", "CS2-2",
"CS2-3", "CS2-4", "CS2-5", "CS2-6", "CS2-7", "CS2-8", "CS2-9", "CS2-10", "CS2-11", "CS2-12", "CS3-1", "CS3-2", "CS3-3", "CS3-4", "CS3-5", "CS3-6",
"CS3-7", "CS3-8", "CS3-9", "CS3-10", "CS3-11", "CS3-12", "CS4-1", "CS4-2", "CS4-3", "CS4-4", "CS4-5", "CS4-6", "CS4-7", "CS4-8", "CS4-9", "CS4-10",
"CS4-11", "CS4-12"};
Show( N Items( ID_LIST ) );
Show( N Items( Vessel_LIST ) );
dt = New Table( "test", add rows( 48 ), New Column( "Vessel ID ViCell", Character, Nominal, set values( Vessel_list ) ) );
N = N Rows( dt );
dt << New Column( "row", "Numeric", "Continuous", Formula( For( i = 1, i <= N, i++, Column( dt, "row" )[i] = i ) ) );
dt << New Column( "Vessel NB",
"Numeric",
"Continuous",
Formula(
For( i = 1, i < N + 1, i++,
r = dt << getRowsWhere( :Vessel ID ViCell == Vessel_List[i] );
Column( dt, "Vessel NB" )[r] = ID_List[i];
)
)
);
// My proposal: run the loop outside, as the lists are outside, too
dt << New Column( "Vessel NB 2", "Numeric", "Continuous" );
For Each Row( dt, :Vessel NB 2 = ID_LIST[Loc( Vessel_LIST, :Vessel ID ViCell )[1]] );Re: JSL - 목록을 사용하여 채울 때 열의 마지막 값이 누락되었습니다.약간 추측하고 있지만 최종 답변에 도달하는 데 필요하지 않은 많은 작업을 수행하고 있다고 생각합니다.또한 형식에 고유하지 않은 형식 내에서 값을 사용하고 있습니다.즉, 형식을 실행한 후 데이터 테이블을 저장하고 JMP 세션을 종료하고 새 JMP 세션을 시작하고 저장된 데이터 테이블을 열면 공식에 오류가 발생합니다."n", "Vessel_List" 및 "ID_Vessel" 변수는 더 이상 새 JMP 세션에서 정의되지 않습니다.따라서 형식이 더 이상 실행되지 않습니다.
아래 수식이 원하는 것을 수행할 수 있습니까?
dt << New Column( "Vessel NB",
"Numeric",
"Continuous",
Formula(
currVessel = :Vessel ID ViCell;
r = Current Data Table() << Get Rows Where( :Vessel ID ViCell == curVessel );
r[n items(r)];
)
);
Re: JSL - 목록을 사용하여 채울 때 열의 마지막 값이 누락되었습니다.감사합니다 게오르그! 이것은 매력처럼 작동합니다!