將非重複(單列 ID)行追加到主表而不創建新表?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />場景:需要將每日調查數據文件(包括之前的所有日期)附加到僅包含非重複受訪者 ID 記錄的主表,並且無需創建新表(因為我不想丟失主表中選定的行)隱藏或排除
兩次嘗試:
連接維護主表,但帶來所有記錄
連接僅帶來新記錄,但會創建一個新表,因此行特徵(隱藏、排除)會丟失
回复:將非重複(單列 ID)行追加到主表而不創建新表?出色的!!!
讓我困惑的是這一行:
Parse( "Col Min( Row(), :Name(\!"" || Concat Items( dt << 獲取列名稱( string ), "\!"), :Name(\!"" ) || "\ !“))”);
我無法弄清楚第一個參數中的“Row()”做了什麼。
非常感謝。
回复:將非重複(單列 ID)行追加到主表而不創建新表?嗨馬丁,
你是對的。這些行完全符合您的推論。我添加了一些評論,以幫助其他人更清楚地了解這一點。
我很高興您發現它有用!
回复:將非重複(單列 ID)行追加到主表而不創建新表?所以我想我已經弄清楚了。第 1 行生成一個字符串“Col Min( Row(), :name, :age, :sex, :height, :weight )”,該字符串將在 (2) 中用於確定所有列都匹配的上一行的行號。並且,2 會將重複行的行號添加到數組“duplicates”中。
這實在是太菜刀了。我想知道當一式三份時會發生什麼。它會始終保留第一個實例並刪除第二個和第三個實例嗎?我需要嘗試一下。
謝謝機器人!
回复:將非重複(單列 ID)行追加到主表而不創建新表?你好,機器人,你能解釋一下這兩行代碼的作用嗎?
謝謝
1. col_min = Parse( "Col Min( Row(), :Name(\!"" || Concat Items( dt << get 列名( string ), "\!"), :Name(\!"" ) || "\!"))" );
2. 對於每一行( If( col_min != Row(), 重複項 |/= Row() ) );
回复:將非重複(單列 ID)行追加到主表而不創建新表?嗨,cdwhite,
我不久前寫了一個腳本,可能會有所幫助。下面的腳本將刪除重複的行,同時保留原始數據表,包括公式和行狀態。使用此腳本後面的 Concatenate 函數可能會解決您的問題。
名稱默認為此處( 1 );
// 創建數據表和新數據。
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt << 隨機選擇( 10 );
dt2 = dt << 子集( (選定行), 輸出表名稱( "新數據" ) );
dt << 清除選擇;
dt2 << 添加行( {:name = "PETER", :age = 14, :sex = "M", :height = 61, :weight = 124} );
// 隨機設置原始數據中的行狀態。
dt << 隨機選擇( 10 ) << 隱藏 << 排除 << 清除選擇;
// 添加新數據。
dt << 連接( dt2, 附加到第一個表);
關閉(dt2,不保存);
// 刪除重複行。
dt = 當前數據表();
col_min = Parse( "Col Min( Row(), :Name(\!"" || Concat Items( dt << 獲取列名稱( string ), "\!"), :Name(\!"" ) || “\!”))“); // 創建一個 JSL 表達式來確定所有其他列的最小行號。
重複項 = []; // 創建矩陣來存儲重複的行。
對於每一行( If( col_min != Row(), 重複項 |/= Row() ) ); // 將每一行與上面的“col_min”表達式進行比較。如果當前行與所有其他列的最小行不匹配,則該行將被添加到“重複項”矩陣中。
dt << 刪除行(重複項); // 刪除重複項。
nn = N 行(重複項);
New Window( "刪除重複行", <回复:將非重複(單列 ID)行追加到主表而不創建新表?
我嘗試使用更新主表選項,但它仍然創建一個新表。
數據表( “原來的” ) <<加入(
和(數據表( “新數據” ) ) ,
更新,
通過匹配列( :列號= :列號) ,
丟棄倍數( 1 , 1 ) ,
姓名( “包括不匹配項” )( 0 , 1 ) ,
保留主表順序( 1 )
);

回复:將非重複(單列 ID)行追加到主表而不創建新表?執行聯接時,您可以使用“使用第二個表中的數據更新主表”選項來避免創建新表。
回复:將非重複(單列 ID)行追加到主表而不創建新表?謝謝。將指定為行狀態數據類型的新列添加到原始數據表,然後使用行狀態菜單中的複制功能(通過單擊左側列列錶框中的行狀態列,而不是實際的列標題)來複製和復制然後在加入後重新應用行狀態。行附加聯接的腳本僅將調查數據集中的新記錄(並忽略所有先前附加的案例)引入主數據表:
數據表( "主要調查數據集" ) << Join(
With( 數據表( "二次調查數據集" ) ),
合併同名列,
複製第二個表公式(0),
抑制主表公式求值( 0 ),
通過匹配列( :ResponseID = :ResponseID ),
刪除倍數( 0, 0 ),
Name( "包含不匹配項" )(0, 1),
保留主表順序( 1 )
)
連接兩個文件後,使用行狀態菜單從行狀態列複製/恢復行狀態。效果很好。謝謝你!
回复:將非重複(單列 ID)行追加到主表而不創建新表?您可以使用關聯數組進行集合運算。找不到一種巧妙的方法將一個表附加到另一個表。必須使用 JSL 循環來處理數據。
dt_原始=新表( “原來的” ,添加行( 4 ) ,
新專欄( “列 ID” ,數字,連續的,格式( “最好的” , 12 ) ,
設定值( [ 1 , 2 , 3 , 4 ] )
) ,
新專欄( “結果” ,特點,標稱,設定值( { “A” , “b” , “C” , “d” } ) )
) ;
dt_new =新表( “新數據” ,添加行( 10 ) ,
新專欄( “列 ID” ,數字,連續的,格式( “最好的” , 12 ) ,
設定值( [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ] )
) ,
新專欄( “結果” ,特點,標稱,
設定值( { “A” , “b” , “C” , “d” , “e” , “F” , “G” , “H” , “我” , “j” } )
)
) ;
// 確定新表中哪些行不在舊表中
a_原始=關聯數組(柱子( dt_原始, “列 ID” )) ;
重新=關聯數組(柱子( dt_new , “列 ID” )) ;
重新<<消除( a_原始) ;
新行=重新<<獲取鑰匙;
// 必須有一種更快的方法將一個表附加到另一個表
你=行數( dt_原始) ;
號=尼特姆斯(新行) ;
dt_原始<<添加行(號) ;
為了(我= 1 ,我<=恩科爾斯( dt_原始) ,我++,
一個列=柱子( dt_原始,我) <<得到名字;
為了( k = 1 , k <=尼特姆斯(新行) , k ++,
米=新行[ k ] ;
n = k +你;
柱子( dt_原始,一個列)[ n ] =柱子( dt_new ,一個列)[米] ;
) ;
) ;
回复:將非重複(單列 ID)行追加到主表而不創建新表?我發現連接和連接表格有點藝術(即反複試驗,直到得到我真正想要的東西)。但是,我建議您查找列類型“行狀態”,因為您可以將所有當前行狀態(即隱藏和排除的行狀態)保存在一個列中,您可以根據需要將其重新應用到表中。