수식 연결 및 억제여러분,
활성 열 수식이 많은 테이블(샘플)이 여러 개 있습니다. 한 지점에서 내 스크립트는 모든 테이블을 연결합니다. 그러나 연결된 모든 데이터를 비교/오버레이하기 위해 개별 테이블 데이터(샘플)를 그대로 유지하고 싶기 때문에 수식을 억제하고 싶습니다. 불행하게도 연결할 때 수식을 제대로 끌 수 없는 것 같고 새로 연결된 열이 평가되어 개별 샘플 데이터가 손실됩니다. 코드가 첨부된 상태에서 이 비트가 있다고 생각했지만 초기 테이블을 다른 폴더에 다시 복사했을 때 공식이 "재활성화"되어 약간의 불만을 야기했습니다. Suppress Formula Evaluation이 현재 구현에서 작동하지 않기 때문에 좋은 수정 사항이 있는 경우 모든 입력에 열려 있습니다.
닐
Con = Expr(
n = N Table();
dt = {};
// Sort list ascending (sample replicates)
For( i = 1, i <= n, i++,
table = data table(i);
insert into(dt, table);
sort list into(dt)
);
// Concatenate each file (sample replicates)
dt_all = Data Table( dt[1] );
For(i = 1, i <= n, i++,
If(i > 1,
Suppress Formula Eval(suppress=1);
dt_all << Concatenate(Invisible, dt[i], Append to first table);
)
);
Current Data Table(dt_all);
);
데이터 접근품질 및 프로세스 엔지니어링Re: 수식 연결 및 억제야르노,
훌륭한 입력입니다. 사실 어젯밤에 "Is Empty" 경로를 보기 시작했습니다. 따라서 수식을 제거하고 연결하는 논의를 마무리하기 위해 귀하의 제안을 받아들여 귀하의 제안을 코딩하여 기술을 업데이트했습니다. 또한 원래 게시물과 코드에 따라 제대로 작동하는 업데이트를 만들었습니다.
- 첫 번째 블록은 "Is Empty" 문을 사용하여 NO 수식 열을 선택하고 나머지 수식만 제거합니다.
- 두 번째 블록은 스크립팅 인덱스를 보고도 처음 제안했을 때 완전히 이해하지 못한 "Try"를 사용하고 있습니다. 이전 시도처럼 실행이 중지될 것이라고 생각했지만 분명히 그렇지 않았습니다.
- 세 번째 블록은 열린 첫 번째 테이블에 대해 "Suppress formula eval"을 사용합니다. 다른 모든 테이블은 이 첫 번째 테이블에 연결되며 최종 연결된 테이블 열이 평가되지 않는 원하는 출력도 제공합니다.
내 기술을 향상시키는 데 도움이 되는 모든 정보에 대해 충분히 감사할 수 없습니다.
닐
For( i=1, i <= N Items(b), i++,
If(i==1,
file_1 = Open(SD1 || b[1]);
CN = file_1 << get column names(numeric);
For(j=1, j <= N Items(CN), j++,
result = Column(file_1, CN[j]) << Get Formula;
y = Is Empty(result);
If(y==0, Column(file_1, CN[j]) << delete formula);
);
);
If(i > 1,
file_nxt = Open(SD1 || b[i], Private);
file_1 << Concatenate(file_nxt, append to first table);
Close(file_nxt, no save);
);
);
file_1 << Save(SD1 || "All Summary");
Close("All Summary");For( i=1, i <= N Items(b), i++,
If(i==1,
file_1 = Open(SD1 || b[1]);
CN = file_1 << get column names(numeric);
For(j=1, j <= N Items(CN), j++,
Try(Column(file_1, CN[j]) << delete formula);
);
);
If(i > 1,
file_nxt = Open(SD1 || b[i], Private);
file_1 << Concatenate(file_nxt, append to first table);
Close(file_nxt, no save);
);
);
file_1 << Save(SD1 || "All Summary");
Close("All Summary");For( i=1, i <= N Items(b), i++,
If(i==1,
file_1 = Open(SD1 || b[1]);
file_1 << Suppress Formula Eval(1);
);
If(i > 1,
file_nxt = Open(SD1 || b[i], Private);
file_1 << Concatenate(file_nxt, append to first table);
Close(file_nxt, no save);
);
);
file_1 << Save(SD1 || "All Summary");
Close("All Summary");Re: 수식 연결 및 억제수식이 반드시 필요하지 않은 경우 수식 대신 << 각 값 설정을 사용할 수 있으므로 수식을 만들 필요도 없습니다(또는 만든 직후 수식을 제거). 그러나 필요한 경우 열에 수식이 << 있는 수식이 있는지 확인하고 결과가 Empty()인 경우 수식이 존재하지 않거나(수식 누락 확인을 위해 IsEmpty() 사용) "무차별 대입"을 수행할 수 있습니다. " Try-catch 로 하세요.
수식 얻기:
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
col = New Column("Ratio");
result = col << Get Formula;
Show(result, IsEmpty(result));
col << Set Formula(:Height / :Weight);
col << Eval Formula;
result = col << Get Formula;
Show(result, IsEmpty(result));
트라이-캐치:
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
col = New Column("Ratio");
Try(col << Delete formula, show(exception_msg)); //the show part isn't necessary
그런 다음 수식이 있는 열에 대해 루프를 수행하려는 경우 목록에 대해 for 루프를 수행하고 새 목록을 작성할 수 있습니다(JMP16이 있는 경우 Filter Each 사용).
테이블의 모든 수식을 제거하는 방법에 대한 커뮤니티 게시물도 있습니다. 예를 들면 다음과 같습니다. 테이블에 있는 모든 수식 찾기 및 삭제
Re: 수식 연결 및 억제자모,
문제를 밝혀 주셔서 감사합니다. 기존 수식이 없으면 문제가 될 줄 몰랐습니다. 그 사실을 염두에 두고 첫 번째 테이블에 대한 조건문을 만들었습니다. 이것은 "file_1"에 특정 열 공식이 한 번 삭제되었기 때문에 분명히 작동했습니다. 첨부된 코드는 단일 열 예제에서 작동했습니다.
이제 수식이 있어야 한다는 것을 이해했으므로 문제는 모든 열에 수식이 없다는 것입니다. 따라서 모든 열 이름을 검색하면 연결된 열이 없는 하위 집합이 있습니다. 적절한 목록을 루프로 구성할 수 있도록 열에 수식이 있는지 테스트하는 방법이 있습니까? 아니면 열에 수식을 추가할 때마다 업데이트해야 하는 JSL 목록을 설정하여 문제를 "무차별 대입(brute force)"합니까?
닐
For( i=1, i <= N Items(b), i++,
If(i==1,
file_1 = Open(SD1 || b[1]);
file_1:"Pore Diameter (um)" << delete formula;
);
If(i > 1,
file_nxt = Open(SD1 || b[i], Private);
file_1 << Concatenate(file_nxt, append to first table);
Close(file_nxt, no save);
);
);
file_1 << Save(SD1 || "All Summary");
Close("All Summary");
Re: 수식 연결 및 억제올바른 데이터 테이블에 액세스하려고 합니까? for 루프에서 항상 file_1과 동일한 파일을 엽니다.
다음과 같이 문제가 무엇인지 찾는 데 도움이 되도록 for 루프 내부에 일부 디버그 인쇄를 추가할 수 있습니다.
file_1 = Open(SD1 || b[1]);
show(file_1);
show(file_1 << Get Column Names("String")); //depending how many columns you have might not want to do this
show(Contains(file_1 << Get Column Names("String"), "Pore Diameter (um)"));
file_1:"Pore Diameter (um)" << delete formula;또한 Close(dtref, no save)를 사용하여 더 이상 필요하지 않은 데이터 테이블을 닫는 것을 기억하십시오.
Re: 수식 연결 및 억제늦은 답변 죄송합니다. 모든 피드백에 감사드립니다.
아직 모든 열을 공격하지 않고 특정 열에서 하나의 수식을 제거해 보았습니다. 루프 외부에서 "공식 삭제" 줄을 적용하면 원하는 결과를 얻습니다. 즉, 수식이 존재하지 않습니다. 그러나 동일한 줄이 루프 내에 있으면 파일을 연 후 다음 오류가 발생합니다.
"Column Pore Diameter(um)에는 'delete formula', delete formula/*###*/의 액세스 또는 평가에 공식이 없습니다."
분명히 나는 왜 문제가 있는지 아직 이해하지 못한 역학을 가지고 있습니다. 통찰력을 제공할 수 있습니까?
감사합니다.
For( i=1, i <= N Items(b), i++,
file_1 = Open(SD1 || b[1]);
file_1:"Pore Diameter (um)" << delete formula;
If(i > 1,
file_nxt = Open(SD1 || b[i], Private);
file_1 << Concatenate(file_nxt, Append to first table);
);
);
//file_1:"Pore Diameter (um)" << delete formula;
file_1 << Save(SD1 || "All Summary");
Close("All Summary");Re: 수식 연결 및 억제JMP는 속성 표준화를 통해 대화식으로 이 작업을 수행할 수도 있습니다.
모든 열을 선택하고 열 중 하나를 마우스 오른쪽 버튼으로 클릭한 다음 속성 표준화를 선택합니다.

