조건문, 작업 및 열 삭제<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />여러분, 안녕하세요,
JSL 스크립트에 문제가 있으며 이에 대한 답을 찾기 위해 설명서, 책 및 사용자 포럼을 조사했습니다.
JSL에서 조건문이 포함된 스크립트를 작성했는데 "결과" 중 하나는 행 삭제와 같은 작업을 수행하는 것입니다.이것은 조건문에서 수행할 수 있습니까?
이 샘플 코드를 사용해 보겠습니다.
NE3=3;
NE4=5;
/* 이 변수들은 다른 값을 가질 수 있습니다. */
(NE3==NE4인 경우
NewNum = NE3,
NewNum = 인덱스(NE3, NE4)
);
만약 (NewNum == 0,
인쇄("삭제 없음"),
현재 데이터 테이블() << 열 삭제(NewNum)
);
보거나 추측할 수 있듯이 열을 삭제할 수 없습니다.더 중요한 것은 범위 또는 단일 값을 생성하기를 원했기 때문에 첫 번째 조건문을 사용했다는 것입니다.
그러나 JMP는 존재하지 않는 항목(일명 열 0)을 삭제할 수 없으므로 0을 값으로 사용하여 무엇을 해야 하는지 잘 모르겠습니다.어떤 제안이라도 대단히 감사하겠습니다!
많은 감사,
케이
Re: 조건문, 작업 및 열 삭제Index()는 열 벡터를 제공하므로 이중 괄호입니다. 행렬을 전치시키십시오.
DC_List1 = 목록으로 ( 바꾸어 놓다 ( 색인 ( DC1 , DC2 ))) ;
DC_List2 = 목록으로 ( 바꾸어 놓다 ( 색인 ( DC3 , DC4 ))) ;
Re: 조건문, 작업 및 열 삭제나는 조건문과 삭제 열로 더 많은 작업을 해왔습니다.나는 이것으로 좀 더 놀았고 단일 열 이름이나 인덱스 또는 열 이름이나 인덱스 목록을 사용하는 열 삭제에 대해 무엇을 의미하는지 알 수 있습니다.그러나 주어진 코드를 실행하고 열 삭제 작업을 분리하고 인덱스 목록을 만든 후에도 열에 대한 전체 인덱스를 삭제할 수 없습니다.예를 들어:
dt에 13개의 열이 있고 처음 3개(1-3)와 마지막 2개(12-13)를 삭제하고 싶다고 가정해 보겠습니다.
DC1 = 1 ;
DC2 = 삼 ;
DC3 = 12 ;
DC4 = 13 ;
DC_List1 = 목록으로 ( 색인 ( DC1 , DC2 )) ;
DC_List2 = 목록으로 ( 색인 ( DC3 , DC4 )) ;
DC_List3 = DC_List1 || DC_List2 ;
현재 데이터 테이블 () << 열 삭제 ( dc_list3 ) ; /* 첫 번째 변수의 값인 첫 번째 열 b/c만 삭제합니다. */
/* 생성된 목록 중 하나만 삭제해도 여전히 실패합니다. */
현재 데이터 테이블 () << 열 삭제 ( dc_list1 ) ; /* 첫 번째 변수의 값인 첫 번째 열 b/c만 삭제합니다. */
보여 주다 ( dc_list1 ) ; /*dc_list1 = {{1, 2, 3}}; */
보여 주다 ( dc_list3 ) ; /* dc_list3 = {{1, 2, 3}, {12, 13}}; */
"목록으로" 함수가 행렬을 목록으로 변환한다는 것을 알고 있지만 이중 중괄호를 제공하는 이유를 이해하지 못합니다.나는 그것이 이것을 위해 내 코드를 던지고 있다고 생각합니다.수많은 조합을 시도했지만 소용이 없었습니다.어떤 생각/제안/도움이 있습니까?도움을 주셔서 감사합니다!
Re: 조건문, 작업 및 열 삭제비판은 전혀!나는 그것을 요청했다.저는 이것이 저(및 JMP 커뮤니티)가 포인터를 사용하는 데 도움이 되고 더 세부적인 사항을 처리하는 데 도움이 된다고 생각합니다.나는 많은 것을 배웠고, 시간을 내어 내 질문에 답하고 중요한 세부 사항을 가르쳐 주셔서 감사합니다.
Re: 조건문, 작업 및 열 삭제조건문에서 하나의 명령문 또는 1000개의 명령문을 실행할 수 있습니다.내 코드에서 볼 수 있듯이 조건문에서 실행 가능한 명령문을 수행할 수 있습니다.
구문이 몇 가지 면에서 잘못되었습니다.
(NE3==NE4인 경우
NewNum = NE3,
NewNum = 인덱스(NE3, NE4)
);
이 IF 문의 결과는 newnum이 숫자 또는 행렬이라는 것입니다.이것은 괜찮지만 newnum이 두 가지 다른 유형의 값(숫자와 행렬)에 사용되기 때문에 약간 혼란스러울 수 있습니다.그러나 이것은 아래와 같이 다음 IF 문에 문제를 일으킬 것입니다.
만약 (NewNum == 0,
인쇄("삭제 없음"),
현재 데이터 테이블() << 열 삭제(NewNum)
);
문제는 바로 여기에 있습니다.Newnum은 NE3과 NE4가 0인 경우에만 0이 됩니다. 이전 IF 문에서 행렬을 가져오면(NE3이 NE4와 같지 않을 때) NewNum을 0과 비교하는 것은 의미가 없습니다.마지막으로 열 삭제 문은 newnum이 정수 또는 목록인 경우에만 작동합니다.따라서 AS LIST 문은 필수적입니다.
이것이 도움이 되기를 바랍니다. 이것은 건설적인 비판을 위한 것입니다.
JSL, 특히 IF 문을 처음 배울 때 많은 어려움이 있었습니다!명령문의 THEN 및 ELSE 부분이 어디에 있는지 보여주는 주석을 포함하는 스타일을 개발했습니다.예를 들어:
만약에 ( time_choice == 1 ,
// 그 다음에
date_clause = "현재의" ;
사례_목록 = { 1 , 2 , 삼 , 4 } ;
// 또 다른
,
date_clause = "누적" ;
사례_목록 = { 1 , 2 , 삼 , 4 , 5 , 6 , 7 , 8 , 9 } ;
) ;
Re: 조건문, 작업 및 열 삭제당신의 도움을 주셔서 감사합니다!정말 감사합니다.조건문에서 핵심적인 한 가지 질문: 조건문에서 실행 가능한(열, 행, dt 삭제 및/또는 추가) 작업을 수행할 수 있습니까?코드가 지정된 열을 삭제하지 않은 이유를 이해할 수 없습니다.내 예제 문에서 as list 함수가 누락되었기 때문입니까? 아니면 내 구문이 꺼져 있었습니까?저는 여전히 JSL에서 조건문의 모든 기능을 배우고 있으며 일부 표현식을 함께 "붙이기" 위해 세미콜론을 사용했다는 것을 알 수 있습니다.다시 한번 감사합니다!
Re: 조건문, 작업 및 열 삭제이것은 약간 까다롭습니다.열 삭제 단일 열 이름이나 인덱스를 취하거나 목록 열 이름 또는 인덱스.이 프로그램은 트릭을 수행합니다.참고 목록으로 행렬을 목록으로 변환하는 함수:
NE3 = 삼 ;
NE4 = 5 ;
/* 이 변수들은 다른 값을 가질 수 있습니다. */
dt = 현재 데이터 테이블 () ;
체크 안함 = ncols ( dt ) ;
만약에 ( ne3 > 0 & ne3 <= 체크 안함 & 네4 > 0 & 네4 <= 체크 안함 ,
만약에 ( NE3 == NE4 ,
dt << 열 삭제 ( ne3 ) ;
,
new_list = 목록으로 ( 색인 ( NE3 , NE4 )) ;
dt << 열 삭제 ( new_list ) ;
) ;
) ;