複数の条件に基づいて行を選択する
問題
複数の条件を満たすデータ テーブルの行を選択するとします。 または、いくつかの条件の 1 つを満たす行を選択したい場合もあります。
解決
次の例は、Select Where メッセージで論理 AND (&) および OR (|) 演算子を使用して、複数の条件を満たす行を選択する方法を示しています。詳細については、埋め込まれたコメントを参照してください。
/* Open a sample data table */
dt = Open( "$SAMPLE_DATA\Big Class.jmp" );
/* Select rows where students are over 13, who are also less than 65 inches tall */
dt << Select Where( :age > 13 & :height < 65 );
Wait( 2 ); // For demonstration purposes
/* Select rows where students are either 12 or 14 years old */
dt << Select Where( :age == 12 | :age == 14 );
Re: 複数の条件に基づいて行を選択する@rishdude23
列の数式は、行をネイティブに反復します。したがって、For() ループは不要です。Lag() 関数は、前の行の引数の値を返します。したがって、このようなものがうまくいくかもしれません。
Formula(
If(
(:age == Lag( :age, 1 )) & (:sex == Lag( :sex, 1 )), "Same age, same gender",
(:age != Lag( :age, 1 )) & (:sex == Lag( :sex, 1 )), "Diff age, same gender",
(:age == Lag( :age, 1 )) & (:sex != Lag( :sex, 1 )), "Same age, diff gender",
(:age != Lag( :age, 1 )) & (:sex != Lag( :sex, 1 )), "Diff age, diff gender"
)
)
それが役立つことを願っています。
この質問は Select Where() の使用とは関係ありませんが、列式に関するものです。このような質問は、多くのスクリプト担当者が回答できる一般的なディスカッション エリアに送信することをお勧めします。
Re: 複数の条件に基づいて行を選択する@ウェンディ_マーフリー
やあ、
「AgeSex_comp」という名前のビッグ データ jmp ファイルに、長い条件といくつかの条件を含む式を使用して、新しい列を書き込もうとしています。 前の行の年齢と性別の情報を次の行と比較して、同じか違うかを確認したいと思います。 ここに私が書いたスクリプトがありますが、動作しません。 私が間違っているアイデアはありますか?
dt = current data table();
dt << NewColumn("AgeSex_Comp", Character, Nominal, Formula(
FOR(i=1, i<= N Row(dt), i++,
if((:age[Row(i)] == :age[Row(i+1)]) & (:sex[Row(i)] == :sex[Row(i+1)]),"Same age, same gender",
(:age[Row(i)] != :age[Row(i+1)]) & (:sex[Row(i)] == :sex[Row(i+1)]),"Diff age, same gender",
(:age[Row(i)] == :age[Row(i+1)]) & (:sex[Row(i)] != :sex[Row(i+1)]),"Same age, diff gender",
(:age[Row(i)] != :age[Row(i+1)]) & (:sex[Row(i)] != :sex[Row(i+1)]),"Diff age, diff gender"
)
)
)
)