적절한 경우에만 데이터를 숫자로 변환하십시오!매개변수와 값으로 테이블에 저장된 데이터로 작업합니다.일부 매개변수의 경우 값이 문자일 수 있으므로 데이터베이스의 데이터 유형은 문자입니다.SQL 스크립트를 사용하여 데이터를 JMP로 가져오는 것도 쉽고 매개변수별로 데이터를 나누는 것도 쉽습니다.그러나 이제 일부 열을 숫자로 변환하고 싶지만 다른 열은 그렇지 않은 열 테이블이 있습니다. 나는 이것을 시도했지만 놀랍게도 JMP는 모든 열을 숫자로 변환하여 진정한 문자 정보를 버렸습니다.
Tcols = dt << Get Column Names(String);
For(i=2, i<=n items(Tcols), i++,
try(column(dt,i) << Data Type(Character);
column(dt,i) << Modeling Type("Nominal"));
);
데이터가 적절하게 숫자인 열만 변환하는 테스트를 어떻게 수행할 수 있습니까?
Re: 적절한 경우에만 데이터를 숫자로 변환하세요!빈스,
통찰력에 감사드립니다.상황에 따라 일부 문자가 다른 의미(예: "-" 또는 "e")를 가질 수 있기 때문에 까다로운 작업이라고 생각합니다.귀하의 코드는 작성한 대로 작동했지만 누락된 값 때문에 내 세트에서는 실패했습니다.문자열 "", .
구문 분석 ( 대리자 ( 숯 (값), "\!"\!"\!, " , "" , "\!"" , "" , "{" , "[" , "}" , "]" ));
그러나 내 2열은 모두 날짜로 해석될 수 있는 값이므로 이 코드도 날짜로 해석했습니다.
names default to here(1);
dt = New Table( "Test",
Add Rows( 4 ),
New Column( "Column 1",
Character,
"Nominal",
Set Values( {"A", "B", "C", "D"} )
),
New Column( "Column 2",
Character,
"Nominal",
Set Values( {"100-0001-01", "100-0001-01", "100-0001-01", "100-0001-01"} )
),
New Column( "Column 3",
Character,
"Nominal",
Set Selected,
Set Values( {"1", "2", "", "4"} )
)
);
dt = current data table();
for(i=1, i<=ncols(dt), i++,
col = Column(dt, i);
values = col << Get Values;
Try(
Parse(Substitute(char(values), "\!"\!"\!, ", "", "\!"", "", "{", "[", "}", "]"));
col << Data Type("Numeric") << Modeling Type("Continuous");
);
);
완벽하지는 않지만 날짜로 변환하는 열이 나에게 중요하지 않기 때문에 이것 또는 txnelson의 코드를 사용할 수 있습니다.날짜로 해석되고 있다는 것을 알았다면 예외로 할 수 있습니다.이 데이터 집합에 날짜가 없습니다.
가볍게 두드리기
Re: 적절한 경우에만 데이터를 숫자로 변환하세요!데이트로 취급하고 있어
MDYHMS(num("100-0001-01"))
//returns
//"01/01/0100 00:00:00"
빈 문자열로 대체된 따옴표를 사용하여 문자를 행렬로 구문 분석하려고 할 수 있습니다.
names default to here(1);
dt = New Table( "Test",
Add Rows( 4 ),
New Column( "Column 1",
Character,
"Nominal",
Set Values( {"A", "B", "C", "D"} )
),
New Column( "Column 2",
Character,
"Nominal",
Set Values( {"100-0001-01", "2", "4", "8"} )
),
New Column( "Column 3",
Character,
"Nominal",
Set Selected,
Set Values( {"1", "2", "3", "4"} )
)
);
for(i=1, i<=ncols(dt), i++,
col = Column(dt, i);
values = col << Get Values;
Try(
Parse(Substitute(char(values), "\!"", "", "{", "[", "}", "]"));
col << Data Type("Numeric") << Modeling Type("Continuous");
);
)Re: 적절한 경우에만 데이터를 숫자로 변환하세요!대부분의 경우 작동했지만 자세히 살펴보면 이상한 일이 발생하는 경우가 있습니다.
대시가 있는 숫자 코드가 있습니다.나는 그들이 캐릭터로 남아 있기를 기대합니다.
그러나 이것이 JMP가 하는 일입니다.
num("100-0001-01") 결과는 -56928614400입니다.
나는 그것이 어떻게 나오는지 모르지만 코드가 누락되지 않았기 때문에 이것을 숫자로 받아들입니다.
Re: 적절한 경우에만 데이터를 숫자로 변환하세요!감사. 이것은 효과가 있었다.
그리고 위의 잘못된 코드를 복사했습니다. 그랬어야 했어요.
Tcols = dt << Get Column Names(String);
For(i=2, i<=n items(Tcols), i++,
try(column(dt,i) << Data Type(Numeric);
column(dt,i) << Modeling Type("Continuous"));
);Re: 적절한 경우에만 데이터를 숫자로 변환하세요!다음은 각 열의 처음 10개 행을 테스트하고 숫자가 아닌 값이 없으면 열을 숫자로 변환하는 간단한 예입니다.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
// set all columns to character
For( i = 1, i <= N Cols( dt ), i++,
Column( i ) << set data type( character )
);
// Convert only numerics
For( i = 1, i <= N Cols( dt ), i++,
isNumeric = "NO";
For( theRow = 1, theRow <= 10, theRow++,
If( Column( i )[theRow] != "" & Is Missing( Num( Column( i )[theRow] ) ) == 1,
isNumeric = "NO";
Break();
,
isNumeric = "YES"
)
);
If( isNumeric == "YES",
Column( i ) << set data type( numeric )
);
);