이름의 문자열을 기반으로 여러 열 삭제안녕,
포함된 문자열을 기반으로 여러 열을 삭제해야 하지만 때로는 해당 문자열이 포함되지 않은 경우에도 다른 열을 유지하고 싶습니다.
따라서 이 게시물의 솔루션을 따르면 열 이름을 기준으로 여러 열 삭제
dt = Open( "$sample_data/Hollywood Movies.jmp" );
col_names = dt << Get Column Names( String );
For( i = N Items( col_names ), i > 0, i--,
If(
Not(
Contains( col_names[i], "Gross") | contains(col_names[i], "Genre" ) | col_names[i] == "theme"),
Remove From( col_names, i)
)
);
그래서 내가 갖고 싶은 것은 "Gross" 또는 "Genre"가 포함되지 않은 것을 제거하는 것이지만 열 이름이 == "theme"이면 제거하지 마십시오.
지금은 작동하지 않는 것 같습니다! 왜?

이 질문에 대한 두 번째 총알
col_names를 가리키지 않고 출력이 무엇인지 알 수 있도록 어떻게 col_names를 데이터 테이블로 볼 수 있습니까? 때로는 긴 열 이름 목록이 있고 가리키면 해당 열 목록에 있는 항목을 보는 데 효율적이지 않기 때문입니다.
감사해요!
대량 맞춤화Re: 이름의 문자열을 기반으로 여러 열을 삭제합니다.데이터 테이블에 대한 귀하의 혼란은 이전에 본 것입니다.JMP와 JMP의 데이터 테이블이 다른 점은 데이터 테이블을 기본 요소로 생각해야 한다는 점입니다.대부분의 경우 다음과 같은 JSL 라인이 표시됩니다.
dt = Open("$SAMPLE_DATA/big class.jmp");
일부 언어에서는 dt가 데이터 테이블이 됩니다.그렇지 않다.위의 명령문은 데이터 테이블 "Big Class"에 대한 포인터만 할당합니다.변수 dt 위로 마우스를 가져가면 다음을 볼 수 있습니다.
data table( "Big Class" )
그 가치대로.
따라서 문을 실행하면
xyz = dt;
데이터 테이블 Big Class의 새 인스턴스를 가져오지 않고 일부 언어에서와 같이 Big Class라는 동일한 데이터 테이블에 대한 포인터인 xyz라는 변수만 얻습니다.
새 복사본을 생성하려면(일반적으로 생성되면 완전히 독립적인 새 데이터 테이블이기 때문에 새 인스턴스가 아님) 테이블 플랫폼 중 하나를 사용하여 작업을 완료합니다.
dt2 = dt << subset( all rows, all columns);
위의 명령은 새 데이터 테이블을 만들고 변수 dt2를 새 테이블에 대한 포인터로 설정합니다.
Re: 이름의 문자열을 기반으로 여러 열을 삭제합니다.짐,
오해해서 미안해. 그러나 내가 검색하는 대부분의 항목은 잘 설명되어 있지 않거나 jsl pdf에 간단히 설명되어 있습니다. 특히 재귀 스크립팅(if-else, for 루프)은 복잡한 작업을 수행하려는 경우 매뉴얼에 포함되어 있지 않습니다. 오류를 추적하는 것도 매우 어렵습니다. '로그'를 확인하라고 말할 때까지 나는하지 않았습니다.
예를 들어, 새 데이터 테이블을 생성하거나 새 데이터 테이블을 할당하는 방법에 대한 설명이 없습니다.
내가 직설적으로 생각했던 것
dt_new << Data Table( col_names );
새 데이터 테이블을 만들어야 하지만 jmp에서는 간단하지 않다는 것을 배웠습니다. 내가 하고 있는 구문에 대해 묻거나 연습해야 합니다.
정말 감사합니다!
Re: 이름의 문자열을 기반으로 여러 열을 삭제합니다."col_names" 값을 생성한 직후에 출력하면 데이터 테이블의 모든 컬럼을 보여줍니다.
{"Movie Name", "Lead Studio Name", "Rotten Tomatoes Score", "Audience Score",
"Theme", "Genre", "Theaters Opening Wknd", "BOA Opening Wknd", "Domestic Gross",
"Foreign Gross", "World Gross", "Production Budget", "Profitability",
"Opening Wknd Gross"}
자세히 보면 "theme" 값이 있는 항목이 없음을 알 수 있습니다. 값이 "Theme"인 항목이 있습니다.문자열의 값을 비교하고 있으며 대문자와 소문자를 적절하게 일치시켜야 합니다.
스크립팅 가이드를 읽어 보시기 바랍니다!
도움말==>JMP 설명서 라이브러리 스크립팅 가이드
Re: 이름의 문자열을 기반으로 여러 열을 삭제합니다.왜
col_names[i] == "theme"<BR />
아직 작동하지 않습니까?

