다음 항목까지 빈 행을 바꾸고 계속하는 방법은 무엇입니까?친애하는 JMP 커뮤니티 여러분,
(W10, 64비트, JMP 15.0 Pro)
Excel 파일에서 가져온 대규모 데이터 테이블이 있고 이전 목록의 항목으로 채워진 열의 빈 행이 필요합니다. 아래와 같이 왼쪽 열에서 오른쪽 열로 이동하도록 JSL을 작성하려고 합니다.

코딩하기가 꽤 쉬워야 한다고 생각하는데, 이전 제품이 끝나면 올바르게 중지하고 새 제품부터 시작하는 것이 문제입니다. 나는 올바르게 반복해서는 안됩니다.
어떤 제안이나 도움이라도 환영합니다.
감사해요!,
DS
Re: 다음 항목까지 빈 행을 교체하고 계속하는 방법은 무엇입니까?JMP 시스템 엔지니어 몇 명이 이 문제를 놓고 고민 중이었고 이것이 최선의 해결책이었습니다. @Brady Brady의 이 최종 버전은 우리가 시작한 간단한 공식보다 더 빠르고 강력하게 진행됩니다. 나는 수년 동안 그것을 사용해 왔으며 여러 상황에서 잘 작동한다는 것을 알았습니다. 효과가 있어서 다행입니다!
Re: 다음 항목까지 빈 행을 교체하고 계속하는 방법은 무엇입니까?안녕 @바이런_JMP ,
이전 게시물의 스크립팅 조정 코드에 감사드립니다. 이것은 열의 첫 번째 항목이 누락되었는지 확인하고, 그렇다면 내가 가져온 몇 가지 가져오기에서 발생하는 것을 발견한 다음 기존 항목으로 대체하기 때문에 내 솔루션보다 낫습니다. 나는 vec 및 행렬 정보를 사용하여 특정 항목을 검색하는 방법과 같은 일부 스크립팅 솔루션에 경험이 없습니다. 어쨌든, 특정 문제에 적용했더니 문제 없이 해결되었습니다.
감사해요!,
DS
Re: 다음 항목까지 빈 행을 교체하고 계속하는 방법은 무엇입니까?동일한 작업을 수행하는 JSL 함수나 메시지를 찾을 수 없습니다. 나는 그것이 존재한다고 생각하지 않습니다. Main Menu() 기능이 있지만 이 명령은 기본 JMP 메뉴가 아닌 선택한 열과 연결됩니다.
Re: 다음 항목까지 빈 행을 교체하고 계속하는 방법은 무엇입니까?대화형 솔루션 뒤에 있는 JSL 코드를 모릅니다. 거기에는 여러 가지 옵션이 있으므로 괜찮습니다.
일부 스크립트와 마찬가지로 대화형 솔루션이 여러 열에 동시에 적용될 수 있다는 것을 알고 있습니다. 모든 열을 선택하고 마우스 오른쪽 버튼을 클릭한 후 채우기 옵션을 선택하세요.
Re: 다음 항목까지 빈 행을 교체하고 계속하는 방법은 무엇입니까?솔루션을 스크립팅하는 경우 도움이 될 몇 가지 JSL 참고 사항은 다음과 같습니다.
//better version of Fill in Missing Cells, by Brady Brady
Names Default To Here( 1 );
dt = Current Data Table();
dtcollist = dt << get column names;
dlg = Dialog( "Select Column", vlist( selection = List Box( dtcollist ), button( "OK" ) ) );
Remove From( dlg, 2 );
Eval List( dlg );
dtMat = (dt << Get All Columns As Matrix);
For( i = 1, i <= N Items( selection ), i++,
colNum = Contains( dtColList, Name Expr( selection[i] ) );
vMat = dtMat[0, colNum];
mis = Loc( Is Missing( vMat ) );
If( N Row( mis ),
col = column(selection[i]);
If( mis[1] == 1,
col[1] = col[(Loc( vMat ))[1]]
);
For( j = if(mis[1]==1, 2, 1), j <= N Row( mis ), j++,
col[mis[j]] = col[mis[j] - 1]
);
);
);
///////////////////////////// short tweak for scripting
dtcollist=dtnr<<GET column="" names=""></GET>
Re: 다음 항목까지 빈 행을 교체하고 계속하는 방법은 무엇입니까?정말 환상적인 추가 기능이 있습니다. 데이터 테이블 도구
이 작업을 수행하는 보간 도구가 있으며 그 외에도 훨씬 더 많은 기능이 있습니다. 게다가 큰 테이블의 수식보다 훨씬 빠릅니다.

Re: 다음 항목까지 빈 행을 교체하고 계속하는 방법은 무엇입니까?안녕 @Dan_Obermiller ,
알려주셔서 감사합니다. 끝까지 채우기, 행까지 채우기 또는 채우기 패턴을 본 적이 있지만 이전에는 그렇지 않았습니다.
이를 수행하는 JSL 코드를 알고 있습니까? 내가 묻는 이유는 이 모든 것을 JSL 코드로 원하기 때문입니다. 왜냐하면 큰 데이터 테이블을 구축하기 위해 여러 파일을 읽고 프로세스를 자동화하여 최종 사용자가 스크립트를 실행하면 누락된 값 없이 테이블이 나오도록 해야 하기 때문입니다. 제품. 내 솔루션보다 더 빠르고 우아하다면 코드를 수정하여 스크립트에 삽입하고 싶습니다.
감사해요!,
DS
Re: 다음 항목까지 빈 행을 교체하고 계속하는 방법은 무엇입니까?작업을 수행하는 스크립트가 있지만 대화형 솔루션도 있습니다. 모든 행이 선택되도록 교체가 필요한 열을 선택합니다. 해당 열의 데이터 그리드를 마우스 오른쪽 버튼으로 클릭하고 채우기 > 누락된 값을 이전 값으로 바꾸기를 선택합니다.

Re: 다음 항목까지 빈 행을 교체하고 계속하는 방법은 무엇입니까?안녕 @Thierry_S ,
귀하의 수식은 아마도 작동할 것입니다. 그러나 제가 가지고 있는 특정 테이블에서는 이 공식이 이상적으로 작동하도록 할 수 없습니다. 내가 발견한 한 가지 문제는 때때로 제품이 변경되는 여러 행이 차례로 있고 지연이 작동하지 않는다는 것입니다.
나는 완벽하게 작동하는 이 코드를 생각해냈습니다. 매우 우아하지는 않지만 작동합니다!
당신의 도움을 주셔서 감사합니다!,
DS
RowReplace = dt << Get Rows Where( :Product != "" );
RowEnd = RowReplace;
Remove From( RowEnd, RowEnd[1] );
Insert Into( RowEnd, N Rows( dt ) );
For( l = 1, l <= N Items( RowReplace ), l++,
For( irow = 2, irow <= RowEnd[l], irow++,
If( Is Missing( :Product[irow] ) == 1,
:Product[irow] = :Product[RowReplace[l]],
)
)
);
Re: 다음 항목까지 빈 행을 교체하고 계속하는 방법은 무엇입니까?안녕하세요, 여기에 트릭을 적용해야 하는 간단한 공식이 있습니다.
If( Is Missing( :Column 1 ),
Lag( :Column 2, 1 ),
:Column 1
)
최상의,
TS