정규식 선택을 기반으로 열 쌓기<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />공통 접두사가 있고 다른 번호나 접미사로 끝나는 수백 개의 열을 지속적으로 쌓고 있습니다.
내가하고 싶은 것은 다음과 같은 스크립트를 작성하는 것입니다.
- 정규식 패턴(예: "BLUE_CARS_*_\d{1,2}", "HOMES_(SINGLE|DOUBLE)_WIDE" 등)을 기반으로 열을 찾습니다.
- 해당 열을 선택하십시오.
- 열 쌓기(및 새 데이터시트에 배치)
평생 동안 열 선택과 함께 정규식을 사용하는 방법을 찾을 수 없습니다(또는 Google에서 제대로 검색).
데이터 유형별로 열을 선택하는 것을 고려했지만 해당 데이터 유형을 공유하는 다른 열이 있습니다.
훨씬 더 유연한 것을 원한다고 언급하십시오.
어떤 제안이나 코드 스니펫이라도 대단히 감사하겠습니다. 미리 감사드립니다.
Re: 정규식 선택에 따라 열을 쌓습니다.show() 및 진행 상황에 대한 세부 정보를 통해 실제 열이 아닌 열 이름을 사용하도록 지시하고 있음을 알 수 있었습니다. nc = dt << 열 이름 가져오기;< /code>가 처음에 사용되었습니다. 그래서 대신에
cname = nc<I> << 이름 얻기;</I>
우리는 필요했다
cname = 열(nc<I> ) << 이름 가져오기;</I>
기본적으로 get column names()는 열 목록이 아닌 문자열을 반환한다고 생각합니다. 아, 이제 예상대로 작동하고 있습니다.
도와 주셔서 감사합니다!
Re: 정규식 선택에 따라 열을 쌓습니다.show( i, nc );
두 변수의 현재 값을 표시합니다.루프에서 "i++" 뒤에 삽입하고 증가시킵니다.nc는 열 이름 목록(중괄호)으로 *표시되어야 합니다*.<<
show 명령으로 실행한 후 로그를 확인하고 무엇이 잘못되었는지 확인합니다.
JMP의 스크립터블 개체는 메시지를 이해하는 개체입니다.변수는 스크립팅 가능한 개체가 아닌 행렬, 목록 또는 숫자를 포함하거나 스크립팅 가능한 개체인 디스플레이 상자, 데이터 테이블 또는 열을 포함할 수 있습니다.다른 유형도 많이 있습니다. 일부는 스크립팅할 수 있고 일부는 그렇지 않습니다.
내 추측으로는 데이터 테이블이 추가 기능에 의해 명시적으로 선택되지 않고 거기에서 오류가 연속적으로 발생한다는 것입니다.이 전에 다른 show()가 필요할 수 있습니다.
크레이지
Re: 정규식 선택에 따라 열을 쌓습니다.이 코드를 JMP 추가 기능(버튼 포함)으로 변환하는 데 문제가 있습니다. 코드는 스크립트 편집기에서 실행할 때 잘 작동하지만 추가 기능으로 실행하려고 하면 다음과 같은 불만이 표시됩니다.
Send는 'Send' 액세스 또는 평가에서 스크립터블 개체를 예상합니다.<I> << /*###*/이름 가져오기/*###*/</I>
For( i = 1, i <= N Items( nc ), i++, cname = nc<I> << /*###*/get name/*###*/; model = nc<I> << get modeling type;</I></I>
첫 번째 줄을 읽기로 변경하면, cname = dt << get name(nc<I> );</I> 다음 줄에 대해 불평하기 위해 이동합니다.
그런 다음 이 줄을 읽기로 변경합니다. model = dt << 모델링 유형 가져오기(nc<I> );</I> 그리고 다음은 sort() 함수로 이동하여 오류를 변경합니다.
<CODE> Send는 'Send'의 액세스 또는 평가에서 스크립터블 개체를 예상합니다. <<SPAN style="font-family: arial, helvetica, sans-serif;"> 그리고 코드는 읽습니다</SPAN>
transposed = transposed << /*###*/ sort(replace table, by("Row 1"), order(Descending))/*###*/;<BR /><SPAN style="font-family: arial, helvetica, sans-serif;">이 문제를 해결하고 이식 가능하게 만드는 방법에 대한 아이디어가 있습니까(편집기 및 추가 기능 모두에서 문제 없이 작동)? 이것이 얼마나 불분명하게 보일 수 있는지에 대해 사과드립니다.</SPAN>
(와우, 메시지 미리보기 버튼이 왜 없지...).
Re: 정규식 선택에 따라 열을 쌓습니다.그리고 예, JSL에 몇 가지 표시 기능을 남겨두었습니다. 유용한 디버깅 보조 도구이기 때문입니다.로그가 오래된 질문에 대한 이전 답변으로 어수선하지 않도록 완료되면 꺼내십시오.
크레이지
Re: 정규식 선택에 따라 열을 쌓습니다.환영합니다, 감사합니다.가능할 때마다 명시적 데이터 테이블을 사용하십시오.
dtstacked = dt << 스택(
열( icols ),
소스 레이블 열( "레이블" ),
누적 데이터 열( "데이터" )
);
dtstacked는 dt<
Re: 정규식 선택에 따라 열을 쌓습니다.엄청난! 그게 바로 내가 필요했던 것입니다.
나는 여전히 jsl 구문과 모든 것을 '표시'해야 할 필요성에 익숙해지고 있습니다.
그리고 Regex() 함수의 경우 일반 열 함수 이외의 함수를 사용하는 방법에 대한 문서를 찾을 수 없으므로 동일한 방식으로 작동하는 것이 편리합니다. 이것은 많은 면에서 유용할 것입니다.
관련, 나머지 스크립트에서 사용하기 위해 새 테이블/창을 선택했는지 어떻게 확인합니까?
또한 코드를 엉망으로 만들었기 때문에 번역을 꺼야 했습니다.
감사합니다!
Re: 정규식 선택에 따라 열을 쌓습니다.JSL을 올바르게 보려면 화면 상단의 번역 확인란을 꺼야 할 수 있습니다.
Re: 정규식 선택에 따라 열을 쌓습니다.이 같은.
dt = Open( "$sample_data/big class.jmp" );
allCols = dt << getcolumnnames;
표시( allCols ); // 문자열이 아닌 이름입니다.
acols = {}; // 이름에 "a"가 포함된 열
아이콘 = {}; // 이름에 "i"가 포함된 열
n = N 항목( allCols );
For(k = 1, k <= n, k++,
cname = allCols << getname; // 정규식에 적합한 문자열입니다.
표시( cname );
If( !Is Missing( Regex( cname, "a" ) ),
에 삽입( acols, allCols) // 이름 유지
);
If( !Is Missing( Regex( cname, "i" ) ),
에 삽입( icols, allCols) // 이름 유지
);
);
쇼( 아콜스, 아이콜스 ); // {:이름, :나이} 및 {:높이, :체중}
dt << 스택(
열( icols ),
소스 레이블 열( "레이블" ),
누적 데이터 열( "데이터" )
);
