열의 누적 합계 만들기<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />다른 열(열 이름을 통해 문자열로 참조해야 할 수 있음)의 누계인 JMP 테이블에 열을 생성하는 방법이 궁금합니다. 즉, 다음 데이터가 포함된 열이 있는 경우입니다.
1
2
삼
4
5
내용이 다음과 같이 작동하는 수식이 있는 열을 만들고 싶습니다.
1
삼
6
10
15
현재 나는 이 루프를 가지고 있는데, 열 이름 목록에서 작업하여 누계를 취합니다.
For(i = 2, i <= numCols, i++,
colName = colNames ;
col = New Column("누적 " || colName,
수식(합계(j = 1, 행(), 열로(ColName)))
);
);
이것은 작동하는 것처럼 보이지만 매우 느리고 여러 열을 만들면 모두 동일한 데이터로 끝납니다. 가장 좋은 방법은 무엇입니까?
Re: 열의 누적 합계 만들기Btw, colNames 목록에 문자열 대신 이름이 포함된 경우 이 접근 방식은 구문 분석된 문자열과 동일한 결과를 제공하는 것 같습니다.
colNames = dt << 열 이름 가져오기 ( ) ; // "문자열" 옵션 없이!
numCols = N개 항목 ( colNames ) ;
을 위한 ( 나 = 1 , 나 <= numCols , 나 ++,
colName = colNames [ 나 ] ;
새이름 = "누적" || ( colName << 이름을 얻다 ) ;
안부 = 새 열 ( 새 이름 , 숫자 , 마디 없는 ,
공식 ( 평가 ( 대리자 (
만료 ( 요약 ( 제이 = 1 , 열 () , 트리플 엑스 [ 제이 ])) ,
만료 ( 트리플 엑스 ) , colNames [ 나 ]
)))
) ;
) ;
Re: 열의 누적 합계 만들기예, 열 이름이 변경되지 않는 한 작동합니다.
이 코드는 두 접근 방식의 차이점을 보여줍니다. 못생긴 문자열 메서드는 수식을 특정 열에 하드 코딩합니다. 두 번째 방법은 특정 이름(유용할 수 있음)이 있는 열을 찾습니다.
// 예시 테이블
dt = 새 테이블 ( "시험" ,
행 추가 ( 4 ) ,
새 열 ( "콜1" , 숫자 , 값 설정 ( [ 1 , 2 , 삼 , 4 ] ) )
) ;
// 구문 분석된 문자열로 수식 추가
colNames = dt << 열 이름 가져오기 ( 끈 ) ;
numCols = N개 항목 ( colNames ) ;
을 위한 ( 나 = 1 , 나 <= numCols , 나 ++,
colName = colNames [ 나 ] ;
안부 = 새 열 ( "누적" || colName , 숫자 ) ;
평가 (
구문 분석 (
평가 삽입 (
"col<< Set Formula(Summation(j = 1, row(), ^(ColName)^))"
)
)
) ;
) ;
// 표현식을 대체하여 수식 추가
을 위한 ( 나 = 1 , 나 <= numCols , 나 ++,
colName = colNames [ 나 ] ;
새 이름 = "누적" || colName ;
안부 = 새 열 ( 새이름 ,
숫자 ,
마디 없는 ,
공식 (
평가 (
대리자 (
만료 (
요약 ( 제이 = 1 , 열 () , 열로 ( 트리플 엑스 )[ 제이 ] )
) ,
만료 ( 트리플 엑스 ) , colName
)
)
)
) ;
) ;
기다리다 ( 1 ) ;
// 열 이름과 값을 변경하고 수식이 어떻게 작동하는지 살펴봅니다.
열 ( 1 ) << 이름 설정 ( "새 이름" ) ;
열 ( 1 )[ 1 ] = 100 ;
기다리다 ( 2 ) ;
// 원래 열과 같은 이름으로 새 열을 추가합니다.
dt << 새 열 ( "콜1" , 숫자 , 값 ( [ 1 , 1 , 1 , 1 ] ) ) ;
dt << 수식 재실행 ;
Re: 열의 누적 합계 만들기JSL이 문자열을 구문 분석하여 원하는 작업을 수행하도록 하는 방법이 있다면 Parse 함수를 사용하지 않고 일반 JSL 코드(결국 문자열일 뿐임)를 사용하여 수행할 수 있는 방법이 없어야 한다고 생각합니다. . 이것이 내가 Substitute를 사용하여 작업하게 된 것입니다.
For(i = 2, i <= numCols, i++,
colName = colNames ;
newName = "누적" || colName;
col = 새 열(newName, 숫자, 연속,
수식(평가(대체(
Expr(합계(j = 1, 행(), 열로(xxx)))),
Expr(xxx), 열 이름
)))
);
);
Re: 열의 누적 합계 만들기Formula()는 인수를 평가하지 않으므로 모든 열 수식은 ColName 및 J 변수를 포함하고 루프가 진행됨에 따라 업데이트됩니다.
이 문제를 해결하는 한 가지 방법은 다음과 같습니다.
을 위한 ( 나 = 2 , 나 <= numCols , 나 ++,
colName = colNames [ 나 ] ;
안부 = 새 열 ( "누적" || colName , 숫자 ) ;
평가 (
구문 분석 (
평가 삽입 (
"col<< Set Formula(Summation(j = 1, row(), ^(ColName)^))"
)
)
) ;
) ;