モードを見つける<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />皆さんこんにちは、
私は別の変数の各カテゴリの変数のモードを与える表の要約を作りたいと思います。
理想的には、これはうまくいくでしょう:
dt = open( "$ SAMPLE_DATA / Mail Messages.jmp");
dt << summary(Group(:From)、Mode(:To));
あるいは、「From」でテーブルを積み上げ、各行でモードを計算します。それでも、「モード」は表の要約や列の式ではオプションではありません。
モードを計算するどんな考えでもSASに送ることを含む歓迎されています。
JMP 10を使用しています。
ありがとうございました、
ロン
再:モードを見つける<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />ブレイディありがとう
これは、はるかに過激で堅牢なスクリプトです。
モードとして値が欠落する可能性を無効にするために、オプションのコード行を1つ追加します。
dt = open( "$ SAMPLE_DATA \ Cars.jmp");
dt2 = dt << summary(group(:Make、:R Leg));
//モードとして値が欠損する可能性を無効にするオプション
dt2 << Whereの選択(IsMissing(:R Leg))<<行の削除;
dt2 << selectwhere(colmaximum(:n行、:make)!=:n行)<< Delete Rows;
再:モードを見つける<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />どうもありがとうございました。
モードを扱う私はJMPプログラムの欠点のように見える2つの問題に出会いました。
1。観測値が1つしかない場合、配布プラットフォームはモードをまったく提供しません。さらに、結合頻度が1の場合も、何も返されません。これは、ヘルプファイル内の定義が、最も低い値を最も頻繁に表示するよう要求している場合には正しくないことを意味します。

2。列幅が長い(つまり12)頻度表を作成する場合、データ表を作成しても整数を復元できません。何らかの理由で、短縮番号のテキスト文字列が生成されます。

再:モードを見つける<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />これが有用かどうかはわかりませんが、JMPファイル交換でBrady BradyはModeを含む拡張された要約統計機能を提供するアドインを投稿しました。
http://support.sas.com/demosdownloads/downarea_t4.jsp?productID=111731&jmpflag=Y

再:モードを見つける<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />どうもありがとうございます。とても便利です。
この方法は、欠落データの頻度も評価するため、実際にはこの説明で言及されている他の選択肢よりも「正直」です。たとえば、次のスクリプトを実行すると、欠損値がモードとして返されます。
dt = open( "$ SAMPLE_DATA \ Cars.jmp");
mode_by_groups = Function({collist}、//列名のリスト
// collistの最後の列の検索モード
Summarize(g = by(Eval(collist))、n = Count());
X = Design(g [1]):* n;
i = Loc(V Max(Transpose(X == Repeat(V Max(X)、N Row(n)))));
//グループ化列を新しいテーブルに追加します
dt11 =新しいテーブル(「モード」);
For(k = 1、k <= N Items(collist)-1、k ++、
dt11 <<(New Column(char(collist)、キャラクター、設定値(g )));
);
//モードとNを追加
dt11 <<新しいColumn( "Mode of" || char(collist)、キャラクター、設定値(g ));
dt11 <<新しい列( "N"、値を設定(n ));
);
mode_by_groups({Make、R Leg});

