데이터 유형을 자동으로 재평가하는 방법이 있습니까?다른 열로 분할한 데이터 테이블이 있는 경우 예상대로 모든 열이 "문자" 데이터 유형으로 나옵니다.
이제 데이터 유형이 숫자인지 문자인지 자동으로 재평가하는 JSL 스크립트를 작성할 수 있는 방법이 있습니까? 데이터 항목이 숫자인 경우 데이터 유형을 숫자로 변경하시겠습니까?
Re: 데이터 유형을 자동으로 재평가하는 방법이 있나요?한 가지 접근 방식은 누락된 값의 수를 세고, 값 목록을 가져오고, 열을 숫자로 강제 설정한 다음, 누락된 값의 수를 다시 세는 것입니다. 누락된 수가 이전과 이후에 동일하면 숫자 열이 있습니다. 그렇지 않은 경우 다시 변경하고 값을 복사본으로 바꿉니다.
이것이 실패하는 곳은 NA와 같은 숫자가 아닌 값이 숫자 열에 나타나는 경우입니다.
Names Default to Here(1);
tblRef = Current Data Table();
For(i=1,i<=N Col(tblRef),i++,
nMissing = Col N Missing(Column(tblRef,i));
nextVals = Column(tblRef,i) << Get Values;
Column(tblRef,i) << Set Data Type(Numeric);
If(Col N Missing(Column(tblRef,i)) != nMissing,
Column(tblRef,i) << Set Data Type(Character);
Column(tblRef,i) << Set Values(nextVals)
)
)
Re: 데이터 유형을 자동으로 재평가하는 방법이 있나요?해결 방법을 찾기 위해 저를 이겼지만 또 다른 옵션은 정규식을 사용하여 각 열에 숫자와 마침표(소수점) 문자만 포함되어 있는지 확인하는 것입니다. 아래 예는 각 열을 가져와 모든 값을 하나의 큰 문자열로 연결한 다음 해당 문자열에 숫자나 소수점( [^0-9\.]이 아닌 문자가 포함되어 있는지 확인합니다. ). 전체 열에서 숫자와 소수점만 찾으면(예: 항목 포함이 0으로 평가됨) 데이터 유형을 숫자로 설정합니다.
Names Default to Here( 1 );
cols = Current Data Table() << Get Column Names();
for( i = 1, i <= Length( cols ), i++,
vals = As Column( cols[i] ) << Get Values;
valsConcat = Concat Items( vals, "" );
If( Contains Item( valsConcat, Pat Regex( "[^0-9\.]") ),
Continue(),
As Column( cols[i] ) << Set Data Type( "Numeric" );
)
);
Re: 데이터 유형을 자동으로 재평가하는 방법이 있나요?자동화된 솔루션이 필요하지 않은 경우 Recode에 빨간색 삼각형 Parse as Numbers 옵션이 있습니다. 숫자가 아닌 항목(예: NA)을 누락된 값으로 변경합니다.
Re: 데이터 유형을 자동으로 재평가하는 방법이 있나요?이 접근 방식의 잠재적인 문제는 과학적 표기법을 지원하지 않는다는 것입니다. 과학적 표기법과 네거티브를 받아들이도록 Regex를 수정하고 전화번호와 주민등록번호 같은 것을 거부하면 훨씬 더 복잡해집니다(하! 말장난!).
Re: 데이터 유형을 자동으로 재평가하는 방법이 있나요?이것이 제가 권장하는 접근 방식입니다. 발생할 가능성이 있는 데이터에 따라 다음 작업도 수행했습니다.
1) 각 열의 처음 k 행만 사용하여 결정을 내리고 효율성을 높입니다.
2) 주어진 열(또는 해당 하위 집합)에서 누락된 부분의 일부 비율(필요에 따라 조정)을 허용합니다. 이 임계값 미만에서는 어쨌든 숫자로 변환하십시오.
Re: 데이터 유형을 자동으로 재평가하는 방법이 있나요?이미 언급한 복잡한 문제와 함께 솔루션에서 쉼표를 소수 자리 표시자 또는 1000의 숫자 구분 기호로 고려하도록 합니다. 그렇게 하면 보다 국제적인 솔루션이 될 수 있습니다.
Re: 데이터 유형을 자동으로 재평가하는 방법이 있나요?좋은 지적 (그리고 말장난), Brady. 이 정규식 솔루션은 올바르게 작동하는 예제 데이터에 대해 작동하지만 가능한 모든 데이터에 대해 일반화하지는 않습니다. 작업을 완료할 수 있지만 작업을 수행하는 것이 번거로울 수 있는 마스터 정규식이 하나 있다고 생각합니다. 또는 하나 이상의 간단한 항목 포함 검사를 사용하여 열의 각 개별 행을 반복할 수 있습니다. 예를 들어 첫 번째 대시(음수에 대해)를 허용하지만 첫 번째 대시가 아닌 모든 항목을 거부한 다음 다른 행이 과학 표기법을 준수하는지 확인할 수 있습니다. 열의 모든 행에 대해 모든 검사를 통과하면 데이터 유형을 변경하십시오. 당신이 말했듯이 "상당히"더 복잡합니다.
Re: 데이터 유형을 자동으로 재평가하는 방법이 있나요?나는 파티에 조금 늦었지만 "속임수" 방법은 파일을 csv로 내보낸 다음 다시 가져오는 것입니다. 여기서 JMP는 열 때 열 유형을 자동으로 결정합니다. 하지만 테이블 스크립트나 열 속성을 저장할 필요가 없다고 가정합니다. 여기 스크립트가 있습니다.
//assume file is in the downloads folder
dt = open ("$DOWNLOADS/Data to Split.jmp");
dtsplit = Data Table( "Data to split" ) << Split(
Split By( :Label ),
Split( :Data ),
Output Table( "Split Data.jmp" ),
Sort by Column Property
);
close (dt, no save);
dtsplit << Save as ("$DESKTOP/Split Data.csv");
close (dtsplit, no save);
ndt = open ("$DESKTOP/Split Data.csv");