列の数値を失うことなく、列のデータ型を文字から数値に変換する方法親愛なる皆さん
数週間前にJMPを始めました!! 素朴な疑問です。
列のデータ型を文字から数値に変換しようとしていますが、データ型を数値に変換する際に列のすべての数値が失われます。
同じものについては、添付のスクリーンショットをご覧ください。
データ型を文字から数値に変更したときに列の数値を保持するにはどうすればよいですか??
次のコマンドを使用して文字を置き換えて試してみました。
value1 = dt:RequiredColumn<<値を取得;
Regex( :RequiredColumn, "[^0-9]", "", GLOBALREPLACE );
これにより、すべての数値も置き換えられます。
単に列の数値を保持したいだけです(元は文字データ型)。 私たちのコミュニティでこの問題を検索しようとしましたが、それに関する関連情報が見つかりませんでした。
Picture01 - OriginalColumnFormat - 列の元のデータ型のスクリーンショット
Picture02 - データ型変更後の列 - データ型を数値に変更した後の列のスクリーンショット。
前もって感謝します...

高度な統計モデリングデータアクセスデータのブレンディングとクリーンアップマスカスタマイゼーション品質およびプロセスエンジニアリングウィンドウズRe: 列の数値を失わずに列のデータ型を文字から数値に変換する方法皆さん、こんにちは。 最新情報 - JMP 17 の期間内にこの問題に対していくつかの作業が行われたようです。 具体的には、有効な数値とみなされるものを制御できるように、追加の引数が Num() と Informat() に追加されました。 JMP 17 EA7 (またはそれ以降) ユーザーは今すぐこれを試すことができます。他のユーザーは、2022 年の秋に JMP 17 が利用可能になるまで待つ必要があります。 ご報告いただきありがとうございます! 私たちはこれらのフォーラムを監視しており、可能であればこのような問題を修正するよう努めています。
Re: 列の数値を失わずに列のデータ型を文字から数値に変換する方法JMP がそれを日付として解釈しており、その日付が 01.01.1904 (JMP の日時の開始時刻) より前であるため、負の値になっている可能性があります。
Names Default To Here(1);
a = Num("9.4.333");
b = Num("31.12.1903");
c = Num("1.12.1903");
Show(a, b, c);
コミュニティでのこの議論の後、 Num() の動作について数値をチェックするために独自のバリデーターを使用しました。これは一例です。
Names Default To Here(1);
num_validator = Function({str}, {Default Local},
regex_validator_string = "^[-\+]{0,1}[0-9\.\,]+$";
If(Is Missing(Regex(str, regex_validator_string)),
retval = .; //use missing as non match due to num returning . in case of non-numeric
, //else
retval = Num(str)
);
return(retval);
);Re: 列の数値を失わずに列のデータ型を文字から数値に変換する方法この問題の調査にご協力いただき、ありがとうございます、ジム !!
Re: 列の数値を失わずに列のデータ型を文字から数値に変換する方法JMP には Num() 関数にバグがあるようです。パターンの文字列
「んん」
常に JMP 欠損値を返す必要がありますが、多くの場合は有効な数値を返します。
Num( "9.4.333" )
戻り値
-49554633600
JMP ドキュメント (非網羅的な検索) には、この問題に関する使用上の注意が見つかりません。JMP サポート チームにバグ レポートを提出しています。
Re: 列の数値を失わずに列のデータ型を文字から数値に変換する方法ありがとうございます!!
それで仕事は終わりました...
Re: 列の数値を失わずに列のデータ型を文字から数値に変換する方法手持ちのテーブルを変換するのは「簡単」ですが、一般にこの種の変換は簡単ではありません。 考慮する必要があるさまざまな価値観がたくさんあります。 次に、その方法に問題/機能がありますJMP の Num 関数は機能します。 以下は 1 つのアイデアですが、これでも、期間、日付、時刻、パーセンテージ、千の位の区切り文字など、さまざまな「数値」形式が除外されます。 また、数字に関係のない文字の一部のみが削除されます。
Names Default To Here(1);
dt = Current Data Table();
//remove alphabetical characters, should also remove some special characters
regex_one = "[a-zA-Z\s]";
dt << New Column("no_alph", Character, Nominal, << Set Each Value(
Regex(:MeasuredValues, regex_one, "", GLOBALREPLACE);
));
regex_two = "^-?[0-9]+\.?[0-9]*$";
dt << New Column("nums", Numeric, Nominal, << Set Each Value(
Num(Regex(:no_alph, regex_two))
));
Re: 列の数値を失わずに列のデータ型を文字から数値に変換する方法親愛なるジム。
6行目の数値を数値に変換する前にスクリプトを実行しようとしましたが、結果は次のとおりです。
:MeasuredValues[6] = "-1.00";
Char To Hex(:MeasuredValues[6]) = "2D312E3030";
列のデータ型を数値に変換した後:
:測定値[6] = .;
Char To Hex(:MeasuredValues[6]) = "FFFFD10000000000";
数値に変換される2行目のスクリプトを実行しました(変換後は別の値に変わります)。結果は次のとおりです。
変換前:
:MeasuredValues[2] = "1.6.1";
Char To Hex(:MeasuredValues[2]) = "312E362E31";
変換後:
:測定値[2] = 3061584000;
Char To Hex(:MeasuredValues[2]) = "41E6CF8210000000";
MeasuredValues データを含む表を添付しました。
ありがとう !!
Re: 列の数値を失わずに列のデータ型を文字から数値に変換する方法親愛なる国家公務員よ、
タイムリーにご返信いただきありがとうございます。
列から再コード化オプションを使用して数値以外の値を削除することであなたの提案を試し、列のデータ型を文字から数値に変換しようとしました。 ただし、データ型を数値に変更すると、以前と同様にすべての値が消えます。
同じものについては、添付のスクリーンショットをご覧ください。
再コーディング オプションで、JMP は数値と文字列文字を区別できました。
JIM 氏の提案の結果を近々投稿します。
ありがとう..
Re: 列の数値を失わずに列のデータ型を文字から数値に変換する方法JMP は、数値の適切な表現であるすべての値を変換する必要があります。したがって、
1.6.1、V1.6 は有効な数値ではないため、欠損値に変換する必要があります。
ただし、-1.00、5.00、-15.000は変換する必要があります。
次のスクリプトを実行して、問題の原因となる可能性のある隠し文字がデータ内に存在するかどうかを確認していただけますか。
show(:MeasuredValues[6],char to hex(:MeasuredValues[6]);
スクリプトは、データ テーブルの 6 行目の値の 16 進値を表示します。-1.00 が 6 行目にない場合は、文字表現が有効な数値であると思われる行の 1 つの行番号に 6 を変更しますが、セルは欠損値に変更されています。
また、MeasuredValues 列だけを含むサンプル データ テーブルを添付していただければ非常に便利です。
Re: 列の数値を失わずに列のデータ型を文字から数値に変換する方法あなたが望むことを達成するにはおそらく複数の方法があり、誰か (ジムなど) がそれをより効率的にするためのスクリプトを持っていると確信していますが、潜在的なワークフローは次のとおりです。
ところで、あなたのjpgでは、変更したい文字列がどのように見えるかを確認できません。 数値ではない文字がある場合は、データ型を変更する前にそれらの文字を処理する必要があります。
1. 列を右クリックし、「再コード化」を使用します。 数値以外の値をすべて削除します。
2. 次に、右クリックして「列情報」を選択します。 (jpg のような)。データ タイプを文字から数値に変更し、モデリング タイプを連続に変更します。