Re:モードを見つける<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />これにより、意図した結果も得られると思います。
dt = open( "$ SAMPLE_DATA \ Cars.jmp");
dt2 = dt << summary(group(:Make、:R Leg));
dt2 << selectwhere(colmaximum(:n rows、:make)!=:n rows)<<行を削除;
乾杯、
ブレイディ
モードを見つけるこんにちは-モードは最も一般的な項目です,つまり、各送信者から最も多くの手紙を受け取った人(同点の場合はおそらく複数の人)を追うことになります。,そうですか?もしそうなら,次のようにすればうまくいくと思いますが、もっとエレガントで短い方法があるのは間違いありません。中間計算はすべて意図的に省略しています。,監査証跡を残すためにすべてのテーブルに名前を付けました:
dt1= 開ける ("$SAMPLE_DATA/メールメッセージ.jmp");
dt1<<セット名(「dt1」);
dt2=dt1<<概要(グループ(:から), N,サブグループ(:に) );
dt2<<セット名(「dt2」);
送信元=( dt2<<列名を取得する);
見せる(送信元;
// このリストの最初の 2 つの要素を破棄します。
削除する(送信元, {1, 2});
見せる(送信元;
// 積み重ねます。
dt3=dt2<<スタック(列(評価(送信元, ソースラベル列("ラベル" ), 積み上げデータ列("データ" ));
dt3<<セット名(「dt3」);
// dt3 には各人から各受信者に送信された手紙の数が含まれます。
dt4=dt3<<概要(グループ(:から), マックス( :データ) );
dt4<<セット名(「dt4」);
// dt4 には、各人から 1 人の受信者に送信された文字の最大数が含まれるようになりました。
dt5=dt4<<結合(と( dt3 ),
SelectWith ( : から ,: Label ,: Data ) ,
列を一致させることにより(:から= :から, :名前(「最大(データ)」 ) = :データ),
複数をドロップする(0, 0 ),
名前( "不一致も含む" )( 0 , 0 ) ,
メインテーブルの順序を維持(1 )
);
dt5<<セット名(「dt5」);
カラム(dt5, "ラベル") <<セット名(「受取人」);
/*
dt5には、各人から任意の受信者に送信された最大文字数が含まれるようになりました。
およびその受信者の名前(同点の場合は受信者全員)
*/
これで、アンがマイケルに4通、ジェフがマイケルに7通、ジョンがマイケルに12通、キャサリンがジョンに12通、といった具合になります。試してみて、必要な結果が得られるか確認してみませんか? 特定の送信者から特定の受信者が受信した手紙の最大数を取得するには、「:To」列と「:From」列を入れ替えるだけです。
モードを見つけるありがとう、ドードー。
問題なく動作します。
モードを見つけるこんにちは、ドードーさん、皆さん。
Dodo のソリューションは技術的には正しいですが、ビッグ データを処理する場合には役に立ちません。
よく考えてみると、スケーラブルな代替ソリューションがあります。
dt1 = Open( "$SAMPLE_DATA/Mail Messages.jmp" );
dt1 << 名前を設定します( "dt1" );
// 送信者による revcivers の分布を生成する
dt1 << 新しいスクリプト( "Distribution", Distribution( 名目分布( 列( :To ) ), By( :From ) ) );
Dist = Dt1 << スクリプトを実行( "Distribution" );
// 頻度表を 1 つのデータ テーブルとして抽出します。
dt2 = Report( dist[1] )["Frequencies"][Table Box( 1 )] << 結合されたデータテーブルを作成する;
dt2 << 名前を設定( "dt2" );
dist << ウィンドウを閉じる;
// データテーブルから「合計」行を削除します。これらは関連する頻度を表していません。
選択 = dt2 << Select Where( :Level == "Total" );
選択 << 行を削除;
// 各「From」のモード「To」を取得するために集計します
dt3 = データテーブル( "dt2" ) << Summary( Group( :From ), Max( :Count ), 統計列名の形式( "column" ), 元のデータテーブルへのリンク( 0 ) );
dt3 << 名前を設定します( "モード" );
// 要約テーブルを更新して「To」の値を取得します
dt3 << Update( With( データ テーブル( "dt2" ) ), 列の一致( :From = :From、 :Count = :Count ), 更新テーブルからの列の追加( :Level ) );
dt2 << ウィンドウを閉じる;
列( dt3, "レベル" ) << 名前を設定( "モード" );
モードを見つけるJMPでは、タスクを実行する方法が複数あることがよくあります。以前書いた関数を思い出しました。1つ以上の列でグループ化された最も頻出する項目を見つけるのに非常に効率的です。上記の方法の代替として、ここでこの関数を紹介します。結果はDodoの関数と似ており、Ronのupdate()を使ったアプローチのように最後のものだけでなく、すべての「同点」モードが返されます。
mode_by_groups = 関数 ( { collist } , // 列名のリスト
// collist の最後の列のモードを見つける
要約します( g = by ( 評価 ( collist ) ) 、 n = カウント () ) ;
X =設計( g [ 1 ] )
n ;
i = 場所 ( Vマックス ( 転置 ( X == 繰り返す ( Vマックス ( X ) 、 N列 ( n ) ) ) ) ) ;
//新しいテーブルにグループ化列を追加する
dt1 =新しいテーブル( 「モード」 ) ;
( k = 1 、 k <= N 項目( collist ) - 1 、 k ++の場合、
dt1 << (新しい列( チャー ( collist [ k ]) 、文字、設定値( g [ k ][ i ] ) )) ;
);
//モードとNを追加
dt1 << 新しいコラム( 「モード」 || チャー(collist[k]), Character, set values( g[k][i] ) );
dt1 << 新しいコラム( 「ん」, set values( n[i] ) );
);
//例
開く( "$SAMPLE_DATA/Mail Messages.jmp" ) ;
mode_by_groups ( { From , To } ) ;
開ける( "$SAMPLE_DATA/Consumer Preferences.jmp" );
mode_by_groups ( {性別,独身,生年} ) ;