使用“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);
);