「where」条件でCol Maximum Formulaを使用するにはどうすればよいですかこんにちは、他のすべての国へのベンチマークとして新しい列を策定したいという問題があります。 その国の行がさらにある場合は、その最大値をベンチマークとして使用したいと考えています。 明確にするために、以下の例を参照してください。
データの種類は次のようになります。
国 値の期間
A10 201301
A30 201301
B20 201301
C 50 201301
D 40 201301
私が達成したいこと(セル式で):最大列(:値、:期間、:国)どこで :country == "A"
出力:
国 値 期間 ベンチマーク
10 201301 30
A 30 201301 30
B 20 201301 30
C 50 201301 30
D 40 201301 30
ご覧のとおり、A 国のみの最大値をベンチマークしたいと思います。
Col Maximum (:value, :period, :country == "A") を試したところ、「50」が返されます
Col Maximum (:value, :period, :country) と Col Maximum (:value, :period, :country == "A") は両方とも "50" を返します
これには簡単な解決策があると確信しています!
皆さんが助けてくれることを願っています!
どうもどうも!
Re: "where" 条件で Col Maximum Formula を使用するにはどうすればよいですかありがとう。Re: "where" 条件で Col Maximum Formula を使用するにはどうすればよいですかCol Maximum() は、行ごとの分離結果が出力である式でのみ実行可能です。必要なことを行うには、Summarize() 関数を使用します。
見る:
ヘルプ==>スクリプト インデックス==>要約
Re: "where" 条件で Col Maximum Formula を使用するにはどうすればよいですかハイマーク、
は、年齢または性別ごとに最大体重を取得しようとしましたが、次のスクリプトでは 1 つの値しか生成しませんでした。
年齢別では、6 つの異なる年齢がありました。それぞれについて、各年齢の最大重量を計算したいと思います。
Names Default To Here( 1 );
Clear Log();
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
max_weight_by_age = Col Max( :weight, :age );
max_weight_by_sex = Col Max( :weight, :sex );
Re: "where" 条件で Col Maximum Formula を使用するにはどうすればよいですかこの数式を Big Class サンプル データ テーブルの新しい列に追加できます。
Col Max( :weight, :age )
Re: "where" 条件で Col Maximum Formula を使用するにはどうすればよいですかハイマーク、
col Max を使用するときに を使用する方法の例を教えてください。
ありがとう。Re: "where" 条件で Col Maximum Formula を使用するにはどうすればよいですか[ヘルプ] > [スクリプト インデックス] > [関数] を参照してください。

Re: "where" 条件で Col Maximum Formula を使用するにはどうすればよいですかありがとう、ジム、私は要約だけを意味していました。 私がそれを行う方法は次のとおりです(2つのjslコマンド):
列を集計し、値 (列の最小/最大/またはその他の統計) を使用して新しいテーブルを作成します。
次に、行エントリを照合することにより、要約テーブルを使用してメイン テーブルを更新します。
Max col() コマンドに、一意の列値を識別し、この余分な手順の必要性を排除できる条件付きオプションがあるかどうかに興味がありました。 (余分なテーブルと2つの余分なステップがなくなります)。
あなたの助けに感謝。
Re: "where" 条件で Col Maximum Formula を使用するにはどうすればよいですか私は通常、Summary Platform ではなく Summarize() 関数を使用して、列内のどのレベルが見つかったかを簡単に判断します。次に、そこから、仕事を完了するために必要な数式を生成するだけです。
Re: "where" 条件で Col Maximum Formula を使用するにはどうすればよいですか国列に複数の名前があり、考えられるすべての値がわからない場合を考えてみましょう。 それを行うために、このクエリをどのように調整できますか。
要約テーブルを作成してからテーブルを更新することでそれを行うことができますが、それは非効率的な方法のようで、このような単一のステップで実行できるかどうか興味がありました.
前もって感謝します。
Re: "where" 条件で Col Maximum Formula を使用するにはどうすればよいですか返事が遅れて申し訳ありません! 解決策をありがとう!Re: "where" 条件で Col Maximum Formula を使用するにはどうすればよいですかあなたのニーズを述べた方法を考えると、複数のエントリがある国を知っていると仮定します。
dt = Current Data Table();
rowperiod = :Period[Row()];
Max(
:Value[dt << get rows where(
:Country == "A" & :period == rowperiod
)]
);
Re: "where" 条件で Col Maximum Formula を使用するにはどうすればよいですか
@ほぎ書きました:ありますか一行コマンド平均計算から女性を削除しますが、値を「女性」でそれぞれの行に書き込みますか?
つまり、次のようなものです。
Col Mean( :weight, :age, where( :sex == "M" ) )
?
Re: "where" 条件で Col Maximum Formula を使用するにはどうすればよいですか方程式の :weight 列に If() を適用します

