打開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>