「get rows where」条件で複数の列間で最大値を使用する方法それは簡単な質問のように思えますが、私はそれを解決するのに苦労しています...
私はこの種のデータテーブルを持っています:

私のスクリプトでは、パラメーター「dim」である 64 まで続きます。
すべての median_range_mm 1, 2 , 3 ... の最大値と最小値を 64 まで探しています。 しかし、target_status が 5 または 9 以外の行を JMP に表示させたくありません。
ご覧のとおり、ターゲット ステータスが 10 の場合、39996 で範囲を超えています。
私のコードで理解しやすいです:
maxValueVar = 0 ;
maxValue = Max( :median_range_mm [dt << get rows where( :target_status == 5 | :target_status == 9 ) ] );
minValue = Min( :median_range_mm[dt << get rows where( :target_status == 5 | :target_status == 9 )] );
For( p = 2, p <= dim, p++,
name = Column(dt, "target_status " || Char( p ));
nom = Column(dt, "median_range_mm " || Char( p )); // browse every columns of median_range_mm
MaxValueVar = Col Max( nom [dt << get rows where ( name == 5 | name == 9 )] );
If(
maxValueVar > maxValue, maxValue = maxValueVar,
minValueVar < minValue, minValue = minValueVar
);
);
パラメータ化していない最初の列で機能することに注意してください。 また、コメントすると機能します
[dt << get rows where ( name == 5 | name == 9 )]
「get rows where」または「column max ()」がどのように機能するかについてのアイデアはありますか?
ありがとう
Re: "get rows where" 条件で複数の列の間で max を使用する方法@txnelson
@uday_guntupalli
回答ありがとうございます。 たぶん、私は自分の問題を実際に述べるのに十分明確ではありませんでした。
主なブロック ポイントは、列 "target_status" のフィルターを使用して、列 "median_range_mm" の最大値をコードで取得できることです。
maxValue = Max( :median_range_mm [dt << get rows where( :target_status == 5 | :target_status == 9 ) ] ); // ==> OK
minValue = Min( :median_range_mm[dt << get rows where( :target_status == 5 | :target_status == 9 )] ); // ==> OK
しかし、列を反復処理すると:
For( p = 2, p <= dim, p++,
name = Column("target_status " || Char( p ));
nom = Column("median_range_mm " || Char( p ));
MaxValueVar = Max( nom [dt << get rows where ( name == 5 | name == 9 )] );</CODE></PRE><P>MaxValueVar と MinValueVar はデータを取得しません "." (そうだと思います<SPAN>数値列の欠損値文字)</SPAN> .</P><P>デバッグウィンドウでは、「name」と「nom」のタイプが重要だと思います。 カラムタイプではありません...</P><P> </P><P>アイデアは、「名前」が列「target_status 2」、次に3、4の... pで反復されるということです。</P><P>列「median_range_mm 2」である「nom」と同じ考え、次に3、4 ....</P><P>したがって、p = 2 の場合、「target_status 2」== 5 または 9 である median_range_mm 2 の最大値を探しています。</P><P>次に p = 3 ... 64 まで</P><P> </P><P>最後に、「median_range_3 の最大値」 > 「median_range_2 の最大値」の場合、「median_range_3 の最大値」は maxValue になります。</P><PRE><CODE class=" language-jsl">If(
MaxValueVar > maxValue, maxValue = MaxValueVar,
MinValueVar < minValue, minValue = MinValueVar
);
読んでくれてありがとう、
Re: "get rows where" 条件で複数の列の間で max を使用する方法これはあなたがやろうとしていることの解決策になるかもしれないと思います
min_value = Col Quantile( If( Row() <=64 & ( :target_status == 5 |
:target_status == 9 ),
:median_range_mm
,
.
), .5<BR />);Re: "get rows where" 条件で複数の列の間で max を使用する方法@Rob128 、
私はあなたが何を望んでいるのかを正確に理解するのに苦労していますか?いくつかの手順を試してみましょう。
以下は、あなたが試したように、target_statusが5または9のすべての行を提供するはずです。
SR = dt << Select Where(:target_status ==5 | :target_status ==9) << get selected rows;
これで、条件が満たされた行のリストができました。あなたの質問が最小値と最大値であることを理解したら、次に必要なことは何ですか?
MedianValues = dt:median_range_mm << Get Values;
MedianValuesDes = MedianValues[SR]; // Filter out and get only the rows with target status of 5 or 9
MaxVal = Max(MedianValuesDes );
MinVal = Min(MedianValuesDes );
他にも多くの方法があると確信していますが、考えに従うことができるように、いくつかのステップに分けようとしています。 これがあなたの求めているものではない場合、あなたが求めているものをもう少し明確に説明していただけますか?