Re: 이름의 문자열을 기반으로 여러 열을 삭제합니다.dt = Open( "$sample_data/Hollywood Movies.jmp" );
col_names = dt << Get Column Names( String );
dt:Profitability << delete formula;
For( i = N Items( col_names ), i > 0, i--,
If(
Not(
Contains( col_names[i], "Gross") | contains(col_names[i], "Genre" ) | col_names[i] == "theme"),
Remove From( col_names, i)
)
);
// At this point in the script, you have a data table
// with all of the original columns(Profitability is now a static column)
// And you have a JSL List called "col_names", which is stored in memory
// so you can do anythin you want given this
// You could just write the contents of the list to the log. Remember, the
// list "col_names", only contains the names of the columns, it does not
// contain the whole column(name, properties and data)
Print( col_names );
// or
Write( col_names );
// or
Show( col_names );
// That will give you the list of columns that are going to be deleted
// or before you want to see the columns in their entirety you can create
// a new data table with just those columns
newdt = dt << subset( all rows, columns( col_names ) );
// The statement below, is a perfectly valid statement, however, it will
// not work the way you think it will. The end result of this statement
// is to create a new list of column names.
// {"Genre", "Domestic Gross", "Foreign Gross", "World Gross", "Opening Wknd Gross"}
deleted_columns = delete columns( col_names );
Re: 이름의 문자열을 기반으로 여러 열을 삭제합니다.안녕 짐,
답장을 보내 주셔서 감사합니다. 좋아, 무슨 말인지 알겠어.
우리가 공식에 대해 신경쓰지 않는다고 합시다. 수식 연결을 모두 삭제하고 원하는 열을 제거해 보겠습니다.
삭제된 열을 데이터 테이블로 만들고 싶습니다.
당신의 제안을 따라
dt = Open( "$sample_data/Hollywood Movies.jmp" );
col_names = dt << Get Column Names( String );
dt:Profitability << delete formula;
For( i = N Items( col_names ), i > 0, i--,
If(
Not(
Contains( col_names[i], "Gross") | contains(col_names[i], "Genre" ) | col_names[i] == "theme"),
Remove From( col_names, i)
)
);
deleted_columns = delete columns( col_names );
이것은 내가 필요한 것을 여전히 생성하지 않습니다 
Re: 이름의 문자열을 기반으로 여러 열을 삭제합니다.귀하가 제공한 JSL에서 가장 중요한 진술을 빠뜨렸습니다.
dt << delete columns( col_names );
이것은 실제로 삭제를 수행하는 행입니다.그러나 이 샘플 사례에는 추가 문제가 있습니다.열의 최종 목록
{"Genre", "Domestic Gross", "Foreign Gross", "World Gross", "Opening Wknd Gross"}
"Profitability" 열의 계산에 사용되는 "World Gross" 열이 있습니다."열 삭제" 메시지가 처리되면 문제를 감지하고 로그에 표시합니다.
Cannot delete the selected columns while some are referenced by the formulas of remaining columns.
Removing a formula leaves the data unchanged. Removing references replaces each reference with an empty value. These effects are permanent and cannot be undone.
"수익성" 열에서 수식을 삭제하면 값이 정적 값으로 변환됩니다.
dt:Profitability << delete formula;
그러면 "열 삭제"가 제대로 작동합니다.
변수 위로 마우스를 가져가서 값을 보고 값을 볼 수 있는 데이터 테이블을 만들고자 하는 문제와 관련하여 훨씬 더 간단한 방법이 있습니다."col_names" 변수 위로 마우스를 가져가는 대신 이를 강조 표시한 다음 마우스 오른쪽 버튼을 클릭하고 "스크립트 실행"을 선택해야 합니다.규칙에 따라 JMP 스크립트의 어떤 것이 강조 표시되면 "스크립트 실행"은 강조 표시된 행/문/변수만 실행합니다.결과는 로그에 표시됩니다.