안녕,
수식 참조가 포함된 열을 삭제하려는 스크립트가 있습니다.JMP에서는 이 작업을 쉽게 수행할 수 있습니다. 불필요한 열을 삭제하면 "JMP 경고"가 표시되고 "수식 제거"를 선택합니다.그런 다음 메타데이터 열을 삭제할 수 있지만 테이블에는 수식 열에서 계산된 결과가 유지됩니다.
내 문제는 어떻게 스크립트를 작성할 수 있습니까?수식 참조가 포함된 메타데이터 열을 삭제하는 옵션이 있습니까?JMP10을 사용하고 있습니다. 아래 예를 참조하십시오.
/*
bigClass = Open( "$SAMPLE_DATA/Big Class.jmp" );
bigClass << New Column( "height / weigh", Numeric, Continuous, Format( "Best", 12 ), Formula( :height / :weight ) );
bigClass << Delete Column( "height" );
bigClass << Delete Column( "weight" );
*/
감사해요!
알고 보니 저는 이미 JMP 위시 리스트에 이런 성격의 항목을 제출했고 JMP 지원팀에 연락했습니다(아직 명확한 해결책은 없지만 해결 방법을 아직 통합할 시간이 없었습니다).
위시리스트 항목: 동적 수식 제거
JMP 지원팀과의 채팅에서 몇 가지 옵션을 해결했습니다.
Names Default to here(1);
dt = Open( "$SAMPLE_DATA\Big Class.jmp" );
dt << New Column( "Test 1", Numeric, Formula( :height + :weight ) );
dt << New Column( "Test 2", Numeric, Formula( :height + :age ) );
keepCols = AssociativeArray({"name","Test 1","sex"});
formList = {};
formCols = {};
for(i=1,i<=ncol(dt),i++,
if(IsEmpty(Column(dt,i) << get formula),
Empty()
,
insertInto(formList,Column(dt,i) << get formula);
insertinto(formCols,i);
);
show(formList,formCols)
);
existingCols = dt << get column names(string);
For(i=1,i<=nitems(existingCols), i++,
there = keepCols[existingCols[i]];
If(there == 0,
for(j=1,j<=nitems(formList),j++,
nowCol = existingCols[i];
If(Contains(char(formList[j]),nowCol) > 0,
Print(nowCol);
//show(formCols[j]);
Try(Column(dt,formCols[j]) << delete formula);
,
Empty()
)
);
//dt << delete columns(eval(existingCols[i]))
)
);
For(i=1,i<=nitems(existingCols), i++,
there = keepCols[existingCols[i]];
If(there == 0,
dt << delete columns(eval(existingCols[i]))
)
);
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA\Big Class.jmp" );
dt << New Column( "Test 1", Numeric, Formula( :height + :weight ) );
colList = {:age, :height, :name};
colListStr = {"age", "height", "name"};
failed = {};
//dt << Delete Columns( :age ); //works
//dt << Delete Columns( colList[1] ); //fails
//dt << Delete Columns( Column( colListStr[1] ) ); //works
For( i = 1, i <= N Items( colList ), i++,
//dt << Clear Column Selection;
//colList[i] << Set Selected;
str = "";
//str = Log Capture( dt << Delete Columns( colList[i] ) ); //fails
//str = Log Capture( dt << Delete Columns() ); //works for selected columns
str = Log Capture( dt << Delete Columns( Column( colListStr[i] ) ) ); //works
Show( str );
If( str != "",
Insert Into( failed, colList[i] )
);
);
Show( failed );
아직 해결책을 찾지 못했습니다. 제가 생각해낸 코딩에서 가장 어려운 점은 기본적으로 모든 수식을 가져와서 해당 수식에 필요한 지역 변수에 대한 수식 열의 맵을 만드는 것입니다. 그런 다음 열 삭제를 수행해야 할 때 동적으로 사용할 수 있습니다.
나는 JMP가 처음에 경고를 발생시키는 방법을 아는 방법의 기초가 이와 같은 것이라고 가정합니다. 위의 내용을 해결하려면 시간이 좀 걸릴 것이므로 이상적으로는 JMP가 부울 기능 등을 제공하는 JSL 함수를 생성할 수 있습니다.
아마도 좀 더 공식적인 솔루션을 찾기 위해 JMP 지원팀과 대화를 나누게 될 것입니다(또는 위시 리스트에서 솔루션을 요청하겠습니다).
안녕하십니까?
게시된 질문/문제에 대한 해결책을 찾았습니까?
나도 똑같이하려고 노력 중입니다 ... 하나 이상의 다른 열의 수식에 사용된 열을 삭제하고 싶습니다.
"를 지정하는 대신 동적으로 만들고 싶습니다. col << 수식 삭제" 특정 열에 대한 명령문입니다.
좀 오래됐지만 여기에 추가된 내용이 있어서 여기서 먼저 시도해 보겠습니다. 
삭제하려는 열을 참조하는 수식이 포함된 열을 모르는 경우 어떻게 해야 합니까? 뭔가 동적으로 만들려고 하는데 충돌이 있으면 자동으로 수식을 삭제하도록 미리 코딩하고 싶지만(수동으로 한 것처럼) 이를 허용하는 구문을 찾을 수 없습니다.
"가장 쉬운" 방법은 문제가 되지 않도록 모든 수식을 제거하는 것이지만, 필요한 것보다 좀 더 극단적인 것 같습니다.
@돈힐 Column("열 이름") << 수식 삭제;
이 문제를 어떻게 해결했는지 알려주실 수 있나요?수식을 제거하려고 시도했지만 이로 인해 원래 열의 값이 제거되었습니다.열 참조가 포함된 열을 삭제해야 합니다.감사합니다.