値の選択と新しい列へのコピーおい、
(かなり簡単に見える)を自動化しようとしています値の選択、列の作成、コピー/ペーストしかし、そのプロセスに適したスクリプトのコンパイルが見つかりません。
1) 作成する必要があります3 つの新しいコラム1 つとは異なる値の選択を追加する同じソース列これら 3 つの新しい列のそれぞれに、サブセットそれぞれの選択のすべての列が埋められたとき。
2) サブセットの名前は、元のソース ファイルのヘッダーと新しい付録に対応する必要があります。
注意してください:
私が持っているデータ ファイルでは、列の位置と行の数が異なりますが、名前はすべて同じです。
これら 2 つのスクリプトを試してみましたが、もちろん正しくありませんでしたが、機能させるために正確に何を変更すればよいのかわかりません。 助言がありますか?
バージョン 1:
Names Default To Here( 1 );
dt = Current Data Table();
//Select values to copy into new column
vals 1 = Select Where (:p-value (two-sided test)2 <= 0,09); //it seems that the "2" in the column name is confusing, but unfortunately, it would take a long time to go through all tables and change the column name
// Put these in a new column 1
dt = NewColumn("sign_0,09", Numeric, Continuous, Values(vals1));
Wait( 5 );
//Column 2
vals 2 = Select Where (:p-value (two-sided test)2 <= 0,05);
dt<<GET selected="" rows="" dt="NewColumn("sign_0,05"," numeric=""></GET>
バージョン 2:
Names Default To Here( 1 );
dt = Current Data Table();
dt << :p-value (two-sided test)2 = [1,?]; //the end row varies and must be found automatically
results << New Column("sign_0,09", Numerical, Continuous);
For( i = 1, i <= NItems( "p-value (two-sided test)2"), i++,
results << Select Where (:p-value (two-sided test)2 <= 0,09) );
selRows = results << getSelectedRows;
AsColumn( results, "sign_0,09" )[selRows] = "p-value (two-sided test)2"[i];
//same process for 2 other new columns
dt<<SUBSET dt=""><< Select where :sign_0,09 != "";
dt<< Get selected rows
//the new name should be automatically given, too, is that possible?
dt << Subset( Output Table( "name as in original file plus _0,09 at the end" ), Selected Rows( 1 ), selected columns( 0 ) );
//same process for other 2 columns</SUBSET>
これまでのスレッドでは、新しいデータテーブルにコピー/ペーストすることがよくありますが、新しい列に「決して」ではなく、ほとんどが文字列の選択に関連しているようです。 選択が数値データでも同じように機能するかどうかはわかりません。
助けてくれてありがとう!
Re: 値の選択と新しい列へのコピー私の場合は役に立たなかったので、表示機能を除いた完全版をここに示します。
ご協力いただきありがとうございます!
dt = Current Data Table(); // Assuming the data table is open
/* Step 1 - add 3 columns */
dt << New Column("sign_0,09",Numeric,Continuous)
<< New Column("sign_0,05",Numeric,Continuous)
<< New Column("sign_0,01",Numeric,Continuous);
// Getting the values of column of interest
ColVals = dt:Name("p-value (two-sided test) 2") << Get Values;
// Set up a dummy matrix
Dummy = J(NRows(dt),1,.);
// All Rows
AllRows = Index(1,NRows(dt),1);
/* Step 2 - Select from the column based on conditions */
/* This could also be replaced by loop */
SR1 = dt << Get Rows Where(:Name("p-value (two-sided test) 2") <= 0.09);
//do not change "." to "," as the programme uses "." for background calculation
Dummy[SR1,0] = ColVals[SR1];
dt:Name("sign_0,09") << Set Values(Dummy);
// Re-initialize dummy matrix
Dummy = J(NRows(dt),1,.);
SR2 = dt << Get Rows Where(:Name("p-value (two-sided test) 2") <= 0.05);
Dummy[SR2,0] = ColVals[SR2];
dt:Name("sign_0,05") << Set Values(Dummy);
// Re-initialize dummy matrix
Dummy = J(NRows(dt),1,.);
SR3 = dt << Get Rows Where(:Name("p-value (two-sided test) 2") <= 0.01);
Dummy[SR3,0] = ColVals[SR3];
dt:Name("sign_0,01") << Set Values(Dummy);
/* End of Step 2 */
/* Step 3 */
dt << Select Where (Name("p-value (two-sided test)2") <= 0.09);
dt << Subset( Output Table( "new_0,09" ), Selected Rows( 1 ), selected columns( 0 ) );
dt << Select Where (Name("p-value (two-sided test)2") <= 0.05);
dt << Subset( Output Table( "new_0,05" ), Selected Rows( 1 ), selected columns( 0 ) );
dt << Select Where (Name("p-value (two-sided test)2") <= 0.01);
dt << Subset( Output Table( "new_0,01" ), Selected Rows( 1 ), selected columns( 0 ) );
/* End of Step 3 */
Re: 値の選択と新しい列へのコピー私の場合は役に立たなかったので、表示機能を除いた完全版をここに示します。
ご協力ありがとうございます!
dt = Current Data Table(); // Assuming the data table is open
/* Step 1 - add 3 columns */
dt << New Column("sign_0,09",Numeric,Continuous)
<< New Column("sign_0,05",Numeric,Continuous)
<< New Column("sign_0,01",Numeric,Continuous);
// Getting the values of column of interest
ColVals = dt:Name("p-value (two-sided test) 2") << Get Values;
// Set up a dummy matrix
Dummy = J(NRows(dt),1,.);
// All Rows
AllRows = Index(1,NRows(dt),1);
/* Step 2 - Select from the column based on conditions */
/* This could also be replaced by loop */
SR1 = dt << Get Rows Where(:Name("p-value (two-sided test) 2") <= 0.09);
//do not change "." to "," as the programme uses "." for background calculation
Dummy[SR1,0] = ColVals[SR1];
dt:Name("sign_0,09") << Set Values(Dummy);
// Re-initialize dummy matrix
Dummy = J(NRows(dt),1,.);
SR2 = dt << Get Rows Where(:Name("p-value (two-sided test) 2") <= 0.05);
Dummy[SR2,0] = ColVals[SR2];
dt:Name("sign_0,05") << Set Values(Dummy);
// Re-initialize dummy matrix
Dummy = J(NRows(dt),1,.);
SR3 = dt << Get Rows Where(:Name("p-value (two-sided test) 2") <= 0.01);
Dummy[SR3,0] = ColVals[SR3];
dt:Name("sign_0,01") << Set Values(Dummy);
/* End of Step 2 */
/* Step 3 */
dt << Select Where (Name("p-value (two-sided test)2") <= 0.09);
dt << Subset( Output Table( "new_0,09" ), Selected Rows( 1 ), selected columns( 0 ) );
dt << Select Where (Name("p-value (two-sided test)2") <= 0.05);
dt << Subset( Output Table( "new_0,05" ), Selected Rows( 1 ), selected columns( 0 ) );
dt << Select Where (Name("p-value (two-sided test)2") <= 0.01);
dt << Subset( Output Table( "new_0,01" ), Selected Rows( 1 ), selected columns( 0 ) );
/* End of Step 3 */
Re: 値の選択と新しい列へのコピー@ジェフ・パーキンソン
ありがとう、ジェフ、
あなたの投稿を読むのが遅すぎました。 あなたが提案した選択にサブセットの作成部分を追加したところですが、自動化された名前の作成を除けば、完全に機能します。 ご提案ありがとうございます。
dt = Current Data Table();
dt << New Column( "sign_0,09",
Numeric,
"Nominal",
Format( "Best", 9 ),
Formula(
If( :Name( "p-value (two-sided test) 2" ) <= 0.09,
:Name( "p-value (two-sided test) 2" )
)
)
);
dt << New Column( "sign_0,05",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula(
If( :Name( "p-value (two-sided test) 2" ) <= 0.05,
:Name( "p-value (two-sided test) 2" )
)
)
);
dt << New Column( "sign_0,01",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula(
If( :Name( "p-value (two-sided test) 2" ) <= 0.01,
:Name( "p-value (two-sided test) 2" )
)
)
);
/* Step 3 */
// We already have the rows that meet the conditions
dt << Select Where (Name("p-value (two-sided test)2") <= 0.09);
dt << Subset( Output Table( "new_0,09" ), Selected Rows( 1 ), selected columns( 0 ) );
dt << Select Where (Name("p-value (two-sided test)2") <= 0.05);
dt << Subset( Output Table( "new_0,05" ), Selected Rows( 1 ), selected columns( 0 ) );
dt << Select Where (Name("p-value (two-sided test)2") <= 0.01);
dt << Subset( Output Table( "new_0,01" ), Selected Rows( 1 ), selected columns( 0 ) );
/* End of Step 3 */ Re: 値の選択と新しい列へのコピーRe: 値の選択と新しい列へのコピー@uday_guntupalli
私のデータ(あなたのバージョンと、 @Mark_Bailey ) 列を作成し、選択したデータを新しい列に取得します。
ただし、選択された行を表示する最後の部分 (以下を参照) は機能しません。 Select WhereとCreate Subsetで調整しました。
/* Step 3 */
// We already have the rows that meet the conditions
Show(SR1);
Show(SR2);
Show(SR3);
/* End of Step 3 */
/* Step 3 */
dt << Select Where (Name("p-value (two-sided test)2") <= 0.09);
dt << Subset( Output Table( "new_0,09" ), Selected Rows( 1 ), selected columns( 0 ) );
dt << Select Where (Name("p-value (two-sided test)2") <= 0.05);
dt << Subset( Output Table( "new_0,05" ), Selected Rows( 1 ), selected columns( 0 ) );
dt << Select Where (Name("p-value (two-sided test)2") <= 0.01);
dt << Subset( Output Table( "new_0,01" ), Selected Rows( 1 ), selected columns( 0 ) );
/* End of Step 3 */
Re: 値の選択と新しい列へのコピーさらに詳しい情報を投稿していただきありがとうございます。参考になります。新しい列を作成して JSL を通じて値を入力する代わりに、式を含む 3 つの新しい式ベースの列を作成するだけです。
If( :Name( "p-value (two-sided test) 2" ) <= 0.09,
:Name( "p-value (two-sided test) 2" )
)

