2 つの列の値を 1 つに結合する (数値と文字の値が混在)こんにちは
2 つの列があり、1 つには数値が含まれ、もう 1 つには文字列が含まれます。
文字列値が「パラメトリック」の場合は数値を取得し、そうでない場合は文字列値を取得する 3 番目の列を作成したいと思います。
これを試しましたが、文字型の列として定義されているにもかかわらず、「列 TEST_RESULT には数値が必要です」というエラーが発生します。
関係があるなら、私は JMP15 を使用しています。
col_test_result =dt <
<NEW column=""></NEW>
Later on I want to split this column so the output table will have either numeric or character type data, will JMP be able to set it to numeric based<BR />on the contents although the source column was character?
<BR /><BR />
<LINGO-LABS id="lingo-labs-536312" slang="en-US" mode="UPDATE">
<LINGO-LABEL>高度な統計モデリング</LINGO-LABEL>
<LINGO-LABEL>コンテンツの編成</LINGO-LABEL>
<LINGO-LABEL>データのブレンドとクリーンアップ</LINGO-LABEL>
<LINGO-LABEL>マスカスタマイゼーション</LINGO-LABEL>
<LINGO-LABEL>品質およびプロセスエンジニアリング</LINGO-LABEL>
<LINGO-LABEL>結果の共有と伝達</LINGO-LABEL>
</LINGO-LABS>
Re: 2 つの列の値を 1 つにマージする (数値と文字の値が混在している)数値データを文字に変換するには、Char() 関数を使用する必要があります。
col_test_result = dt << New Column( "TEST_RESULT", Character );
dt_subset:TEST_RESULT << set formula( If( :COMMENTS == "Parametric", Char( :NUMERIC_RESULT ), :COMMENTS ) );
Re: 2 つの列の値を 1 つにマージする (数値と文字の値が混在している)1 つの列に値を混在させることはできません。 数値の場合、 :NUMERIC_RESULT の周りに Char() を追加できます
Column(dt_subset, "TEST_RESULT") << set formula(If(:COMMENTS == "Parametric", Char(:NUMERIC_RESULT), :COMMENTS));
列を分割するときは、データ型を必要なものに設定するだけです。 数値列に文字値がある場合、それらは欠損値に変更されることに注意してください。
Re: 2 つの列の値を 1 つにマージする (数値と文字の値が混在している)ありがとう ! 「char()」を追加すると、最初の問題が解決しました。
しかし今、マージされた列を分割した後、他に2つの問題があります。
別の列で分割しているため、結果の列にはすべて 1 つのタイプのデータ (文字列または数値) があり、約 150 の異なる列があります。
問題点 :
1.分割されたすべての列は、結合された列の元の式のままです。 ソース列を値にするにはどうすればよいですか (Excel のように - 特別な値を貼り付けます)。
2.すべての分割列は文字型として生成されますが、それは私が望んでいたものではありません.
csv ファイルを開くと、JMP によってタイプが自動的に設定されるため、列のすべての値が数値の場合は数値タイプになります。
Re: 2 つの列の値を 1 つにマージする (数値と文字の値が混在している)以下は、データ テーブルを調べて、すべての有効な数値で構成される任意の文字列を数値データ型に変換する小さなコードです。
Names Default To Here( 1 );
dt = Current Data Table();
For Each( {value, index}, dt << get column names( string ),
If( Column( value ) << get data type == "Character",
vals = Column( value ) << get values;
nonMissing = Col Number( As Column( value ) );
Column( value ) << set data type( numeric ) << modeling type( continuous );
If( nonMissing != Col Number( As Column( value ) ),
Column( value ) << set data type( character ) << set values( vals )
);
)
);Re: 2 つの列の値を 1 つにマージする (数値と文字の値が混在している)ありがとう !それはまさに私が必要としているものに見えますが、残念ながら機能していません。
デバッグしようとしました-最初の行は機能しています-列名のリストを取得しています。
2番目のものは以下のエラーを受け取ります。何か案が?

Re: 2 つの列の値を 1 つにマージする (数値と文字の値が混在している)コメントとして:
これは制限ではありませんが、各列には定義済みのデータ型があり、必要に応じて積極的に設定できるというのが JMP の基本的な考え方です。
データ型を適切に設定すると、次の分析が非常に簡単になります。
Re: 2 つの列の値を 1 つにマージする (数値と文字の値が混在している)バージョン 16 未満を使用していると思われるため、std の「For」構文を使用する必要があります。
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA\Big Class.jmp" );
// JMP16 "For Each"
dt << get column names( string );
For Each( {value, index}, dt << get column names( string ), Print( value ) );
// JMP <16 "For"
col_lst = dt << get column names( string );
For( i = 1, i <= N Items( col_lst ), i++,
Print( col_lst[i] )
);
Re: 2 つの列の値を 1 つにマージする (数値と文字の値が混在している)
ありがとう、それは今働いています!
今一つだけ - どうすれば元の式を取り除くことができますか? 式の結果の値が欲しいだけですが、可能ですか?
Re: 2 つの列の値を 1 つにマージする (数値と文字の値が混在している)
よく働いている.. 問題が見つかりました。 固定文字列コンテンツを持つ「char」データ型の列がありました:「R001」
スクリプトを実行すると、値が「1」の数値型に変わります。 なぜこれが起こっているのですか?
Re: 2 つの列の値を 1 つにマージする (数値と文字の値が混在している)R の後にすべて数値が続くものは、JMP によって通貨として解釈されます。南アフリカ ランドの表記は、R123 や R55.67 などの形式です。したがって、JMP はこれを数値として解釈しています。コードにチェックを追加して、この例外をチェックできます。
Re: 2 つの列の値を 1 つにマージする (数値と文字の値が混在している)
うわー、私はこれが来るのを見ませんでした:)助けてくれてどうもありがとう!
Re: 2 つの列の値を 1 つにマージする (数値と文字の値が混在している)JMP 17 では、num("R001", <<制限) この動作を防止します。