오류: "표현식은 사용 가능한 열 유형에 맞지 않습니다."<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />안녕하세요 여러분,
다음 코드에서는 "표현식은 사용 가능한 열 유형에 맞지 않습니다."라는 오류가 발생하며 수식 평가 중에 이 오류가 발생합니다.
새 열을 추가할 "dt"라는 테이블 내에서 두 개의 열을 빼는 등 새 열을 추가할 때 동일한 테이블을 참조하려고 합니다. 왜 작동하지 않는지 알 수 없습니다.
dt = myTable();
cols = dt << GetColumnNames("String");
//기다려(3);
(c=1, c<=NItems(cols), c++,
If( StartsWith(cols, "HTOL"),
dt << 새 열(cols|| " Δ", 숫자, 연속, 공식( 평가 목록(열(dt,4)) ) );
);
);
감사해요
제프
Re: 오류: "표현식은 사용 가능한 열 유형에 맞지 않습니다."PMroz님, 감사합니다! 나는 어젯밤에 당신과 매우 유사한 말을 사용하여 이 문제를 해결했습니다. 나는 다음과 같은 것을 사용했습니다:
파싱을 사용한 것 같아요 .. eval 을 사용해야 했는지 아닌지 기억이 나지 않습니다. 약 60% 정도는 사용했다고 확신합니다.
누군가 나를 필요로 한다면 이에 답해 주시면 정확한 구문을 찾아보겠습니다.
dt << 새 열( 구문 분석(cols|| " Δ"), 숫자, 연속, 공식(:^cols^ - :데이터 0))
Re: 오류: "표현식은 사용 가능한 열 유형에 맞지 않습니다."@Stephen.pearson과 유사한 기술:
dt = 새 테이블 ( "데모" , 행 추가 ( 삼 ) ,
새 열 ( "데이터 0" , 숫자 , 마디 없는 , 체재 ( "최상의" , 12 ) , 값 설정 ( [ 1 , 2 , 삼 ] ) ) ,
새 열 ( "데이터 100" , 숫자 , 마디 없는 , 체재 ( "최상의" , 12 ) , 값 설정 ( [ 4 , 5 , 6 ] ) ) ,
새 열 ( "데이터 200" , 숫자 , 마디 없는 , 체재 ( "최상의" , 12 ) , 값 설정 ( [ 7 , 8 , 9 ] ) )
) ;
열 = dt << 열 이름 가져오기 ( "끈" ) ;
~을 위한 ( 씨 = 1 , 씨 <= 항목 ( 열 ) , 씨 ++,
만약에 ( 다음으로 시작 ( 대문자 ( 열 [ 씨 ]) , "데이터" ) ,
new_col_expr = 평가 삽입 ( "\[dt << 새 열( 열|| " Δ", 숫자, 연속, 공식(:^cols^ - :데이터 0))]\") ;
평가 ( 분석하다 ( new_col_expr )) ;
) ;
) ;
Re: 오류: "표현식은 사용 가능한 열 유형에 맞지 않습니다."열(dt,c) 와 동일하지 않습니다 :데이터 100 공식에 관한 한.
이 코드가 작동하도록 하는 한 가지 방법은 JSL을 실행하기 전에 평가하는 동적 JSL을 사용하는 것입니다.
// 이것이 올바른 구문인지는 확실하지 않지만 아이디어는 얻을 수 있습니다.
타겟컬럼 = 컬럼(dt,c) <<이름 가져오기("문자열");
//if 절 내부로 들어가는 동적 교체
평가(
구문 분석(
평가 삽입(
"\[
dt << 새 열(cols|| " 델타", 숫자, 연속, 공식(:^TargetColumn^ - :데이터 0 ) );
]\"
) ) );
열 이름에 특수 문자가 있으면 :Name("을 사용해야 할 수도 있습니다. ^대상열^ ") 수식에서. 수식이 안정적으로 평가되지 않으므로 열 이름에 ^/-+* 기호가 있으면 여전히 이상한 결과가 나타날 수 있습니다.
Re: 오류: "표현식은 사용 가능한 열 유형에 맞지 않습니다."빠른 답변 감사합니다!!
데이터 열이 있는 "dt" 테이블이 있습니다."data 0" 또는 "data 100" 또는 "data 200" 일 수 있으며 최대 알 수 없는 숫자까지 가능합니다.
열 이름이 무엇이든, 열이 "데이터 0"인 경우에도 "데이터 0" 열을 빼고 싶습니다. 따라서 열은 모두 0이지만 "데이터 100"과 같은 다른 열은 모두 0이 아닙니다. .
그래서 저는 각 열을 확인하는 for 루프를 만들려고 했습니다. 예를 들어 이름이 "data 100"인 경우 수식이 포함된 "data 100 delta" 열을 자동으로 생성하고 싶었습니다. (data 100 - 데이터 0).
나는 다음과 같이 할 수 있다고 생각했습니다.
dt = myTable();
cols = dt << GetColumnNames("String");
//기다려(3);
(c=1, c<=NItems(cols), c++,
If( StartsWith(cols, "데이터"),
dt << 새 열(cols|| "델타", 숫자, 연속, 공식( 열(dt,c) - :data 0 ) );
);
);
":data 0" 참조가 작동하는 것 같습니다. 복사된 ":data 0" 데이터를 "data 100 delta" 열에 넣습니다. 그러나 "column(dt,c)" 에 넣으면 데이터 100 열, 오류가 발생했습니다.....
감사해요!!
Re: 오류: "표현식은 사용 가능한 열 유형에 맞지 않습니다."제프,
문제는 "eval list(column(dt,4))"입니다. Eval List()는 평가할 목록이 있을 것으로 예상합니다. 예: {1,2,3}.
이것이 당신이 의도한 것입니까? Column(dt, 4)의 내용이 목록입니까? 해당 열에 숫자 값이 있을 가능성이 높으므로 오류가 발생합니다.
그럼에도 불구하고 JMP 데이터 테이블 열은 숫자, 문자, Rowstate의 3가지 데이터 유형만 허용합니다. 실제로 열(4)의 모든 셀에 목록이 있다면 실제로는 문자열일 것입니다. 즉 "{1,2,3}"입니다. 이 경우 먼저 문자열을 구문 분석하여 표현식으로 변환해야 하며 그러면 EvalList()가 작동합니다.
문제는 그 공식이 무엇을 하려고 의도했느냐는 것입니다.