選択場所: JSL の現在の選択内容から選択する必要があります<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />複数の条件があるデータセットから行を選択したいのですが、「and」を含む単一の select where ステートメントを使用する代わりに、条件を一度に 1 つずつループして、現在の選択から選択したいと考えています。 これは、select where ウィンドウでは非常に簡単です (「現在の選択から選択」を使用します)。 JSL でこれを行うにはどうすればよいですか?
たとえば、列名のリスト cnames = {"Col1", "Col2", "Col3"} と値のリスト cspecs = {"a", "b","c} があり、データ テーブルの行 (Col1 = a、Col2 = b、および Col3 = c)。 cnames 内の項目をループし、毎回現在の選択項目から選択するように指示します。 ありがとう!
dt<<
select where(as column(cnames )==cスペック)
Re: Select Where: JSL の現在の選択から選択する必要がありますここのスクリプトに基づいて書いたコードを動作させようとしています。 診断列は文字列であるため、このコードは機能しません。 基本的にテーブルには 3 つの列があり、それぞれに ICD コードが含まれています。 ICDコードと一致する場合を選択したい。 ICD コードに一致する任意の列である必要があるため、ネストされた for ループになります。 コメントなしのコードは機能しますが、選択文字列に引用符が含まれていないため、おそらくそれが機能しない理由です。 これを修正するにはどうすればよいですか?
dt = Open( "\Main.jmp" );
colnames = {"Diagnosis 1", "Diagnosis 2", "Diagnosis 3"};
ICDcodes = { "7731", "7626", "V3001", "V3000"};
tblname = "Subset.jmp";
/*
dt << Select Where(
:Diagnosis 1 == "V3001",
Current Selection( "extend" )
);*/
select_string = "";
For (i = 1, i <= N Items(colnames), i++,
For (j = 1, j <= N Items(ICDcodes), j++,
if (select_string == "",
// then
// select_string = ":" || colnames[i] || " == " || char(ICDcodes[j]);
select_string = ":" || colnames[i] || " == " || char(ICDcodes[j]) ;
// else
,
select_string = select_string || " | " ||
":" || colnames[i] || " == " || char(ICDcodes[j]);
);
);
);
select_string = "dt << select where(" || select_string || ")";
eval(parse(select_string));
print(select_string);
// Create a subset table with GA <32 weeks.
dt << Subset( Output Table( tblname ), Selected Rows( 1 ), selected columns( 0 ) );
dt2 = data table(tblname);
dt2 << save();
//dt << clear select;Re: Select Where: JSL の現在の選択から選択する必要があります
To select a row without deselecting a previously selected row, combine << Select Where with
<< Select Where and the current selection("extend") argument. This is an alternative to
using an OR statement.
dt << Select Where( age == 14 );
dt << Select Where( sex == "F", current selection("extend"));
ムシャープ、
あなたが示した構文がどこから来たのかわかりません。JMP 12.1 スクリプト ガイドと現在のオンライン ドキュメントには、上に示したように正しいテキストが記載されています。
ありがとう。
ウェンディ
Re: Select Where: JSL の現在の選択から選択する必要がありますスクリプト ガイドでこれを更新してもらえますか?
//スクリプトガイド 336 ページ
dt = Open( "$SAMPLE_DATA\Big Class.jmp" );
dt << Select Where( 年齢 < 15 & 性別 == "F" );
//または
dt << Select Where( age == 14 );
dt << Extend Select Where( sex == "F" ); //何もしません
待機(10);
dt << Select Where( sex == "F", 現在の選択内容 ("extend")); //選択を拡張します
Re: Select Where: JSL の現在の選択から選択する必要がありますJMP 12 では、Select Where() の新しいオプションを提供し、現在の選択を拡張するか、制限するか、クリアするかを指定できます。 構文は次のとおりです。
dt << Select Where( condition, );
次の例は、現在の選択範囲を拡張する方法を示しています。
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt << Select Where( :Age == 14 );
Wait( 1 ); //For demonstration purposes
dt << Select Where(
:sex == "M",
Current Selection( "extend" )
);
お役に立てば幸いです!
ウェンディ
Re: Select Where: JSL の現在の選択から選択する必要がありますFor ループは、where 句より高速ではないにしても、同じくらい高速である必要があります。ただし、「For Each Row」はひどく遅いため、代わりに For (i=1,i<=NRows(dt),,i++ を使用してください)
Re: Select Where: JSL の現在の選択から選択する必要がありますほぼ同じ問題の解決策を探していましたが、これは本当に非常に巧妙です。なぜ以前にそれを評価するためのテキスト文字列を作成することを考えなかったのかわかりません...
選択場所: JSL の現在の選択内容から選択する必要がありますありがとう!文字列と数値列で少し注意が必要ですが、うまく機能しており、以前の状態よりも速度的には大幅に改善されました。
選択場所: JSL の現在の選択内容から選択する必要がありますおそらく、SELECT WHERE を一度に実行する方が効率的です。私は常に動的選択ステートメントを作成し、それを実行するために eval(parse()) を使用します。これは、選択を一度に行うように変更された MS の例です。
dt =開ける( "$ENGLISH_SAMPLE_DATA/Big Class.jmp" ) ;
名前= { "年" 、 "身長" 、 "重さ" } ;
cスペック= { 15 、 62 、 104 } ;
選択文字列= 「」 ;
のために(私= 1 、私<= N 個のアイテム(名前) 、私++、
もし(選択文字列== 「」 、
// それから
選択文字列= 「:」 ||名前[私】 || 「 == 」 ||チャー( cスペック[私]) ;
// それ以外
、
選択文字列=選択文字列|| 「&」 ||
「:」 ||名前[私】 || 「 == 」 ||チャー( cスペック[私]) ;
) ;
) ;
選択文字列= "dt << select where(" ||選択文字列|| ")" ;
評価(解析する(選択文字列)) ;
印刷する(選択文字列) ;
選択場所: JSL の現在の選択内容から選択する必要がありますありがとう - これは役に立ちます。 これを回避するために「行ごとに」を実行したため、パフォーマンスが低下しました。 あなたの提案は物事をスピードアップします。
選択場所: JSL の現在の選択内容から選択する必要があります現在選択されている行のリストを Select Where() の条件の一部として使用できます。 以下の例のように、反復ごとにリストを更新できます。
dt =開ける( "$ENGLISH_SAMPLE_DATA/Big Class.jmp" ) ;
名前= { "年" 、 "身長" 、 "重さ" } ;
cスペック= { 15 、 62 、 100 } ;
dt <<すべての行を選択;
のために(私= 1 、私<= N 個のアイテム(名前) 、私++、
選択された行= dt <<選択された行を取得する;
dt <<場所を選択してください(
そして(
列として(名前[私】 )[] < cスペック[私】 、
含まれています(選択された行、行() ) > 0 )
)
) ;