僅在適當的情況下將數據轉換為數字!我使用存儲在表中的數據作為參數和值。由於某些參數的值可能是字符,因此數據庫中的數據類型是字符。使用 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"));
);
如何進行測試以僅轉換數據適當數字的列。
回复:僅在適當的情況下將數據轉換為數字!文斯,
感謝您的見解。我想這是一件棘手的事情,因為根據具體情況,某些字符可能有不同的含義(例如“-”或“e”)。您的代碼在編寫時有效,但由於缺少值而在我的集合上失敗。這些可以通過 Substitute 命令中的更多參數來處理,以查找並消除字符串 "", 。
解析(代替(字符(值), "\!"\!"\!, " , ”” , “\!” , ”” , “{” , “[” , “}” , “]” ));
然而,我的所有第 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 的代碼,因為它轉換為日期的列對我來說並不重要。如果我知道它被解釋為日期,我可以破例。我在這組數據中沒有日期。
拍
回复:僅在適當的情況下將數據轉換為數字!它把它當作一個約會
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");
);
)回复:僅在適當的情況下將數據轉換為數字!大部分情況下它是有效的,但經過進一步檢查,有一種情況會發生奇怪的事情。
我有一些代碼是帶有破折號的數字。我希望他們能保持角色。
但這就是 JMP 所做的。
num("100-0001-01") 結果為 -56928614400
我不知道它是如何產生的,但因為它沒有丟失,所以代碼接受它作為一個數字。
回复:僅在適當的情況下將數據轉換為數字!謝謝。 這有效。
我在上面複製了錯誤的代碼。 本來應該如此。
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"));
);回复:僅在適當的情況下將數據轉換為數字!下面是一個簡單的示例,測試每列的前 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 )
);
);