如何檢查列表內容是否都是沒有循環的數字你好,
我正在編寫一些導入數據的代碼,我想做一些類似於 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);
);回复:如何檢查列表內容是否都是沒有循環的數字謝謝! 我一直在尋找這樣的東西幾個小時。回复:如何檢查列表內容是否都是沒有循環的數字可能應該從列表中刪除任何缺失值,因為這也會導致問題。
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 );回复:如何檢查列表內容是否都是沒有循環的數字<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />克雷格@JMP謝謝,這很有魅力,我相信我會在其他 try 語句中再次使用它。
回复:如何檢查列表內容是否都是沒有循環的數字最後,要抑制對話框,請使用 BatchInteractive 函數。注意有兩個調用,一個之前,一個之後。如果您讓 JMP 在 BatchInteractive(1) 狀態下運行,您將很難關閉 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 );
回复:如何檢查列表內容是否都是沒有循環的數字並抑制日誌消息:
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)") 錯誤? 討論了日誌捕獲並嘗試。
編輯:刪除了結果的冗餘分配。
回复:如何檢查列表內容是否都是沒有循環的數字這是您原始想法的變體:
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");
回复:如何檢查列表內容是否都是沒有循環的數字這似乎相當快。 它只是使用 JMPs 功能(?),如果列指定為數字,它只是將非數字值轉換為缺失值。
*編輯速度*
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;
回复:如何檢查列表內容是否都是沒有循環的數字我發現檢查導入的列是否實際上應該是數字的最簡單方法,而實際上它是作為字符導入的,是使用這個簡單的代碼行。 它返回找到的數值的數量:
numberofnumerics = Col Number(num(<THE target="" column="">));</THE>
您還可以獲得數字數量與非空白列數量的比率
ratio = Col Number(num(<THE target="" column="">)) / Col Number(<THE target="" column="">);</THE></THE>