尋找模式<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />大家好,
我想產生一個總結表,給出另一個變數的每個類別的變數模式。
理想情況下,這會起作用:
dt = open ("$SAMPLE_DATA/Mail Messages.jmp");
dt << 摘要 ( 組 ( :From ), Mode (:To) );
或者,我將按“From”堆疊表格併計算每行的眾數。然而,「模式」不是表摘要或列公式中的選項。
歡迎任何計算眾數的想法,包括發送給 SAS。
我正在使用 JMP 10。
謝謝你,
榮恩
回覆:尋找模式你好-模式是最常見的項目,所以你要找的是收到每個寄件者最多信件的人(或者,如果出現平局,則可能是其他人),對嗎?如果是的話,我認為下面的程式碼應該可以實現,儘管我確信肯定有更優雅和/或更短的方法。我特意省略了所有中間計算,並命名所有表格以留下審計線索:
dt1= 打開 (“$SAMPLE_DATA/郵件訊息.jmp”);
dt1<<設定名稱(“dt1”);
dt2=dt1<<摘要(組(:從), N,子組(:到) );
dt2<<設定名稱(“dt2”);
寄件人=( dt2<<取得列名);
展示(寄件者);
// 丟棄此清單的前兩個元素;
移除(寄件人, {1, 2});
展示(寄件者);
// 將它們堆疊起來;
dt3=dt2<<堆疊(列(評估(發送方, 來源標籤列(“標籤” ), 堆積資料列(“數據” ));
dt3<<設定名稱(“dt3”);
// dt3 現在包含每個人寄給每個收件人的信件數量;
dt4=dt3<<摘要(組(:從), 最大限度( :數據) );
dt4<<設定名稱(“dt4”);
// dt4 現在包含每個人寄給任何一個收件人的最大信件數量;
dt5=dt4<<連接(與( dt3 ),
選擇( :來自, :標籤, :數據) ,
透過匹配列(:從= :從, :姓名(“最大(數據)” ) = :數據),
刪除多個(0, 0 ),
名稱( "包含不符項" )( 0 , 0 ) ,
保留主表順序(1 )
);
dt5<<設定名稱(“dt5”);
柱子(dt5, “標籤”) <<設定名稱(“接受者”);
/*
dt5 現在應該包含每個人發送給任何收件人的最大信件數量
以及該收件人的姓名(如果出現平局,則為收件人的姓名)
*/
這樣一來,你得到的應該是安給邁克爾發了 4 封信,傑夫給邁克爾發了 7 封信,約翰給邁克爾發了 12 封信,凱瑟琳給約翰發了 12 封信,以此類推。你想試試這個方法,看看它是否能滿足你的要求嗎?若要取得任意收件者收到的來自任意寄件者的最大信件數量,只需交換「收件者」和「寄件者」欄位即可。
回覆:尋找模式謝謝你,Dodo,
它運行良好。
回覆:尋找模式大家好,Dodo,
Dodo 的解決方案在技術上是正確的,但在處理大數據時卻沒有用。
經過思考,我有一個可擴展的替代解決方案。
dt1 = 開啟( "$SAMPLE_DATA/郵件訊息.jmp" ) ;
dt1 << 設定名稱(“dt1”);
// 根據發送者產生接收者的分佈
dt1 << 新腳本 ( "分佈", 分佈 ( 名義分佈 ( 列 ( :到 ) ), 按 ( :從 ) ) ) );
Dist = Dt1 << 運行腳本( "分佈" ) ;
// 將頻率表提取為一個資料表。
dt2 = 報告(dist[1])["頻率"][表格框(1)] << 製作組合資料表;
dt2 << 設定名稱( "dt2" ) ;
dist << 關閉視窗;
// 從資料表中刪除「總計」行 - 它們不代表相關的頻率
選擇 = dt2 << 選擇其中(:Level == "Total" );
選擇<<刪除行;
// 總結以獲得每個“來自”的模式“到”
dt3 = 資料表( "dt2" ) << 摘要( 組( :來自 ), 最大值( :計數 ), 統計列名格式( "列" ), 連結到原始資料表( 0 ) );
dt3 << 設定名稱(“模式”);
// 更新總表以取得「To」的值
dt3 << 更新(使用(資料表( "dt2" )),匹配列(:From = :From,:Count = :Count),從更新表中新增列(:Level ));
dt2 << 關閉視窗;
列(dt3,“級別”)<<設定名稱(“模式”);
回覆:尋找模式在 JMP 中,執行一項任務的方法通常有多種。我突然想起前段時間寫過一個函數,它能非常有效率地找出按一列或多列分組的最常見項目。我在這裡分享它,作為上述方法的替代方案。結果與 Dodo 的類似,即傳回所有「綁定」眾數,而不是像 Ron 使用 update() 方法那樣只傳回最後一個眾數。
mode_by_groups = 功能 ( { collist } , // 列名列表
// 找出 collist 中最後一列的眾數
總結( g = by ( 評估 ( collist ) ) , n = 數數 () ) ;
X =設計( g [ 1 ] ) :* n ;
i = 地方 ( 最大速度 (轉置( X ==重複( 最大速度 ( 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 << 新專欄( “N”, set values( n[i] ) );
);
//範例
開啟( “$SAMPLE_DATA/郵件訊息.jmp” ) ;
mode_by_groups ( {從,到} ) ;
打開( "$SAMPLE_DATA/Consumer Preferences.jmp" );
mode_by_groups ( {性別,單身狀態,出生年份} ) ;