打开25个表,每个表汇总,并连接所有汇总表。嗨,
我是一个新的JMP用户,并尝试使用JSL进行一些自动数据操作。正如标题所述,我需要
对于(i = 1,i <= Nitems(“目录”),i ++,
1)打开25个表中的一个;
2)生成打开表的汇总表;
);
3)循环遍历所有25个表后,生成一个25个汇总表的连接表。
我完成了第一和第二部分并将它们循环了。但不确定如何自动连接生成的25个汇总表。现在我在生成所有表后手动连接它们。
缺乏知识是如何命名每个摘要表并在需要连接它们时引用它们。
此外,如果脚本可以关闭所有打开的表(来自第1部分)和汇总表(来自第2部分),那将只会返回连接表。(使用我的脚本,它总共会弹出50个表,我必须手动关闭它们。)
附上我的脚本:
设置默认目录(“E:\ Test”);
files =目录中的文件(“E:\ Test”);
对于(i = 1,i <= N项(文件),i ++,
打开(
文件[I],
工作表(“工作表1”),
用于所有床单(1),
连接工作表(0),
创建连接列(0),
工作表设置(
1,
有列标题(1),
标题行数(1),
标题从行开始(1),
行(2)上的数据开始,
数据从列(1)开始,
行(0)上的数据结束,
列(0)上的数据结束,
复制的跨行(1),
复制的跨区标题(0),
抑制隐藏行(1),
抑制隐藏列(1),
抑制空列(1),
视为层次结构(0),
多系列堆栈(0),
导入单元格颜色(0),
限制列检测(0),
列分隔符字符串(“ - ”)
)
);
新栏目(“Xindex”,公式(天花板(:名称(“X”)/:名称(“dimensionX”))));
新栏目(“Yindex”,公式(楼层(:姓名(“Y”)/ :名称( “dimensionY”) )));
摘要(
组(
:名称(“X”),
:名称(“Y”),
:Xindex,
:Yindex),
Std Dev(:名称(“Data1”)),
频率(“无”),
重量(“无”)
)
);
Re:打开25个表,每个表汇总,并连接所有汇总表。在代码中,您指定
dtConcat = dtSum;
我相信您的思考过程是,当您使用此语句时,您正在制作数据表的副本。 但事实上,dtConcat和dtSum只是变量,包含指向数据表的指针,并且通过指定dtConcat等于dtSum,两个变量都指向同一个数据表。
然后你指定
close (dtSum,nosave);
这将关闭变量dtSum指向的数据表。 这意味着现在dtSum和dtConcat都不再有他们指向的开放数据表。
Re:打开25个表,每个表汇总,并连接所有汇总表。你好Uday,
非常感谢!我认为你的脚本告诉我如何在if()中使用分号和逗号:逗号用于分隔test和expr,分号用于将多个参数连接到一个expr中。它是否正确?
@txnelson
吉姆,嗨,
如果我对逗号和分号的使用是正确的,我希望通过添加突出显示的行来使用以下脚本。
然而,使用这个新脚本,当i = 2时我只得到dt和dtSum(我在所有表中添加了另一列来跟踪当前表中的“i”)。
没有突出显示的行,当i = 1时我有dt和dtSum,而for()循环完成时有dtConcat,就像我上次回复你所描述的那样。
if(i == 1,
dtConcat = dtSum<FONT color="#FF6600"><STRONG>; close(dtSum,nosave);close(dt,nosave);</STRONG></FONT>,
dtConcat = dtConcat << Concatenate(dtSum,"Append to first table");close(dtSum,nosave);Close(dt,nosave);
);
Re:打开25个表,每个表汇总,并连接所有汇总表。吉姆,嗨,
非常感谢!现在我对在JMP中使用引用有了一些了解。
if()函数的另一个问题。在我在脚本中添加的if()函数中,i == 1是test 1,dtConcat = dtSum是expr1,其余的“dtConcat = dtConcat << .......”是“else expr”。
我的问题是如何在if()中为测试1添加多个表达式?在第一个脚本中,现在我输出了三个表,
1)当i == 1时dt;
2)当i == 1时dtSum;
3)当for()循环完成时dtConcat,这正是我需要的。
现在我只想在运行脚本后不报告1)和2),只报告3)。
我尝试了第二个脚本,但它不起作用。此外,两个脚本都会发出警告“无法附加到锁定或派生的数据表”。
if(i == 1,
dtConcat = dtSum,
dtConcat = dtConcat << Concatenate(dtSum,"Append to first table");close(dtSum,nosave);Close(dt,nosave)
);
在第二个脚本中,我尝试1)当i == 1时,将dtSum分配给dtConcat,然后关闭dtSum和dt; 2)当我不等于1时,Concat dtSum到dtConcat,并关闭dtSum和dt。但是,它没有像我预期的那样工作。我想这是因为我以错误的方式使用逗号和分号?
if(i == 1,
dtConcat = dtSum; close (dtSum,nosave); close (dt, nosave),
dtConcat = dtConcat << Concatenate(dtSum,"Append to first table");close(dtSum,nosave);Close(dt,nosave)
);
Re:打开25个表,每个表汇总,并连接所有汇总表。您只需要在代码中添加一个连接步骤......就像这样
Set Default Directory( "E:\Test" );
files = Files In Directory( "E:\Test" );
For( i = 1, i <= N Items( files ), i++,
dt = Open(
files[i],
Worksheets( "worksheet1" ),
Use for all sheets( 1 ),
Concatenate Worksheets( 0 ),
Create Concatenation Column( 0 ),
Worksheet Settings(
1,
Has Column Headers( 1 ),
Number of Rows in Headers( 1 ),
Headers Start on Row( 1 ),
Data Starts on Row( 2 ),
Data Starts on Column( 1 ),
Data Ends on Row( 0 ),
Data Ends on Column( 0 ),
Replicated Spanned Rows( 1 ),
Replicated Spanned Headers( 0 ),
Suppress Hidden Rows( 1 ),
Suppress Hidden Columns( 1 ),
Suppress Empty Columns( 1 ),
Treat as Hierarchy( 0 ),
Multiple Series Stack( 0 ),
Import Cell Colors( 0 ),
Limit Column Detect( 0 ),
Column Separator String( "-" )
)
);
New Column( "Xindex", Formula( Ceiling( :Name( "X" ) / :Name( "dimensionX" ) ) ) );
New Column( "Yindex", Formula( Floor( :Name( "Y" ) / :Name( "dimensionY" ) ) ) );
dtSum = dt << Summary(
Group( :Name( "X" ), :Name( "Y" ), :Xindex, :Yindex ),
Std Dev( :Name( "Data1" ) ),
Freq( "None" ),
Weight( "None" );
If( i == 1,
dtConcat = dtSum,
dtConcat = dtConcat << concatenate( dtSum, append to first table );
Close( dtSum, nosave );
);
);
);
Re:打开25个表,每个表汇总,并连接所有汇总表。 @Zihao ,
在JMP中打开数据表时,捕获对它的引用的一种方法是执行以下操作:
dt = Open(<YOUR custom="" path="">);</YOUR>
现在,dt保存对数据表的引用,您可以传递消息并向其发出命令。现在,另一种将消息传递到数据表的方法是,如果您知道数据表的名称
Data Table("Big Class") // This is an example 有关如何连接数据表的问题的AS,您可以使用以下模板:
for(i = 1, i <= N Items(files), i++,
dt = Open(<CUSTOM script="" here="">);
If(i == 1,
dt_Results = New Table("Results");
dt_Results = dt;
,
dt_Results << Concatenate(dt,"Append To First Table");
);
);</CUSTOM>