使用“加入”合并 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,其他表在列表中 = OTs。我想加入列表中的每个 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);
);