Matrix에서 If Then을 사용하십시오.<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />안녕하세요 여러분,
악기를 재조정하여 데이터에 큰 변화가 주기적으로 나타나는 악기 데이터가 있습니다. 다음을 수행하는 새 변수를 만들려고합니다. If (data - 데이터 [i-1]> 4) 또는 (데이터 - 데이터 [i-1] <-4), 그 다음에 adj_data = adj_data [i-1], 그 밖의 데이터 = adj_data + (데이터 - 데이터 [i-1]); 기본적으로 현재 데이터 값이 이전 값을 4 또는 -4만큼 초과하는 경우 새 조정 값을 이전 조정 값과 같게 만들고 그렇지 않으면 현재 및 이전 데이터 값 간의 차이를 조정 된 값에 추가합니다.
데이터를 행렬로 읽어 들이고 누락 된 데이터를 제거하는 방법을 알아 냈습니다. 그러나 행렬에서 위에 설명한 수학을 완료하는 방법을 모르겠습니다. 이 작업을 수행하는 방법에 대한 제안은 감사하겠습니다.
로그 지우기();
기본 이름은 여기에 있습니다 (1);
dt = 새 테이블 ( "누락 된 데이터 조정",
행 추가 (24),
저장시 파일 압축 (1),
새 열 ( "날짜",
숫자,
마디 없는,
형식 ( "m / d / y", 19),
입력 형식 ( "m / d / y"),
값 설정 (
[3447619200, 3447705600, 3447792000, 3447878400, 3447964800,
3448051200, 3448137600, 3448224000, 3448310400, 3448396800,
3448483200, 3448569600, 3448656000, 3448742400, 3448828800,
3448915200, 3449001600, 3449088000, 3449174400, 3449260800,
3449347200, 3449433600, 3449520000, 3449606400]
)
),
새 열 ( "Data1",
숫자,
마디 없는,
형식 ( "최고", 12),
값 설정 (
[11, 13, 50, 15,., 17, 18, -20, 20, .21, 22, 24, 25, 23,
.,., 25, 26, 27, 28]
)
),
새 열 ( "Adj Data1",
숫자,
마디 없는,
형식 ( "최고", 12),
값 설정 (
[0, 2, ..., 4, 6, 7, 9, 10, 11, 13, 14, 12 ....
15, 16, 17]
)
)
);
// 관련 데이터를 행렬에 넣습니다.
date_time = : 이름 ( "날짜") << 값 가져 오기;
data = : Name ( "Data1") << Get Values;
// 누락되지 않은 데이터 만 포함하는 행을 결정합니다.
row_list = dt << 행을 얻습니다. 여기서 (
과(
!가 누락되었습니다 (: 데이터 1),
포함 (데이터, : 데이터 1),
포함 (data, : Data1) == 포함 (date_time, Format (: Date, "mdy"))
)
);
// row_list (현재 행렬 [])를리스트 {}로 변환합니다.
목록 (row_list = 목록으로 (row_list));
date_time = date_time [Loc (!가 누락되었습니다 (데이터))];
data = data [Loc (! Is Missing (data))];
다시 : 사용 매트릭스에 다음미안 제프 나는 내가 성취하려는 것을 더 분명하게 알지 못했습니다. JSL 코드와 열 수식에 대해 이야기하면서 혼란 스러울 수도 있습니다.
첨부 된 데이터 파일은 adj_data1에있는 "desired"출력과 New Adj Data에서 제공 한 열 수식의 출력을 보여줍니다. Data1이 누락 된 경우 New Adj Data 열에 누락 된 데이터가 표시되도록하는 경우에도 new Adj Data 열에 다음과 같은 경우 이전 New Adj Data 값이 삽입됩니다.
: adj_data1 열을 만들려면 다음과 같이 열 수식을 조정하려고했습니다.
- 데이터 1이 누락 된 경우 이전 새 Adj Data 값이 지역 변수에 배치되고 2 단계에서 필요할 때까지 이월됩니다
- 현재 : data1 값이 누락되지 않고 이전 값 : data1 값이 누락 된 경우 새 Adj 데이터가 로컬 변수의 현재 값 목록으로 설정됩니다.
내가 끊기고있는 곳은 1 단계에서 New Adj Data 값을 로컬 변수에 추가 한 다음 2 단계에서 그 값을 검색 / 사용하는 것입니다.
아마 내가 필요로하는 것보다 더 복잡하게 만들고 있습니다. 그리고 이것을 쉽게 수행 할 수있는 방법이 있습니다. 나는 확실히 당신이 제공 할 수있는 도움을 주시면 감사하겠습니다. 솔루션에서 열 수식에 로컬 변수를 사용하지 않는 경우 위에서 설명한 것처럼 로컬 변수를 사용하는 방법에 대한 간단한 예제를 제공하거나 기존의 JMP 데이터 집합을 가리킬 수 있다면 감사하겠습니다. 열 수식에서 로컬 변수를 사용합니다. 열 수식에서 로컬 변수를 성공적으로 사용할 수있는 것 같아 매우 유용합니다. 다시 한번 감사드립니다.
다시 : 사용 매트릭스에 다음열 수식에서 로컬 변수를 사용하여 다음 JSL 코드를 수행하는 방법에 대한 지침이 있습니까?
JSL 프로그램에서 변수를 정의하고 열 수식에서 변수를 사용하려면 전역 변수 여야합니다. 변수 앞에 "::"을 붙이면 열 수식에 사용할 수 있습니다. 예를 들어 :: g_one_variable
다시 : 사용 매트릭스에 다음안녕하세요 테라 삔,
내가 보낸 JSL을 기반으로하고 싶은 일을 해독하는 데 어려움을 겪고 있습니다.
위의 데이터 테이블은 수식에 로컬 변수가 없어도 data1의 누락 된 값을 처리합니다. ! Is Missing (: Data1-Lag (: Data1,1))이있는 현재 행이나 이전 행에 Data1이 누락되었는지 확인합니다. 둘 중 하나라도 빠진 경우 차이가 누락됩니다.
New Adj Data 칼럼의 수식은 다음과 같습니다.
만약(
Row () == 1, 0,
Abs (: Data1 - Lag (: Data1, 1))> 4 | Missing (: Data1 - Lag (: Data1, 1)), Lag (: 새 Adj 데이터, 1),
래그 (: 새 조정 데이터, 1) + (: 데이터 1 - 지연 (: 데이터 1, 1))
)
이것이 필요한 것이 아니라면 샘플 데이터 테이블을 게시하고이 새로운 수식 기반 열의 값을 각 행에 정확히 표시 할 수있는 설명을 게시 할 수 있습니까? 그것은 내가 당신이 찾고있는 것을 정확히 이해하는 데 도움이 될 것입니다.
감사!
- 제프
다시 : 사용 매트릭스에 다음열 수식의 예제와 행렬 예제를 제공 해준 Jeff에게 감사드립니다. 상상할 수 있듯이 제 경우는 좀 더 복잡하고 데이터가 누락 된 행을 건너 뛰고 이전의 조정 된 데이터 값을 전달해야합니다. 다음 JSL 코드를 사용하여이 작업을 수행 할 수 있지만 열 수식에서 로컬 변수를 사용하는 방법을 알 수 없습니다. 열 수식에서 로컬 변수를 사용하여 다음 JSL 코드를 수행하는 방법에 대한 지침이 있습니까? 감사.
로그 지우기();
lag_adj_data = 0;
: adj_data1 [1] = 0;
For (i = 2, i <= N 행 (dt1), i ++,
If (Abs (: data1 - : data1 [i-1])> 4 인 경우,
: adj_data1 = : adj_data1 [i-1],
: adj_data1 = : adj_data1 [i - 1] + (: data1 - : 데이터 1 [i-1])
);
만약 (Is Missing (: data1 ) &! 실종 (: adj_data1 [i-1]),
lag_adj_data = : adj_data1 [i-1];
);
(누락 된 (: data1 [i-1]) &! 누락 된 경우 (: data1 ),
: adj_data1 = lag_adj_data
);
);
다시 : 사용 매트릭스에 다음어제 내가 말했듯이, 열 수식은 일반적으로 꽤 효율적입니다.
첨부 된 데이터 표를 참조하십시오. New Adj Data 열은 찾고자하는 것과 가까운 수식을 가지고 있습니다.
이것은 여전히 작은 데이터 세트이지만 여전히 많은 행에서 잘 수행되어야합니다.
- 제프
다시 : 사용 매트릭스에 다음행렬은 일반 변수와 비슷하게 작동합니다. 스칼라 - 대부분의 산술 및 비교 연산자.
예 :
엑스 = [ 1 , 2 , 삼 , 4 ] ;
와이 = [ 2 , 1 , 2 , 5 ] ;
엑스 > 와이 ;
/ * :
[0, 1, 1, 0]
보시다시피 이제 y 행렬이 x 행렬보다 큰 위치를 나타내는 행렬을 얻었습니다.
그러나 하나의 행렬을 다른 행렬과 비교하는 것에 국한되지 않습니다. 스칼라와도 비교할 수 있습니다.
엑스 > 2 ;
/ * :
[0, 0, 1, 1]
한 번에 전체 행렬에 대해 산술 연산을 수행 할 수도 있습니다.
엑스 - 4 ;
/ * :
[-3, -2, -1, 0]
행렬에 색인을 생성하여 행렬의 일부만을 얻을 수 있으므로 행렬의 한 부분을 다른 행과 쉽게 비교할 수 있습니다.
와이 [ 2 :: 함락하다 ( 와이 )] > 와이 [ 1 :: 함락하다 ( 와이 ) - 1 ] ;
/ * :
[0, 1, 1]
또한 행렬에 함수를 사용할 수 있습니다.
지 = [ 1 , 5 , 1 , - 6 ] ;
복근 ( 지 [ 2 :: 함락하다 ( 지 )] - 엑스 [ 1 :: 함락하다 ( 지 ) - 1 ]) > 4 ;
/ * :
[0, 0, 1]
이 모든 것을 결합하면 매트릭스로 원하는 것을 할 수 있습니다.
그러나 데이터 테이블의 열 수식은보다 간단하고 효율적 일 수 있습니다. 나는 내일의 추수 감사절을 그 예와 함께하겠다.
- 제프
다시 : 사용 매트릭스에 다음제안에 대해 PMroz에게 감사드립니다. 이것은 분명히 테이블의 데이터에서 작동하지만 테이블에는 약 50 만 개의 레코드가 있으며 매트릭스에서 조정하는 것이 데이터 테이블을 직접 처리하는 것보다 빠르다고 생각했습니다. 행렬에 조건부 명령을 사용하는 구문에 대한 제안 사항이 있습니까? 다양한 JMP "서적"을 살펴 보았지만 구문을 명확하게 지정하지는 못했습니다. 감사.
다시 : 사용 매트릭스에 다음나는 이것이 당신이 원하는 것을 할 것이라고 생각합니다. 너의 식탁에서 직접 일하고있어.
dt = 데이터 테이블 ( "누락 된 데이터 조정" ) ;
...에 대한 ( 나는 = 2 , 나는 <= 안주 ( dt ) , 나는 ++,
디 = 기둥 ( dt , "데이터 1" ) [ 나는 ] ;
dim1 = 기둥 ( dt , "데이터 1" ) [ 나는 - 1 ] ;
아디 어 = 기둥 ( dt , "Adj Data1" ) [ 나는 ] ;
만약 ( ! 누락 ( 디 ) & ! 누락 ( dim1 ) ,
만약 ( 복근 ( 디 - dim1 ) > 4 ,
// //
기둥 ( dt , "Adj Data1" ) [ 나는 ] = 기둥 ( dt , "Adj Data1" ) [ 나는 - 1 ] ;
,
// else
만약 ( ! 누락 ( 아디 어 ) ,
기둥 ( dt , "데이터 1" ) [ 나는 ] = 아디 어 + ( 디 - dim1 ) ;
) ;
) ;
) ;
) ;