각 행의 값 계산목록에 열 1-6이 있는 스크립트가 있습니다.
POR이라는 단어가 몇 번 나타나는지, test라는 단어가 몇 번 나타나는지 계산하는 JSL 스크립트를 작성하려고 합니다.
아래 예(마지막 2개 열을 수동으로 수행했습니까?)

포럼을 읽고 DT를 행렬로 변환해야 한다는 것을 이해하지만 작동하게 할 수 없습니다.
감사!
스크립팅Re: 각 행의 값 계산작은 질문입니다. 열당 필요합니까 아니면 전체적으로 필요합니까?
Re: 각 행의 값 계산다음은 카운트를 계산하는 한 가지 방법인 공식입니다.
count = 0;
For( i = 1, i <= 6, i++,
count = Sum( count, Contains( As Column( i ), "test" ) )
);
count;
count = 0;
For( i = 1, i <= 6, i++,
count = Sum( count, Contains( As Column( i ), "POR" ) )
);
count;
Re: 각 행의 값 계산모두를 위한 것이지만 행당입니다.
각 행과 마찬가지로 해당 행 안에 값이 나타난 횟수를 계산한 다음 해당 행의 끝에 "count" 값을 씁니다.
아래 내 예를 참조하십시오. 일부 테이블을 추가했습니다.Re: 각 행의 값 계산또 다른 방법.
행에서 계산할 열 수식
이 수식은 데이터 테이블 첨자를 사용하여 8행에 대한 {"test","POR","test","test"}와 같은 목록을 가져옵니다.
위에서 1::4를 사용했는데, 이는 바로 가기로 Index(1,4)로 바뀝니다. {Column1, Column 2, ...를 사용해야 합니다. 대신 열 N}은 값 중 하나를 "xyzzy"로 변경했을 때 수식을 강제로 다시 실행할 때까지 수식 열의 값이 업데이트되지 않았기 때문입니다. JMP가 열이 다른 열을 참조한다고 말할 수 없으면 재평가되지 않습니다.
이것은 더 잘 작동합니다:
명시적 열 이름이 있는 수식
Re: 각 행의 값 계산아주 멋져...........하지만 난 당신이 큰 심연에 조금 발을 디딘 것 같아요Re: 각 행의 값 계산알아요... 하지만 시간적으로는 의외로 좋은 방법입니다. 흥미롭게도 concat 메서드는 이상하지만 실제로도 빠릅니다.
예를 들어, 이러한 값의 200,000행 x 10열 테이블(첨부된 압축 파일)의 경우 런타임은 다음과 같습니다.

Names Default To Here( 1 );
dt = Current Data Table();
t1 = HP Time();
dt << new column("xx",
formula(sum( design (dt[row(), {:col1, :col2, :col3, :col4, :col5, :col6, :col7, :col8, :col9, :col10}], {"test"})))
);
t2 = hptime();
dt << New Column( "xx",
formula(
count = 0;
dt = :Col1 << get data table;
For( i = 1, i <= 10, i++,
If( Column( dt, i )[Row()] == "test", count ++)
);
count;
)
);
t3 = hptime();
dt << new column("xx", formula(nrow(loc(dt[row(), {:col1, :col2, :col3, :col4, :col5, :col6, :col7, :col8, :col9, :col10}], "test"))));
t4 = hptime();
dt << new column("concat", character, formula(Col1 || :Col2 || :Col3 || :Col4 || :Col5 || :Col6 || :Col7 || :Col8 || :Col9 ||:Col10));
dt << new column("xx", formula(length(:concat)-30));
t5 = hptime();
print(evalinsert("Design matrix method: ^(t2-t1)/1e6^ seconds."));
print(evalinsert("Looping method: ^(t3-t2)/1e6^ seconds."));
print(evalinsert("Nrow(Loc()) method: ^(t4-t3)/1e6^ seconds."));
print(evalinsert("Concat method: ^(t5-t4)/1e6^ seconds."));
Re: 각 행의 값 계산안녕하세요,
또 다른 방법은 모든 열을 1-클릭 변환으로 연결하는 것입니다.
"test"는 POR보다 1자 더 많고 누락된 데이터가 없기 때문에 결과 문자열은 "POR"만 있는 것과 비교하여 포함된 모든 "test"에 대해 1자씩 증가합니다.
연결하려면 관심 있는 열을 선택하고 마우스 오른쪽 버튼을 클릭하여 아래와 같이 선택합니다. 그런 다음 간결함을 위해 열 이름을 "concat"으로 바꿉니다.

아래 예제 테이블에는 6개의 관심 열이 있습니다. 따라서 "POR"만 있는 문자열은 6 * 3 = 18자입니다.
따라서 다음 공식을 사용합니다.
length(:concat) - "test" == n_test의 수의 경우 18입니다.
과
6 - "POR" 번호에 대한 n_test.
일반적으로 n_test의 경우 (length(:concat) - 18)/k를 사용합니다. 여기서 k는 두 구문 간의 문자 차이입니다. 여기서는 k == 1이므로 생략합니다.

건배,
브래디
Re: 각 행의 값 계산난 이게 좋아, 크레이지.
디자인 매트릭스 기능이 이 아이디어를 처리할 수 있을 것 같습니다. 이 공식을 사용하여 "a"의 수를 계산해 보십시오.
dt = :Col1 << get data table;
Sum( Design( dt[Row(), {:Col1, :Col2, :Col3, :Col4, :Col5}], {"a"} ) );
Re: 각 행의 값 계산이봐, 이것은 작동하지 않습니다
예를 들어 이것을 실행하면
| 포르 | 포르 | 포르 | 포르 |
| 포르 | 포르 | 포르 | 포르 |
| 시험 | 포르 | 포르 | 시험 |
| 시험 | 포르 | 포르 | 시험 |
| 포르 | 포르 | 포르 | 포르 |
| 포르 | 포르 | 포르 | 포르 |
| 시험 | 포르 | 포르 | 시험 |
| 시험 | 포르 | 시험 | 시험 |
카운트가 0으로 나옵니다
"테스트"를 실행할 때 예상되는 것은 다음과 같습니다. 0,2,2,0,0,2,3
따라서 출력은 다음과 같습니다.
| 포르 | 포르 | 포르 | 포르 | 0 |
| 포르 | 포르 | 포르 | 포르 | 0 |
| 시험 | 포르 | 포르 | 시험 | 2 |
| 시험 | 포르 | 포르 | 시험 | 2 |
| 포르 | 포르 | 포르 | 포르 | 0 |
| 포르 | 포르 | 포르 | 포르 | 0 |
| 시험 | 포르 | 포르 | 시험 | 2 |
| 시험 | 포르 | 시험 | 시험 | 삼 |