IF 문을 최적화하고 있습니까?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />내 데이터 세트에서 식별하고 싶은 특정 값(:MeasurementGroup 열의 특정 값) 목록이 있습니다."관심 가치?"라는 새 열을 만들었습니다. 지표를 생성하는 공식: YES 또는 NO
dt1 << New Column( "관심 가치?",
성격,
명사 같은,
공식( If(
:MeasurementGroup == "A", "예",
:MeasurementGroup == "B", "예",
:MeasurementGroup == "C", "예",
:MeasurementGroup == "D", "예",
:MeasurementGroup == "E", "예",
:MeasurementGroup == "F", "예",
:MeasurementGroup == "G", "예",
:MeasurementGroup == "AA", "예",
:MeasurementGroup == "BB", "예",
:MeasurementGroup == "CC", "예",
:측정 그룹 == "ZZ", "예",
:MeasurementGroup == "ABC", "예",
:MeasurementGroup == "DEC", "예",
:MeasurementGroup == "WSA", "예",
:MeasurementGroup == "RSS", "예",
:MeasurementGroup == "DVC", "예",
:MeasurementGroup == "SFS", "예",
:MeasurementGroup == "AAZ", "예",
:MeasurementGroup == "ZZA", "예",
:MeasurementGroup == "TTT", "예",
"아니요") )
);
내 데이터 테이블에는 거의 100만 개의 행이 있으며 채워지기 전에 약간 변동되는 것 같습니다.이와 동일한 결과를 얻는 더 효율적인 방법이 있습니까?
어떤 도움이라도 대단히 감사하겠습니다! 감사해요
Re: IF 문을 최적화하고 있나요?Peter에게 감사합니다. 이제부터 포스팅할 때 이 방법을 사용하겠습니다.
건배,
브래디
Re: IF 문을 최적화하고 있나요?좋아 보인다 브래디!
그런데 코드를 게시할 때 JSL을 워드 문서에 복사/붙여넣은 다음 거기에서 포럼에 복사/붙여넣습니다.이는 JSL 편집기의 모양을 유지합니다.
예를 들어:
dt << 새 열 ( "예/아니요 2" ,
공식 (
포함 ( { "ㅏ" , "비" , "씨" , "디" , "이자형" , "에프" , "G" , "AA" , "BB" , "CC" , "ZZ" , "알파벳" , "12월" , "WSA" ,
"RSS" , "DVC" , "SFS" , "AAZ" , "짜" , "TT" } , : 측정그룹
) != 0
) ,
) ;
Re: IF 문을 최적화하고 있나요?JMP초보자 님, 안녕하세요.
**** 이 스크립트를 의도한 대로 보려면 첨부된 .jsl 파일을 참조하십시오. 내 게시물이 올바르게 표시되는 데 문제가 있었고, 아래에 나타나는 스크립트를 복사/붙여넣기하거나 입력하면 제대로 작동할지 확신할 수 없습니다. 게시할 때는 잘못된 것처럼 보이지만 편집할 때는 괜찮아 보이기 때문에 스크립트 파일을 첨부하는 것 외에는 어떻게 해야 할지 모르겠습니다. 사과드립니다!
*****
값 레이블을 사용하려는 경우(큰 테이블의 경우 상당한 디스크 공간을 절약할 수 있음) 또 다른 몇 가지 빠른 옵션이 있습니다.
1) Contains() 함수를 사용하는 수식 기반 접근 방식:
dt << 새 열( "y/n 2",
공식(
다음을 포함합니다(
{"A", "B", "C", "D", "E", "F", "G", "AA", "BB", "CC", "ZZ", "ABC", " 12월", "WSA", "RSS", "DVC", "SFS", "AAZ", "ZZA", "TTT"},
:측정그룹
) != 0
),
<<열 속성 추가( 값 레이블( {0, 1}, {"NO", "YES"} ) )
);
2) 비공식 기반 접근 방식: JMP는 테이블 작업을 매우 빠르게 수행합니다. 완전히 새로운 테이블을 만들고 닫아야 한다는 점을 고려하면 이 접근 방식의 속도는 나에게 약간 충격을 주었습니다.
dt = 현재 데이터 테이블();
dt2 = 새 테이블( "mt", visible );
열( dt2, 1 ) << 데이터 유형( 문자 ) << 세트 이름( "MeasurementGroup" ) << 세트 값(
{"A", "B", "C", "D", "E", "F", "G", "AA", "BB", "CC", "ZZ", "ABC", " DEC", "WSA", "RSS", "DVC", "SFS", "AAZ", "ZZA", "TTT"}
);
dt2 << 새 열( "y/n", << 각 값 설정( 1 ) );
dt << 새 열( "y/n", << 각 값 설정( 0 ) );
dt << Update( With( dt2 ), 열 일치( :Measurement Group = :MeasurementGroup ), 업데이트 테이블에서 열 추가( None ) );
열( dt, "y/n" ) << 열 속성 추가( 값 레이블( {0, 1}, {"NO", "YES"} ) );
닫기( dt2, nosave );
백만 행 테이블에서 Match 함수의 런타임은 약 2.4초였습니다. (MS의 컴퓨터가 내 컴퓨터보다 빠른 것 같습니다.)
위 접근 방식 1의 런타임은 ~ 0.8초인 반면, 접근 방식 2의 런타임은 ~ 0.4초였습니다.
건배,
브래디
Re: IF 문을 최적화하고 있나요?짐님, 빠른 답변 감사드립니다! LOC 기능을 구현했더니 속도가 즉각적으로 향상되는 걸 볼 수 있었어요!
MS님, 이 부분을 더욱 개선하고 MATCH 기능을 가르쳐 주셔서 감사합니다(그리고 속도 비교도 제공)!
Re: IF 문을 최적화하고 있나요?이 사람에게 상을 주세요!이것은 훌륭합니다.
Re: IF 문을 최적화하고 있나요?일치 기능은 다중 선택에 효과적입니다. 간단한 테스트를 해봤습니다. 행이 백만 개에 달합니다. 성냥 , 위치 그리고 만약에 각각 2.1초, 6.9초, 10.2초 만에 완료됩니다.
dt << 새 열 ( "관심가치" ,
성격 ,
명사 같은 ,
공식 (
성냥 ( : 측정 그룹 ,
"ㅏ" , "예" ,
"비" , "예" ,
"씨" , "예" ,
"디" , "예" ,
"이자형" , "예" ,
"에프" , "예" ,
"G" , "예" ,
"AA" , "예" ,
"BB" , "예" ,
"CC" , "예" ,
"ZZ" , "예" ,
"알파벳" , "예" ,
"12월" , "예" ,
"WSA" , "예" ,
"RSS" , "예" ,
"DVC" , "예" ,
"SFS" , "예" ,
"AAZ" , "예" ,
"짜" , "예" ,
"TT" , "예" ,
"아니요"
)
)
) ;
Re: IF 문을 최적화하고 있나요?LOC() 함수를 사용해 보겠습니다.
if(N 행(Loc({"A","B","C",......................},MeasurementGroup))>0,"예","NO" )