dt = Open( "seas_ratio_1_monthly.jmp" );
dt << New Column( "sign_0.09",
Numeric,
"Nominal",
Format( "Best", 9 ),
Formula(
If( :Name( "p-value (two-sided test) 2" ) <= 0.09,
:Name( "p-value (two-sided test) 2" )
)
)
);
dt << New Column( "sign_0.05",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula(
If( :Name( "p-value (two-sided test) 2" ) <= 0.05,
:Name( "p-value (two-sided test) 2" )
)
)
);
dt << New Column( "sign_0.01",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula(
If( :Name( "p-value (two-sided test) 2" ) <= 0.01,
:Name( "p-value (two-sided test) 2" )
)
)
);
しかし、特定のレベルで重要な行のみを含むデータ テーブルの値がどのようなものになるのか、まだよくわかっていないことを認めなければなりません。 これらのテーブルをどのように使用するつもりですか? 3 つの重要度インジケーター列 (つまり、sign_0,09、sign_0,05、sign_0,01) がすべて必要ですか? そうでない場合は、これらの列をまとめて作成することを避け、各レベルより小さい行をサブセット化するだけで済みます。 最終的な目標と、説明したようなデータ テーブルが必要な理由について詳しく教えていただけますか? もっと簡単な方法を提供できるかもしれません。
Re: 値の選択と新しい列へのコピーこのアプローチはわかりますが、選択された行の状態を変更することを伴うより簡単な方法があります。 これの代わりに:
SR1 = dt << Select Where(:Name("p-value (two-sided test) 2") <= 0.09) << Get Selected Rows; <BR />// You can edit this to conform to european convention of 0,09
dt << Clear Select;
これだけで使えます:
SR1 = dt << Get Rows Where(:Name("p-value (two-sided test) 2") <= 0.09)
// You can edit this to conform to european convention of 0,09
こうすることで、現在の行の選択が妨げられなくなります。
Re: 値の選択と新しい列へのコピーそれは素晴らしいですね。 できるだけ早くテストします。
3 つの新しい列内の共通要素を参照する場合、これは各列に追加される選択された値に関する場合にのみ当てはまります。
たとえば、値 <= 0,01 の選択は 0,05 および 0,09 の列にも表示され、値 <= 0,05 の値は 0,09 にも表示されます。
簡略化:
A = [ 0,01 、 0,05 ,0,09]
B = [ 0,01 、 0,05 】
C = [ 0,01 】
ただし、他のパターンや種類の「2 行おきが 3 行すべてで等しい」構造は存在しません。
したがって、はい、行列を操作してプロセス全体をよりスムーズにする方法があるかもしれません。
A <SPAN class="token operator">=</SPAN> <SPAN class="token punctuation">[</SPAN><SPAN class="token number">1</SPAN><SPAN class="token punctuation">,</SPAN><SPAN class="token number">2</SPAN><SPAN class="token punctuation">,</SPAN><SPAN class="token number">3</SPAN><SPAN class="token punctuation">,</SPAN><SPAN class="token number">4</SPAN><SPAN class="token punctuation">,</SPAN><SPAN class="token number">5</SPAN><SPAN class="token punctuation">,</SPAN><SPAN class="token number">6</SPAN><SPAN class="token punctuation">]</SPAN><SPAN class="token punctuation">;</SPAN>
B <SPAN class="token operator">=</SPAN> <SPAN class="token punctuation">[</SPAN><SPAN class="token number">1</SPAN><SPAN class="token punctuation">,</SPAN><SPAN class="token number">2</SPAN><SPAN class="token punctuation">,</SPAN><SPAN class="token number">3</SPAN><SPAN class="token punctuation">]</SPAN><SPAN class="token punctuation">;</SPAN>
C <SPAN class="token operator">=</SPAN> <SPAN class="token punctuation">[</SPAN><SPAN class="token number">3</SPAN><SPAN class="token punctuation">,</SPAN><SPAN class="token number">5</SPAN><SPAN class="token punctuation">]</SPAN><SPAN class="token punctuation">;</SPAN>
Re: 値の選択と新しい列へのコピー@パッコ、
OK、これで目的の 90% は達成できるはずです。
dt = Current Data Table(); // Assuming the data table is open
/* Step 1 - add 3 columns */
dt << New Column("sign_0,09",Numeric,Continuous)
<< New Column("sign_0,05",Numeric,Continuous)
<< New Column("sign_0,01",Numeric,Continuous);
// Getting the values of column of interest
ColVals = dt:Name("p-value (two-sided test) 2") << Get Values;
// Set up a dummy matrix
Dummy = J(NRows(dt),1,.);
// All Rows
AllRows = Index(1,NRows(dt),1);
/* Step 2 - Select from the column based on conditions */
/* This could also be replaced by loop */
SR1 = dt << Select Where(:Name("p-value (two-sided test) 2") <= 0.09) << Get Selected Rows; // You can edit this to conform to european convention of 0,09
dt << Clear Select;
Dummy[SR1,0] = ColVals[SR1];
dt:Name("sign_0,09") << Set Values(Dummy);
// Re-initialize dummy matrix
Dummy = J(NRows(dt),1,.);
SR2 = dt << Select Where(:Name("p-value (two-sided test) 2") <= 0.05) << Get Selected Rows; // You can edit this to conform to european convention of 0,05
dt << Clear Select;
Dummy[SR2,0] = ColVals[SR2];
dt:Name("sign_0,05") << Set Values(Dummy);
// Re-initialize dummy matrix
Dummy = J(NRows(dt),1,.);
SR3 = dt << Select Where(:Name("p-value (two-sided test) 2") <= 0.01) << Get Selected Rows; // You can edit this to conform to european convention of 0,01
dt << Clear Select;
Dummy[SR3,0] = ColVals[SR3];
dt:Name("sign_0,01") << Set Values(Dummy);
/* End of Step 2 */
/* Step 3 */
// We already have the rows that meet the conditions
Show(SR1);
Show(SR2);
Show(SR3);
/* End of Step 3 */ <BR />@ジェフ・パーキンソン、
行列間の共通要素を見つける簡単な方法はありますか? Design() が役立つかもしれませんが、例を提供していただけますか
A = [1,2,3,4,5,6];
B = [1,2,3];
C = [3,5];
// The common element would be 3
連想配列と交差機能を使用できることはわかっていますが、行列には共通要素と非共通要素を簡単に判断する方法があるべきではありません。
Re: 値の選択と新しい列へのコピーこんにちは、ジェフさん
こちらもご覧いただきありがとうございます。
上記の返信にファイルを添付しました。 彼らが私の質問を明確にしてくれることを願っています。
Re: 値の選択と新しい列へのコピーRe: 値の選択と新しい列へのコピーおい、
ご意見ありがとうございます。 これはすでに知っておくと非常に役立ちます。
スクリプトのコピーを間違えてしまい申し訳ありません。 次回のために覚えておきます。
私がやろうとしていることをより明確にするために、結果がどのようになるかを段階的に示した概要を添付します。 ガイドがより明確になることを願っています。
例も jmp 形式で添付します。
助けてくれてありがとう!
Re: 値の選択と新しい列へのコピーあなたがやろうとしていることの説明を読みましたが、具体的な例がないと理解するのが困難です。 さらに、JSL はあなたが望んでいることを実行していないため、それを使ってあなたを助ける方法を推測することは困難です。
あなたがやろうとしていることについて、できれば問題のデータテーブルのスクリーンショットと最終的に何をしたいのかについて、もう少し詳しく投稿していただけますか? そうすれば、コミュニティであなたをより直接的に支援できると思います。
ありがとう。
Re: 値の選択と新しい列へのコピー@パッコ、
どうやって助けられるか見てみましょう。 まず最初に、私からのお願いですが、コードを貼り付けるときは、コミュニティ メンバーがコードを読みやすくするために、「JSL」コード ブロックを使用して貼り付けてください。 さて、それが終わったら、コードを調べてみましょう。
1. vals 1 = 場所を選択 (:p-value (両側検定)2 <= 0,09); / /列名の「2」が紛らわしいようですが、残念ながらすべてのテーブルを調べて列名を変更するには時間がかかります
- このように複雑な名前を列に付けており、それを変更したくない場合は、 name() を使用することをお勧めします。したがって、上記の行は次のように書き直す必要があります。
vals1 = Select Where (Name("p-value (two-sided test)2 ")<= 0,09); // I don't know if you are using European convention for the comma instead of decimal2. ここで、select where ステートメントはデータ テーブルに発行されるメッセージであるため、上記のコード行は次のようにさらに洗練される必要があります。
vals1 = dt << Select Where (Name("p-value (two-sided test)2") <= 0,09); これらの提案を試していただき、サンプル データセットを提供していただければ、他の問題も解決できるよう努めます。