col Mean( if(:sex=="M", :weight,.), :age)
Re: "where" 条件で Col Maximum Formula を使用するにはどうすればよいですか素晴らしい!
そして、ロジック - あなたがそれを見るとき!
自分でこの解決策を見つけられなかったことに非常に失望しています。
Re: Col Maximum Formula を "where" 条件で使用するにはどうすればいいですか?うーん、少し熱中した後、少し落ち着きました。
Col Aggregation 内のifによって、特に if 内に文字の比較がある場合に非常に遅くなり、char(num) 変換がある場合は特に x 2 になります。その後、テーブル サイズが増加すると、時間はほぼ 2 乗に比例して増加します。
良い点: Col Median (私が最もよく使用する) はこの「バグ」の影響を受けません。:)
Col Min、Max、Mean などの簡単な解決策はありますか?
そうでない場合は、 where条件を使用してCol xyz を計算する公式の方法を実装するという要望を書きます...
最初にデータ セットを縮小し ( where )、次に集計し ( Col xyz )、値をそれぞれの行全体に分散すると、処理速度が大幅に速くなります。

もっと見る...Names Default To Here( 1 );
If( Is Empty( mydt ),
mydt = Open( "$SAMPLE_DATA/Big Class.jmp" )
);
trialRun = 0;
tryAgain = Function( {},
trialRun += 1;
Rownumbers = N Rows( mydt );
t1 = HP Time();
mydt << New Column( "col A", Formula( Col Mean( :weight ), :sex ) );
t2 = HP Time();
mydt << New Column( "col B", Formula( Col Mean( If( :age == 12, :weight, . ), :sex ) ) );
t3 = HP Time();
mydt << New Column( "col C", Formula( Col Mean( If( :sex == "M", :weight, . ), :age ) ) );
t4 = HP Time();
mydt << New Column( "col D", Formula( Col Mean( If( Char( :age ) == "12", :weight, . ), :age ) ) );
t5 = HP Time();
mydt << New Column( "col E", Formula( Char( :age ) == "12" ) );
t6 = HP Time();
tt1 = Round( (t2 - t1) / 1000000, 4 );
tt2 = Round( (t3 - t2) / 1000000, 4 );
tt3 = Round( (t4 - t3) / 1000000, 4 );
tt4 = Round( (t5 - t4) / 1000000, 4 );
tt5 = Round( (t6 - t5) / 1000000, 6 );
If( trialRun == 1,
tt1Ref = tt1;
tt2Ref = tt2;
tt3Ref = tt3;
tt4Ref = tt4;
tt5Ref = tt5;
RNref = Rownumbers;
);
tr1 = Round( tt1 / tt1Ref );
tr2 = Round( tt2 / tt2Ref );
tr3 = Round( tt3 / tt3Ref );
tr4 = Round( tt4 / tt4Ref );
tr5 = Round( tt5 / tt5Ref );
RNratio = Round( RowNumbers / RNref );
Wait( 0.1 );
Try( mydt << delete columns( "col A", "col B", "col C", "col D", "col E" ) );
Wait( 0.1 );
mydt = mydt << Concatenate( mydt, mydt, mydt );
Wait( 0.1 );
If(
ex = New Window( "results",
<<TYPE></TYPE></CODE><NOSCRIPT><CODE class=" language-jsl"><DIV class="lia-spoiler-noscript-container"><DIV class="lia-spoiler-noscript-content">名前のデフォルトは Here( 1 ); If( Is Empty( mydt ), mydt = Open( "$SAMPLE_DATA/Big Class.jmp" ) ); trialRun = 0; tryAgain = Function( {}, trialRun += 1; Rownumbers = N Rows( mydt ); t1 = HP Time(); mydt << New Column( "col A", Formula( Col Mean( :weight ), :sex ) ); t2 = HP Time(); mydt << New Column( "col B", Formula( Col Mean( If( :age == 12, :weight, . ), :sex ) ) ); t3 = HP Time(); mydt << New Column( "col C", Formula( Col Mean( If( :sex == "M", :weight, . ), :age ) ) ); t4 = HP Time(); mydt << New Column( "col D", Formula( Col Mean( If( Char( :age ) == "12", :weight, . ), :age ) ) ); t5 = HP Time(); mydt << New Column( "col E", Formula( Char( :age ) == "12" ) ); t6 = HP Time(); tt1 = Round( (t2 - t1) / 1000000, 4 ); tt2 = Round( (t3 - t2) / 1000000, 4 ); tt3 = Round( (t4 - t3) / 1000000, 4 ); tt4 = Round( (t5 - t4) / 1000000, 4 ); tt5 = Round( (t6 - t5) / 1000000, 6 ); If( trialRun == 1, tt1Ref = tt1; tt2Ref = tt2; tt3Ref = tt3; tt4Ref = tt4; tt5Ref = tt5; RNref = Rownumbers; ); tr1 = Round( tt1 / tt1Ref ); tr2 = Round( tt2 / tt2Ref ); tr3 = Round( tt3 / tt3Ref ); tr4 = Round( tt4 / tt4Ref ); tr5 = Round( tt5 / tt5Ref ); RNratio = Round( RowNumbers / RNref ); Wait( 0.1 ); Try( mydt << delete columns( "col A", "col B", "col C", "col D", "col E" ) ); Wait( 0.1 ); mydt = mydt << Concatenate( mydt, mydt, mydt ); Wait( 0.1 ); If( ex = New Window( "results", < <TYPE></TYPE></DIV></DIV>
In a previous version I had "ms" in the table instead of seconds. Unfortunately, it's 1000x more severe ...
Re: 「where」条件で Col Maximum 式を使用するにはどうすればよいですか興味深い質問です - 答えを待っていますか?
を制限する方法については、同様の質問が寄せられた一連の投稿があります。 Col ... 集計特定のサブセットに対して機能します。
(主に、除外されていない行のサブセットに制限します)
使用する観測値を制限しながら列平均を計算する
JMP10: Col Max() 関数と Col Min() 関数は除外された行からデータを返しました
列の関数と行の状態
アイデア:
平均身長に興味がある場合は、すべての行を集計することも、男性と女性のエントリを個別に集計することもできます。
2 番目の解決策は、最初の解決策とほぼ同じくらい簡単です。追加の GroupBy 変数を使用して、必要なデータと不要なデータを分割するだけです。
ただし、ユーザーがさらに必要とするものは次のとおりです。値はそれぞれの行すべてに表示されるはずです (つまり、女性の場合も)。
[元の投稿のベンチマーク列の例は、そのような動作がなぜ理にかなっているかを示しています。
GroupBy を使用すると、正しい値を取得するのは簡単ですが、それらをすべての行に分散する方法は異なります。
背後にルックアップテーブルのようなものがある場合Col ... 集計関数の場合、関数は同じ識別子を使用します
1) 集計のために行を異なるグループに分割します (「M」/「F」):
ジュディは女性です。ジュディの行の体重は次の値に含める必要があります。女性の平均体重
2) ルックアップ テーブルからエントリを読み取るときのインデックスとして (「M」/「F」):
ジュディは女性です。新しい列には次の内容が含まれている必要があります。女性の平均体重ジュディの列で
つまり、識別子が同じであるために男性と女性は同じ値を取得するか (mean1)、識別子が異なるために異なる値を取得します (mean2)。
したがって:
JmpユーザーできるGroupBy 機能を使用して、次のように計算から値を削除します。
-計算するサブグループごとに異なる値
- 不要な結果をダンプする
しかしその後、彼は得ます
-得るサブグループごとに異なる値
無料 - たとえ彼がこのオプションを注文しなかったとしても(OK、コードは別の話をします - しかし、ユーザーが何を望んでいたか考えてみましょう):)
ありますか一行コマンド平均値の計算から女性を削除しますが、値をそれぞれの行に「女性」と書き込むにはどうすればよいですか?
Names Default to Here(1);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt << New Column("mean1", Formula(Col Mean(:weight, :age)));
dt << New Column("mean2", Formula(Col Mean(:weight, :age, :sex)));
dt << New Column("mean2", Formula(If(:sex=="M", Col Mean(:weight, :age, :sex))));
dtM = dt << subset( Rows( dt << get rows where( :sex== "M" ) ), selected columns( 0 ));
dtM << New Column("mean_M", Formula(Col Mean(:weight, :age)));
dt << Update(
With( dtM ),
Match Columns(:age = :age ),
Add Columns from Update Table( :mean_M ),
Replace Columns in Main Table( None )
);
Re: 「where」条件で Col Maximum 式を使用するにはどうすればよいですか物事をスピードアップするためのアプローチ桁違いに大きい(!!!):
非常に遅いコル・ミーンの代わりにif ステートメント内の文字比較を使用する:
mydt << New Column( "col C", Formula( Col Mean( If( :name=="Robert", :weight, . ), :age ) ) );
使用@cwilldenのトリック: GroupBy 引数として比較を使用します。
解決済み: Re: 列式内の条件を満たす行を取得する - JMP ユーザー コミュニティ
mydt << New Column( "col C", Formula(if(:name=="Robert" , Col Mean( :weight, :age, :name=="Robert" ),. ) );
データを 2 つのグループに分割します: 必要なデータと不要なデータ (@10k 行のスクリーンショット -> 2000 倍高速化 
.. 次に、Col Mean 集計の外側の if ステートメントを介して不要な結果を削除します。
コラムの比較と合わせて:セックスこのアプローチは過剰設計になります。これが私がに切り替えた理由です:名前概念を説明するために比較します。
これも一種の過剰設計ですが、アイデアが明確になることを願っています:)

もっと見る...
Re: 「where」条件で Col Maximum 式を使用するにはどうすればよいですかさっき気付いた:
- そのトリックはうまくいきません
:name=="ロバート"
これは特殊なケースのようです - 比較は単に無視されます (Jmp 16 および 17.1 では)。
変 ...
- 新しい可能性 (GroupBy として条件 (!) を使用すること) と速度の向上に熱中していたにもかかわらず、多かれ少なかれ、Group By オプションを使用した Col 集計という出発点に戻ってきたことを完全に見逃していました。
したがって、ここで説明されているように、「他の」行に値を入力するという実際の目標には達しませんでした。
Col-Minimum-Formula-with-a-quot-where-quot/mp/571889/highlight/true#M78145 を使用する方法
しかし、回避策があります。
New Column( "newcol", Formula(Col Mean( if(:sex=="M",:weight,.), :age ) ));
遅い Col Mean 内には Group By オプションだけがあることに注意してください
...次に、高速 Col Median を使用して値を他の行に分散します。
New Column( "newcol", Formula(Col Median(If(:sex =="M" ,Col Mean( :weight, :age, :sex),.),:age) ));
さらに、このトピックは Jmp 開発チームからも注目を集めました。
Col Median (およびその他): 「どこに」オプションを追加します
@SamGardner書きました:
ステータスは次のように変更されました:私たちはそれが好き! (行列に並んでいる)...私たちは、JMP 全体での Where( ) 句の使用方法を改善する方法に取り組んでいます。
この問題に対するもっと簡単な解決策がすぐに見つかるようです:)
Re: Col Maximum Formula を "where" 条件で使用するにはどうすればいいですか?おもしろい事実:
文字列のリスト内で「M」を検索すると、「M」を文字列と比較するよりも桁違いに高速になります。

Names Default To Here( 1 );
If( Is Empty( mydt ),
mydt = Open( "$SAMPLE_DATA/Big Class.jmp" )
);
tryAgain = Function( {},
write ("\!nrows: ", nrows(mydt),"\!n");
t0 = HP Time();
mydt << New Column( "char=char", Formula( Col Mean( If( :sex == "M", :weight, . ), :age ) ) );
t=(HP Time()- t0)/1000000;
write("char=char: ",t,"\!n");
t0 = HP Time();
mydt << New Column( "contains", Formula( Col Mean( If( contains(Eval List({:sex[]}) ,"M"), :weight, . ), :age ) ) );
t=(HP Time()- t0)/1000000;
write("contains: ",t,"\!n");
If(
ex = New Window( "",
<<TYPE></TYPE><BR />why?!?<BR />Which secret is behind this finding?
Re: Col Maximum Formula を "where" 条件で使用するにはどうすればいいですか?2025 - JMP19 では、文字列の比較速度が大幅に向上しました。
いいね!
それに加えて、提案された
col Mean(:weight, :age, where(not(excluded())))
レポートの列の変換に導入されました。次のようにコンパクトになりました。

一方、例えば:sex="男性"に制限された集計の正しい式を得ることは依然として非常に困難です。
<SPAN class="token function">if<SPAN class="token punctuation">(</SPAN><SPAN class="token punctuation">:</SPAN>sex<SPAN class="token operator">==</SPAN><SPAN class="token string">"M"& not(excluded()),<BR /></SPAN> col Max</SPAN><SPAN class="token punctuation">(</SPAN><SPAN> </SPAN><SPAN class="token function">if</SPAN><SPAN class="token punctuation">(</SPAN><SPAN class="token punctuation">:</SPAN>sex<SPAN class="token operator">==</SPAN><SPAN class="token string">"M"</SPAN><SPAN class="token punctuation">,</SPAN><SPAN> </SPAN><SPAN class="token punctuation">:</SPAN>weight<SPAN class="token punctuation">,</SPAN><SPAN class="token punctuation">.</SPAN><SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">,</SPAN><SPAN> </SPAN><SPAN class="token punctuation">:</SPAN>age, excluded()<SPAN class="token punctuation">)<BR /> , .<BR />);</SPAN>
例えば
col Max(:weight, :age, @excluded, where(:sex=="M"))
大いに役立つでしょう。
うーん: Col Median (およびその他): 「どこ」オプションを追加: 3.5 年で 1 Kudo?! 奇妙です。