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

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

不可見是問題,b/c 除非我想出一種方法來引用每個不可見的表,否則我無法合併多個表。 看起來我需要將 Join 代碼移動到循環中,但如果它一次只循環一個表並且我需要引用至少兩個表,我不知道如何合併它。
回复:使用“加入”合併 JSL 設置隱形不是這裡的問題。 不可見的表可以被引用並與其他不可見或可見的表連接。 封閉表和不可見表不是一回事。 封閉的桌子完全沒用,它們已經消失並被遺忘。 在您放置的腳本中關閉所有(數據表,節省) ;在合併代碼部分之前。 這應該導致忘記所有表並且合併將失敗。 等到你完成後再關閉桌子,無論是否可見。
或者使用我上面的方法,即一次打開一個表,進行任何你想要的編輯和拆分,然後在關閉並繼續下一個文件之前將它們與當前的 MT 合併。
回复:使用“加入”合併 JSL 設置嗯,雖然我無法合併原始 txt 文件 - 我正在合併從原始 txt 文件的拆分/格式化創建的中間不可見文件。由於這些文件是不可見的和中間的,因此沒有保存它們的根目錄(這就是我使用不可見功能的原因——它節省了空間和時間)。 我明白你在說什麼,即使我的表在列表中,它們也已關閉,因此無法引用它們,但“打開”它們並不適用,因為它們是從 txt 文件創建的中間/不可見文件,它們是未保存的是任何目錄。
這是我正在做的事情的細分:
1.我打開txt文件的代碼和你的差不多(會有名字Data Table("Result1"))
2. 我重新格式化了這些 txt 文件(它們不是列格式,所以我有代碼在哪裡“拆分”、格式化等,在 JMP 中變成更易讀的數據表。 - 我將調用這些中間表(名稱為 Data Table("Untitled1"))
3. 這些中間文件是不可見的(太多了,使它們可見) - 我不保存它們,因為我不想要一個保存的中間文件目錄,我以後必須去刪除。
4.我的問題是我正在嘗試合併中間表
我認為只加入原始文件會更容易,但它們的格式不是我能夠做到的,因此是我的難題。
因此,如果我的中間表不是不可見的並且我沒有關閉我引用加入的中間表(也不能完全按照我想要的方式工作,但它仍然有效),我擁有的代碼(以及之前引用的代碼)可以工作) -但後來我打開了所有表 - 合併和未合併
所以我真正的問題是:
a) 我有中間表 - 本質上我希望它們不可見,但為了將它們引用到 MT/OT 列表中,我必須讓它們可見才能正常工作 - 基本上我希望這些不可見。所以我真正的問題是:如何在循環中引用不可見的中間表以識別要用於進一步計算的每個表(為了使用連接表 fxn,我似乎必須將它放在 For 循環之外,以便我可以連接中間的兩個實例表)?
我已附上腳本。也許這將解釋我正在嘗試做的事情。
回复:使用“加入”合併 JSL 設置看起來所有表都在 Join() 之前關閉。 List OTs 只是數據表引用的列表。 如果相應的表消失了,它們就不是“可編寫腳本的對象”。
嘗試這樣的事情:
我自己的路= “/用戶/.../文件/” ; //.txt文件所在目錄的路徑
清單=目錄中的文件(我自己的路) ; //所有文件列表
n = N 項(清單) ;
// 從 flist 中刪除非文本文件
為了(一世= n ,一世> 0 ,一世--,
如果(包含(清單[一世] , “。文本” ) == 0 ,
從...除去(清單,一世) ;
n --;
)
) ;
// 打開文本文件的功能(必要時編輯列和導入設置)
打開文件=功能( { X } ,
打開(
我自己的路||清單[ X ] ,
導入設置(
行結束( CRLF ,鉻,如果) ,
場結束(標籤) ,
剝離行情( 1 ) ,
使用撇號作為引號( 0 ) ,
掃描整個文件( 1 ) ,
標籤( 1 ) ,
列名開始( 1 ) ,
數據開始( 2 ) ,
要閱讀的行(全部) ,
年份規則( “10-90” )
)
)
) ;
// 打開第一個文件
公噸=打開文件( 1 ) ;
//加入flist中的所有文件
為了(一世= 2 ,一世<= n ,一世++,
英石=打開文件(一世) ;
英尺=公噸;
公噸=英尺<<加入(
和(英石) ,
更新,
通過匹配列( : Column_1 = : Column_1 ) ,
刪除倍數( 1 , 0 ) ,
姓名( “包括不匹配” )( 1 , 1 ) ,
保留主表順序( 1 ) ,
輸出表( “合併” )
) ;
// 清理
關(英石,沒有保存) ;
關(英尺,沒有保存) ;
) ;
回复:使用“加入”合併 JSL 設置好的,我嘗試了類似的方法,將打開的表格發送到列表:
在此代碼之前,我有打開 *txt 文件的代碼(我最多可以有 30 多個文件)並轉換為 JMP 數據表(因此最多輸出 30 多個表)。然後我試圖將所有這些表合併到一張桌子但是,某些文件可能包含需要刪除的重複信息 - 我發現我可以使用 Join 表屬性來執行此操作。所以按照下面的代碼。我成功獲得了 1 個表 = MT,其他表在列表中 = OT。我想加入列表中的每個 OT 並將其加入 MT,所以我得到:
MT+OT(1) = MergedTable,然後是 MergedTable+OT(2) = MergedTable2,然後是 MergedTable2+OT(3) = MergedTable3,依此類推,直到我得到一個包含所有數據的主表(其他已關閉)
<代碼>
openDT = 列表();
對於 (f = 1, f <= N Table(), f++,
Insert Into(open DT, Data Table(f)););
顯示(openDT);
MT = 數據表(1);
關閉(數據表(1),nosave);
OTs = 列表();
對於(g = 1,g<= N 項(openDT)-1,g++,
插入(OTs,DataTable(g));
全部關閉(DataTables,nosave);
顯示(OT);
顯示(MT);
對於(h = 1,h <= N 項(OTs),h++,
MT <<加入(與(ST),
更新,
通過匹配列(:Column_1 = :Column_1),
刪除倍數(1,0),
Name("包括不匹配")(1, 1),
保留主表順序(1),
輸出表(“合併”)););
繼續());
當我運行腳本時 - 一切正常,直到出現以下錯誤的加入命令
“發送在訪問或評估‘發送’時需要腳本化對象{169},”
為了( H = 1 , H <= N 項( OT ) , H ++,
公噸<< /*###*/加入(
與(ST),
更新,
通過匹配列( : Column_1 = : Column_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);
);