목록 내용이 루프 없이 모두 숫자인지 확인하는 방법안녕,
데이터를 가져오는 코드를 작성 중이며 Python용 MessyTables와 유사한 데이터 검사를 하고 싶습니다.
데이터에 "NULL" 또는 이와 유사한 것이 존재하기 때문에 데이터를 실수로 문자로 가져올 수 있습니다. 이들의 일반적인 인스턴스를 제거한 후 데이터를 다시 확인하여 숫자인지 확인하고 싶습니다.
이를 수행하는 가장 쉬운 방법은 목록에서 항목 주위의 ""를 제거한 후 Try() 및 Matrix()를 사용하는 것입니다.
columnKeys를 반복할 수 있으며 Num() 변환이 실패하면 Throw()가 트리거됩니다. 테이블이 길고 열에 고유 번호가 많으면 낭비가 됩니다.
아래 코드는 long에 오류를 기록하는데 문제가 없습니다. 그러나 내 추가 기능에 통합하면 JMP 경고 창도 트리거되지만 직접 실행하는 경우에는 그렇지 않습니다.
목록이 숫자인지 확인하거나 JMP 경고 대화 상자를 표시하지 않는 대안이 있습니까?
감사,
스티븐
dt = New Table( "Check Data",
Add Rows( 2 ),
New Column( "Column 1", Character, "Nominal", Set Values( {"+1%", "2", "-45"} ) )
);
a = Column(dt, "Column 1" ) << Get Values;
Try(
b = Matrix( Parse( Substitute( Char( a ), "\!"", "", " " ) ) );
Show( "Converted to Numeric." );
Show(b);
,
Show( "Not all Numeric..." );
Show(a);
);Re: 목록 내용이 루프 없이 모두 숫자인지 확인하는 방법고맙습니다! 나는 몇 시간 동안 이와 같은 것을 찾고있었습니다.Re: 목록 내용이 루프 없이 모두 숫자인지 확인하는 방법문제가 발생할 수도 있으므로 목록에서 누락된 값을 제거해야 합니다.
Names Default to here(1);
a = {"1", "2", "", "45", "", "3"};
x = repeat(1, nitems(a));
x[loc(a, "")] = 0;
a = a[loc(x)];
Batch Interactive(1);
cap = Log Capture(
Try(
Parse( "[" || Concat Items( a, "," ) || "]" );
result = "ok";
,
result = "bad"
)
);
Batch Interactive(0);
Show( result );Re: 목록 내용이 루프 없이 모두 숫자인지 확인하는 방법<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />크레이지@JMP 덕분에 매력이 있었고 다른 try 문과 함께 다시 사용할 것이라고 확신합니다.
Re: 목록 내용이 루프 없이 모두 숫자인지 확인하는 방법마지막으로 대화 상자를 표시하지 않으려면 BatchInteractive 함수를 사용하십시오.두 개의 호출이 있습니다. 하나는 이전이고 다른 하나는 이후입니다.BatchInteractive(1) 상태에서 실행 중인 JMP를 그대로 두면 JMP를 닫기가 어렵습니다.
dt = New Table( "Check Data",
Add Rows( 2 ),
New Column( "Column 1", Character, "Nominal", Set Values( {"1", "2a", "-45"} ) )
);
a = Column( dt, "Column 1" ) << Get Values;
Batch Interactive(1);
cap = Log Capture(
Try(
Parse( "[" || Concat Items( a, "," ) || "]" );
result = "ok";
,
result = "bad"
)
);
Batch Interactive(0);
Show( result );
Re: 목록 내용이 루프 없이 모두 숫자인지 확인하는 방법로그 메시지를 표시하지 않으려면 다음을 수행하십시오.
dt = New Table( "Check Data",
Add Rows( 2 ),
New Column( "Column 1", Character, "Nominal", Set Values( {"1", "2", "-45"} ) )
);
a = Column( dt, "Column 1" ) << Get Values;
cap = Log Capture(
Try(
Parse( "[" || Concat Items( a, "," ) || "]" );
result = "ok";
,
result = "bad"
)
);
Show( result );
Re: parse("a+b)") 오류를 우회하는 방법은 무엇입니까? logcapture 및 시도에 대해 논의했습니다.
편집: 결과에 대한 중복 할당을 제거했습니다.
Re: 목록 내용이 루프 없이 모두 숫자인지 확인하는 방법다음은 귀하의 독창적인 아이디어를 변형한 것입니다.
dt = New Table( "Check Data",
Add Rows( 2 ),
New Column( "Column 1", Character, "Nominal", Set Values( {"1", "2%", "-45"} ) )
);
a = Column(dt, "Column 1" ) << Get Values;
try(parse("["||concatitems(a,",")||"]"),"nope");
Re: 목록 내용이 루프 없이 모두 숫자인지 확인하는 방법이것은 꽤 빠른 것 같습니다. 열이 숫자로 지정된 경우 숫자가 아닌 값을 누락된 값으로 바꾸는 JMP 기능(?)을 사용합니다.
*속도를 위해 편집*
lista = {"+1%", "2", "-45", ""};
dt = New Table( "Check Data",
New Column( "Character", Character, "Nominal", Set Values( lista ) ),
New Column("Numeric", Numeric, Set Values( lista )),
invisible
);
if( ColNMissing(Column(dt, "Character")) == ColNMissing(Column(dt, "Numeric")),
ret = as list(Column(dt, "Numeric") << get values),
ret = Expr(print("Non-Convertable"));
);
close(dt, no save);
ret;
Re: 목록 내용이 루프 없이 모두 숫자인지 확인하는 방법가져온 열이 실제로 숫자여야 하는지 확인하는 가장 쉬운 방법은 문자로 가져온 경우 이 간단한 코드 줄을 사용하는 것입니다. 찾은 숫자 값의 수를 반환합니다.
numberofnumerics = Col Number(num(<THE target="" column="">));</THE>
비어 있지 않은 열 수에 대한 숫자 수의 비율을 얻을 수도 있습니다.
ratio = Col Number(num(<THE target="" column="">)) / Col Number(<THE target="" column="">);</THE></THE>