名前の文字列に基づいて複数の列を削除するやあ、
含まれる文字列に基づいて複数の列を削除する必要がありますが、それらの文字列が含まれていない場合でも他の列を保持したい場合があります。
したがって、この投稿の解決策に従ってください列名に基づいて複数の列を削除する
dt = Open( "$sample_data/Hollywood Movies.jmp" );
col_names = dt << Get Column Names( String );
For( i = N Items( col_names ), i > 0, i--,
If(
Not(
Contains( col_names[i], "Gross") | contains(col_names[i], "Genre" ) | col_names[i] == "theme"),
Remove From( col_names, i)
)
);
したがって、私が望んでいるのは、「Gross」または「Genre」が含まれていないものを削除することですが、列名が == 「テーマ」の場合は削除しないでください。
今のところは機能しないようです! なぜ?

この質問の 2 番目の箇条書き
Col_names にカーソルを置かずに出力を確認できるように、col_names をデータ テーブルとして表示するにはどうすればよいですか。 場合によっては列名の長いリストがあり、その列リストに何が含まれているかを確認するのにホバーリングは効率的ではないからです。
ありがとう!
マスカスタマイゼーションRe: 名前の文字列に基づいて複数の列を削除するデータテーブルに関するあなたの混乱は、私も以前に見たことがあります。JMP とそのデータ テーブルの違いは、データ テーブルを基本要素として考える必要があることです。多くの場合、次のような JSL 行が表示されます。
dt = Open("$SAMPLE_DATA/big class.jmp");
一部の言語では、dt がデータ テーブルになります。これはそうではありません。上記のステートメントは、データ テーブル「Big Class」へのポインターを割り当てるだけです。変数 dt の上にマウスを置くと、次のようになります。
data table( "Big Class" )
それは価値として。
したがって、ステートメントを実行すると
xyz = dt;
一部の言語とは異なり、データ テーブル Big Class の新しいインスタンスは取得されません。代わりに、Big Class と呼ばれる同じデータ テーブルへのポインタである xyz という変数だけが取得されます。
新しいコピーを作成するには (一度作成されると、通常は完全に独立した新しいデータ テーブルになるため、新しいインスタンスではありません)、テーブル プラットフォームの 1 つを使用してタスクを完了します。
dt2 = dt << subset( all rows, all columns);
上記のコマンドは新しいデータ テーブルを作成し、変数 dt2 を新しいテーブルへのポインタとして設定します。
Re: 名前の文字列に基づいて複数の列を削除するジム、
誤解して申し訳ありません。 しかし、私が検索したもののほとんどは、jsl pdf であまり詳しく説明されていないか、簡単に説明されているだけです。 特に複雑なことを実行したい場合の再帰スクリプト (if-else、for ループ) はマニュアルには含まれていません。 エラーを追跡するのも非常に困難です。 あなたが「ログ」をチェックすると言われるまで、私はチェックしませんでした。
たとえば、新しいデータ テーブルの作成や新しいデータ テーブルの割り当て方法については説明がありません。
真っ直ぐに考えていたことを
dt_new << Data Table( col_names );
新しいデータテーブルを作成する必要がありますが、jmp ではそれが簡単ではないことがわかりました。 私がやっている構文について質問するか練習する必要があります。
どうもありがとう!
Re: 名前の文字列に基づいて複数の列を削除する「col_names」の値を作成した直後に出力すると、データテーブル内のすべての列が表示されます。
{"Movie Name", "Lead Studio Name", "Rotten Tomatoes Score", "Audience Score",
"Theme", "Genre", "Theaters Opening Wknd", "BOA Opening Wknd", "Domestic Gross",
"Foreign Gross", "World Gross", "Production Budget", "Profitability",
"Opening Wknd Gross"}
よく見ると、「テーマ」という値を持つエントリがないことがわかります。 「テーマ」という値のエントリがあります。文字列内の値を比較しているため、大文字と小文字を適切に一致させる必要があります。
スクリプト ガイドを読むことを強くお勧めします。
ヘルプ==>JMP ドキュメント ライブラリ スクリプト ガイド
Re: 名前の文字列に基づいて複数の列を削除するなぜ
col_names[i] == "theme"<BR />
まだ働いていないのですか?

Re: 名前の文字列に基づいて複数の列を削除するdt = Open( "$sample_data/Hollywood Movies.jmp" );
col_names = dt << Get Column Names( String );
dt:Profitability << delete formula;
For( i = N Items( col_names ), i > 0, i--,
If(
Not(
Contains( col_names[i], "Gross") | contains(col_names[i], "Genre" ) | col_names[i] == "theme"),
Remove From( col_names, i)
)
);
// At this point in the script, you have a data table
// with all of the original columns(Profitability is now a static column)
// And you have a JSL List called "col_names", which is stored in memory
// so you can do anythin you want given this
// You could just write the contents of the list to the log. Remember, the
// list "col_names", only contains the names of the columns, it does not
// contain the whole column(name, properties and data)
Print( col_names );
// or
Write( col_names );
// or
Show( col_names );
// That will give you the list of columns that are going to be deleted
// or before you want to see the columns in their entirety you can create
// a new data table with just those columns
newdt = dt << subset( all rows, columns( col_names ) );
// The statement below, is a perfectly valid statement, however, it will
// not work the way you think it will. The end result of this statement
// is to create a new list of column names.
// {"Genre", "Domestic Gross", "Foreign Gross", "World Gross", "Opening Wknd Gross"}
deleted_columns = delete columns( col_names );
Re: 名前の文字列に基づいて複数の列を削除するこんにちは、ジムさん
ご回答有難うございます。 わかりました、あなたの言っていることはわかりました。
数式は気にしないとしましょう。 すべての数式接続を削除し、必要な列を削除しましょう。
そして、それらの削除された列をデータテーブルとして作成(そして参照)したいと考えています
あなたの提案に従ってください
dt = Open( "$sample_data/Hollywood Movies.jmp" );
col_names = dt << Get Column Names( String );
dt:Profitability << delete formula;
For( i = N Items( col_names ), i > 0, i--,
If(
Not(
Contains( col_names[i], "Gross") | contains(col_names[i], "Genre" ) | col_names[i] == "theme"),
Remove From( col_names, i)
)
);
deleted_columns = delete columns( col_names );
これではまだ必要なものは作成されません:(
Re: 名前の文字列に基づいて複数の列を削除するあなたが提供した JSL から、最も重要なステートメントが省略されています
dt << delete columns( col_names );
これは実際に削除を行う行です。ただし、このサンプルケースには追加の問題があります。列の最終リスト
{"Genre", "Domestic Gross", "Foreign Gross", "World Gross", "Opening Wknd Gross"}
には「世界総売上高」列があり、「収益性」列の計算に使用されます。「列の削除」メッセージが処理されると、問題が検出され、ログに表示されます。
Cannot delete the selected columns while some are referenced by the formulas of remaining columns.
Removing a formula leaves the data unchanged. Removing references replaces each reference with an empty value. These effects are permanent and cannot be undone.
「収益性」列から数式を削除すると、値が静的な値に変換されます。
dt:Profitability << delete formula;
そうすれば、「列の削除」が正しく機能します。
変数の上にマウスを置くとその値が表示され、その値を確認できるようにデータテーブルを作成したいという問題に関しては、もっと簡単な方法があります。「col_names」変数の上にカーソルを置くのではなく、それを強調表示して右クリックし、「スクリプトの実行」を選択する必要があります。規則により、JMP スクリプト内の何かが強調表示されている場合、「スクリプトの実行」は強調表示された行/ステートメント/変数のみを実行します。結果はログに表示されます。