列が存在するかどうかを確認する<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />数式を含む新しい列を作成する JMP スクリプトがあります。 列の作成をスキップし、余分な列の生成を避けるために、列がすでに存在するかどうかを検出する方法を見つけようとしています。 確かにあるのですが、私の持っている文献には見つかりません。
ありがとう。
マイク
Re: 列が存在するかどうかを確認する以下は、大文字と小文字を区別しないバージョンのロジックです。
dt = open("$sample_data\Big Class.jmp");
col_name_list = dt << get column names(string);
// Convert all column names to uppercase for case-insensitive search
for (i = 1, i <= nitems(col_name_list), i++,
col_name_list[i] = uppercase(col_name_list[i]);
);
new_column = "BMI";
// English BMI Formula BMI = ( Weight in Pounds / ( Height in inches^2 ) ) x 703
if (!contains(col_name_list, uppercase(new_column)),
dt <<NEW column=""></NEW>Re: 列が存在するかどうかを確認するありがとうございます!
他の解決策では大文字と小文字が区別されるため、あなたの例だけが私にとってはうまくいきました。 文字列の大文字と小文字が正しいかどうかわからないため、あなたのものを使用する必要がありました。Re: 列が存在するかどうかを確認するピームローズ
まず、あなたが書いたコードが私にとっても機能すること、そして私が書いた説明がJMP 9または10の動作と一致していないことを確認することから始めましょう。
あなたの返信を読んだ後、JMP 9と10でリスト、文字列、数値を含むcontains文とif文のいくつかの異なる組み合わせも試してみました。 私の試みは網羅的ではありませんでしたが、私の結果はすべてあなたの結果と一致しています。 最初にあなたの最初の投稿を読んだとき、contains()>0 の使用を採用した何年も前に実行したいくつかのトラブルシューティングを思い出しました。 シナリオを再現できません。ただし、JMP スクリプト ガイドで次の情報を見つけました。 ここでは、contains with >0 の使用方法について詳しく説明しています。これは例としては適切かもしれませんが、それが必須であるかどうかは明示的には述べられていません。
JMP スクリプト ガイド バージョン 10 の 136 ページ:
「アイテムがリストにあるかどうかを評価するには、次を使用しますロック()とを含む()と>0 。 戻り値ゼロ
項目がリストにないことを意味します。 戻り値 1 は、項目がリストに少なくとも 1 回存在することを意味します。」
...
「数字かどうか調べてください5に存在しますリスト番号:
NRow(Loc(numList, 5)) >0;
0
(numList, 5) >0; を含む
0"
お役に立てれば。
Re: 列が存在するかどうかを確認するウィーベポさん、こんにちは。
さまざまな組み合わせを試してみましたが、正の整数を否定すると、どんなに大きくても結果は 0 になります。そのため、私のコードは (JMP 9 および 10 で) 機能します。ただし、注意していただければ幸いです。このアプローチはすべての言語で機能するとは限りません。それは確かにさらなるテストに耐えます。
b = 2000000000000;
!b;
ログには次のことが表示されます。
0
よろしく、
ピームローズ
Re: 列が存在するかどうかを確認する知っておくと便利です。 ツールボックスにツールを追加できるのはいつも嬉しいです。
ありがとう。
Re: 列が存在するかどうかを確認する知っておくととても便利です。 それには気をつけなければなりません。
ありがとう
Re: 列が存在するかどうかを確認する私が知っている単一の機能はありません。 しかし不足している()と組み合わせてスクリプト可能()トリックはできます。
また、列が存在しない場合にスクリプトが停止しないように、列を Try() ステートメントで囲む必要があります。
dt = Open( "$sample_data\Big Class.jmp" );
new_column = "BMI";
If( Is Missing( Is Scriptable( Try( Column( new_column ) ) ) ),
dt << New Column( new_column, numeric, continuous, formula( 703 * :weight / :height / :height ) )
);
Re: 列が存在するかどうかを確認するこれが JMP の最近のすべてのバージョンに当てはまるかどうかはわかりません。 私がこのコメントをしたのは、コードの堅牢性を向上させる機会を強調するためだけです。
「Contains」は項目の位置を返します。ゼロは false として解釈され、正の値は true として解釈されるため、「if」ステートメントで使用するのに問題ありません。 contains の前に not '!' を付けると、その項目が存在しない場合、または最初の項目として存在する場合に条件が機能します。ただし、項目が最初でない場合 ( 1 より大きい値)、「!」は使用されません。条件を false に変換できない場合があります。 これは、「>0」と「contains」の比較を使用することで回避できます。 構文については以下を参照してください。
dt = Open( "$sample_data\Big Class.jmp" );
col_name_list = dt << get column names( string );
new_column = "BMI";
// English BMI Formula
// BMI = ( Weight in Pounds / ( Height in inches x Height in inches ) ) x 703
If( !(Contains( col_name_list, new_column ) > 0),
dt << New Column( "BMI", numeric, continuous, formula( 703 * :weight / :height / :height ) )
);
Re: 列が存在するかどうかを確認するありがとう、それは私にとってはうまくいきます。 存在を確認する関数を期待していましたが、これは機能します。
Re: 列が存在するかどうかを確認する
dt = open("$sample_data\Big Class.jmp");
col_name_list = dt << get column names(string);
new_column = "BMI";
// English BMI Formula
// BMI = ( Weight in Pounds / ( Height in inches x Height in inches ) ) x 703
if (!contains(col_name_list, new_column),
dt <<NEW column=""></NEW>