使用“Join”合併 JSL 設定<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />我發現我可以透過使用「加入」資料表命令來合併兩個資料集,這可以最好地消除可能存在的重複條目 - 第 1 列包含每個條目的唯一編號。我有一個打開多個數據表並操作數據的腳本,但我無法單獨調用每個數據表以使“連接”腳本正常工作:
如果我手動執行此操作,程式碼如下:
數據表( 《無題322》 ) <<加入(數據表( 《無題318》 ) ) ,
合併同名列,
透過匹配列( : REPLICATE_ID = : REPLICATE_ID ) ,
刪除倍數( 1 , 1 ) ,
姓名( “包括不匹配項” )( 1 , 1 ) ,
保留主表順序( 1 ) ,
輸出表( “合併” )
當我嘗試對此表單多個表進行編碼時,我的問題出現了。無標題表(無標題 322、無標題 318 等 - 可能有更多,具體取決於我打開的文件數量)在我的代碼中指定為。所以我想以某種方式採取我的最大並與其他所有人一起加入。
我設定如下:
對於 (f = 資料表, f >= 1, f--,
Try(v = w << Join( With(資料表 (f)),
*其餘部分遵循上面列出的連接表屬性*
但是我的代碼不起作用。有人知道我該怎麼做嗎?
回覆:使用「加入」合併 JSL 設定抱歉,我想我沒說清楚:
我知道我需要保持添加到列表中的表打開 - 如果我在程式碼中註解掉 Close All(Data Tables, nosave) 我得到
我的日誌中包含以下內容(我引用了一個原始表,不應該出現在 openDT 清單中,並且會傳輸到 OT 中。我確信我只需要該表的關閉 fxn 並且我可以解決這個問題。我之前已經指定合併確實有效,但不是我希望它如何工作。

但在我的程式碼中,我 //invisible (對於 w = z << Split...), 我想取消註釋不可見的,但因為不可見的fxn 只識別循環的最後一個表,而所有其他表都被刪除,我需要一種方法來引用這些並將它們保存在列表中,以便我可以將它們作為一個整體引用。 (關閉全部也被註解掉了)我該怎麼做呢?

不可見性是問題所在,除非我找到一種方法來引用每個不可見表,否則我無法合併多個表。 看起來我需要將 Join 程式碼移到循環中,但如果一次只循環一個表並且我需要引用至少兩個表,我不知道如何合併它。
回覆:使用「加入」合併 JSL 設定隱形不是這裡的問題。 不可見表可以引用其他不可見或可見表並與其他不可見或可見表連接。 封閉的桌子和隱形的桌子不是一回事。 關閉的桌子完全沒用,它們消失了並且被遺忘了。 在您放置的腳本中關閉所有(數據表,不保存) ;在合併程式碼部分之前。 這應該會導致所有表都被忘記並且合併將會失敗。 等到吃完後再關閉桌子,無論是否可見。
或者使用我上面的方法,即一次打開一個表,進行您想要的任何編輯和拆分,然後將它們與當前 MT 合併,然後關閉並繼續處理下一個文件。
回覆:使用「加入」合併 JSL 設定嗯,我無法合併原始 txt 檔案 - 我正在合併從原始 txt 檔案的分割/格式化建立的中間不可見檔案。由於這些檔案是不可見的和中間的,因此沒有保存它們的根目錄(這就是我使用不可見功能的原因 - 它節省了空間和時間)。 我明白你的意思,儘管我的表在列表中,但它們是關閉的,因此無法引用它們,但“打開”它們並不適用,因為它們是從 txt 文件創建的中間/不可見文件不保存的是任何目錄。
這是我正在做的事情的細分:
1.我打開txt檔案代碼與您的程式碼類似(將具有名稱資料表(“Result1”))
2.我重新格式化這些txt檔案(它們不是列格式,因此我有程式碼「分割」、格式化等,將其轉換為JMP中更易讀的資料表。 - 我將調用這些中間表(將具有名稱資料表(“Untitled1”))
3.這些中間文件是不可見的(太多了,無法使它們可見)-我不保存它們,因為我不想要保存中間文件的目錄,稍後我必須刪除它們。
4.我的問題是我正在嘗試合併中間表
我發現加入原始文件會更容易,但它們的格式不符合我能夠做到這一點的格式,因此這是我的難題。
因此,如果我的中間表不可見並且我沒有關閉我引用的連接中間表(也不能完全按照我想要的方式工作,但它仍然有效),那麼我(之前引用的)代碼就可以工作 -但後來我打開了所有的表- 合併和未合併的表
所以我真正的問題是:
a)我有中間表 - 本質上我希望它們是不可見的,但為了將它們引用到 MT/OT 列表中,我必須使它們可見才能工作 - 本質上我希望它們不可見。所以我真正的問題是:如何在循環中引用不可見的中間表以識別要用於進一步計算的每個表(為了使用連接表 fxn ,似乎我必須將其放在 For 循環之外,以便我可以連接中間的兩個實例表)?
我已附上腳本。也許這可以解釋我想做的事情。
回覆:使用「加入」合併 JSL 設定看起來所有表在 Join() 之前都已關閉。 OT 清單只是資料表引用的清單。 如果相應的表消失了,它們就不是「可編寫腳本的物件」。
試試這樣的事情:
我自己的路= “/使用者/.../檔案/” ; //.txt 檔案的目錄路徑
弗利斯特=目錄中的文件(我自己的路) ; //所有檔案列表
n = N 項(弗利斯特) ;
// 從flist中刪除非文字文件
為了(我= n ,我> 0 ,我--,
如果(包含(弗利斯特[我] , “。TXT” ) == 0 ,
從......中去除(弗利斯特,我) ;
n --;
)
) ;
// 開啟文字檔案的函數(必要時編輯列和匯入設定)
開啟文件=功能( { X } ,
打開(
我自己的路||弗利斯特[ X ] ,
導入設定(
行結束(回車換行, CR ,如果) ,
場結束(標籤) ,
剝離報價( 1 ) ,
使用撇號作為引號( 0 ) ,
掃描整份文件( 1 ) ,
標籤( 1 ) ,
列名開始( 1 ) ,
數據開始( 2 ) ,
要讀的行(全部) ,
年份規則( “10-90” )
)
)
) ;
// 開啟第一個文件
公噸=開啟文件( 1 ) ;
//加入flist中的所有文件
為了(我= 2 ,我<= n ,我++,
英石=開啟文件(我) ;
金融時報=公噸;
公噸=金融時報<<加入(
和(英石) ,
更新,
透過匹配列( :第_1列= :第_1欄) ,
丟棄倍數( 1 , 0 ) ,
姓名( “包括不匹配項” )( 1 , 1 ) ,
保留主表順序( 1 ) ,
輸出表( “合併” )
) ;
// 清理
關閉(英石,沒有保存) ;
關閉(金融時報,沒有保存) ;
) ;
回覆:使用「加入」合併 JSL 設定好吧,我嘗試了類似的方法,將打開的表發送到列表:
在此程式碼之前,我有一些程式碼,其中打開 *txt 檔案(最多可以有 30 多個檔案)並轉換為 JMP 資料表(因此輸出最多 30 個表)。然後我嘗試將所有這些表合併到一張桌子但是,某些文件可能包含需要刪除的重複資訊 - 我發現可以使用“連接表”屬性來執行此操作。所以根據下面的程式碼。我成功獲得了 1 個表 = MT,其他表在列表中 = OT。我想加入清單中的每個 OT 並將其加入 MT,這樣我得到:
MT+OT(1) = MergedTable,然後 MergedTable+OT(2) = MergedTable2,然後 MergedTable2+OT(3) = MergedTable3,依此類推,直到我得到一張包含所有資料的主表(其他表已關閉)
<程式碼>
openDT = 列表();
對於 (f = 1, f <= N Table(), f++,
插入(開啟DT,資料表(f)););
顯示(openDT);
MT = 資料表(1);
關閉(資料表(1), nosave);
OTs = List();
For(g = 1, g<= N 項(openDT) -1, g++,
插入(OTs,DataTable(g));
全部關閉(資料表,nosave);
顯示(OT);
顯示(MT);
For( h = 1, h <= N 項(OT), h++,
MT << 加入(與(ST),
更新,
透過匹配列(:Column_1 = :Column_1),
刪除倍數(1,0),
名稱("包括不符項")(1, 1),
保留主表順序(1),
輸出表(“合併”)););
繼續());
當我運行腳本時 - 一切正常,直到加入命令出現以下錯誤
“在存取或評估“發送”時,發送需要可編寫腳本的物件{169},”
為了( H = 1 , H <= N 項( OT ) , H ++,
MT << /*###*/加入(
與(ST),
更新,
透過匹配列( :第_1列= :第_1列) ,
刪除倍數( 1 , 0 ) ,
姓名( “包括不匹配項” )( 1 , 1 ) ,
保留主表順序( 1 ) ,
輸出表( “合併” )) /*###*/ ;
繼續();
幫助? 我用頭撞牆試圖找出為什麼這不起作用
回覆:使用「加入」合併 JSL 設定這可能會幫助您作為一個例子開始。 它並不完美,因為執行後最後一個打開的表也被關閉...
Close All(data tables);
New Table("a") << Add Rows(3);
:Column 1 << Set Values([1, 2, 3, 4, 5, 6]);
New Column("Label", Character) << Set Each Value("a");
New Table("b") << Add Rows(3);
:Column 1 << Set Values([1, 2, 3, 7, 8, 9]);
New Column("Label", Character) << Set Each Value("b");
New Table("c") << Add Rows(3);
:Column 1 << Set Values([1, 2, 3, 10, 11, 12]);
New Column("Label", Character) << Set Each Value("c");
New Table("d") << Add Rows(3);
:Column 1 << Set Values([1, 2, 3, 13, 14, 15]);
New Column("Label", Character) << Set Each Value("d");
t_count = N Table();
dt_old = Data Table(t_count);
Show(dt_old << get name());
dt_new = Data Table(1);
For(i = 2, i <= t_count, i++,
dt_old = dt_new;
dt_new = dt_old << Join(
With(Data Table(i)),
Merge Same Name Columns,
By Matching Columns(:Column 1 = :Column 1),
Drop multiples(1, 1),
Name("Include non-matches")(1, 1)
);
Close(dt_old);
);