<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />你好,
我正在使用 JMP10。我正在嘗試建立一個腳本來刪除資料表中重複的資料行。我的嘗試的一個例子如下:
// 開始。
// 建立資料表。
dt = open("$SAMPLE_DATA/Big Class.jmp");
dt << 隨機選擇(5);
subdt = dt << Subset(輸出表名稱("子集"), Invisible);
dt << 連接(subdt,附加到第一個表);
關閉(subdt,不儲存);
dt << 清除選擇;
// 尋找並刪除 bigClass 的重複行。
icol = dt << 新列( "索引", 數字, 連續, 公式( 序列( 1, N Row( dt ), 1, 1 ) ) );
repcol = dt << 新列( "重複資料",
數字,
連續的,
公式( If( :Index == Col 最小值( :Index, :name, :age, :sex, :height, :weight ), 1, 0 ) )
);
dt << 選擇其中( As Column(repcol) == 0 );
dt << 刪除行();
dt << 刪除列( {icol, repcol} );
// 尋找並刪除通用資料表的重複行。
colnames = dt << 取得列名();
icol = dt << 新列( "索引", 數字, 連續, 公式( 序列( 1, N Row( dt ), 1, 1 ) ) );
repcol = dt << 新列( "重複資料",
數字,
連續的,
Formula( If( :Index == Col Maximum( :Index, /* 在此插入列名。 */ ), 1, 0 ) )
);
dt << 選擇其中( As Column(repcol) == 0 );
dt << 刪除行();
dt << 刪除列( {icol, repcol} );
// 結尾。
我的問題是我想讓這個腳本在通用資料表上運行。如何將我的 colnames 清單插入我的公式中?有沒有更聰明的方法來做到這一點?
謝謝!
使用 Col Min() 和索引列來定位重複項是很聰明的做法。
我通常使用“表”->“摘要”來獲取沒有重複項的數據表。 只需按將定義重複項的所有列進行分組即可。 這樣做的另一個優點是提供一列(N 行)來告訴您原始表中有多少重複行。

-傑夫
我太快了。 對於需要 :Name("eg ΔX") 建構的複雜列名,第一個發佈的版本將會失敗。 我編輯了上面的程式碼,現在它應該可以更普遍地工作。
謝謝女士!非常聰明。我仍然需要研究它到底是如何運作的。
使用 Col Min() 尋找重複項的好主意!
以下是基於您的想法的替代方法,該方法似乎可行。 它更簡單,因為不需要任何臨時公式列。
// 建立範例資料表。
打開( “$SAMPLE_DATA/Big Class.jmp” ) <<連接(打開( “$SAMPLE_DATA/Big Class.jmp” ) ,附加到第一個表) ;
// 從通用表中刪除重複項
dt =目前數據表() ;
列最小值=解析( "Col Min( Row(), :Name(\!"" ||連接項目( dt <<取得列名(細繩) , “\!“), :姓名(\!”” ) || “\!”))“ ) ;
重複項= [] ;
對於每一行(如果(列最小值!=排() ,重複項|/=排() ) ) ;
dt <<刪除行(重複項) ;