속성 삭제에 수식을 추가하고 확인을 누릅니다(또는 적용).

JMP16이 있는 경우 Enhanced Log에 인쇄됩니다.
// Open Data Table: Wheat.jmp
// → Data Table("Wheat")
Open("$SAMPLE_DATA/Wheat.jmp");
// Standardize column attributes
Local({old dt = Current Data Table()},
Current Data Table(Data Table("Wheat"));
For Each({col, index},
{:Variety, :Yield, :Moisture, :Pred Formula Yield, :Cond Pred Formula Yield},
col << Delete Formula
);
Current Data Table(old dt);
);
그리고 이것은 이것을 처리하는 방법에 대한 좋은 아이디어를 줄 것입니다 (txnelson이 말했듯이 목록을 반복하고 이동하면서 수식을 삭제하십시오). << 열 이름 가져오기를 사용하여 테이블의 모든 열을 가져올 수도 있습니다. 수식이 없는 열에서 수식을 제거할 수는 없지만(및 향상된 로그에서 제공하는 스크립트는 직접 작동하지 않음) col << Delete 수식을 Try()로 래핑하여 이를 피할 수 있습니다. 향상된 로그 스크립트를 정리한 후 다음과 같이 끝날 수 있습니다.
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Wheat.jmp");
For Each({col}, dt << get column names(String),
Try(Column(dt, col) << Delete Formula)
);Re: 수식 연결 및 억제열 이름을 목록에 넣은 다음 목록을 반복하면서 각각을 삭제할 수 있습니다.
Re: 수식 연결 및 억제짐,
응답해 주셔서 감사합니다. 테이블당 수식이 포함된 열이 약 10개이므로 한 번에 모두 삭제하는 "포괄적" 접근 방식이 있습니까?
닐
Re: 수식 연결 및 억제해야 할 일은 연결하기 전에 수식을 삭제하는 것입니다.그러면 값이 정적 값으로 변환되고 문제가 발생하지 않습니다.
:yourColumn << delete formula;