適切な場合のみ、データを数値に変換してください!パラメータと値としてテーブルに格納されたデータを操作します。一部のパラメーターの値は文字である可能性があるため、データベースのデータ型は文字です。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 )
);
);