尊敬的先生/女士,
我有兩張表需要連接
兩個請求:
要求1)
表 1 每天有多個條目

表 2 每天有 1 個條目

我想加入匹配“參數集名稱和時間戳”的表
建立一個這樣的表。我怎麼做?

要求2)
給定前兩個表,我如何連接它們,以便在每個給定的日子我只獲得參數 X 的最後一個值,如下所示

有什麼想法和建議嗎?
謝謝,蒂莫西
您擁有哪個 JMP 版本? 如果您有 JMP17,最簡單的方法是開啟表格,前往「連接表格」功能表並嘗試不同的選項。 請求 1 應該是非常簡單的聯接,對於請求 2,您可能需要在執行聯接之前建立匯總表。
此外,如果您能夠為我們提供範例表格(匿名或模擬作品),我們可以為您提供更準確的說明。
我有 JMP 16。我確實在帖子中放置了模擬表格。你能看到他們嗎?
好的,如果您有 JMP16,您將無法存取預覽表,但您可以啟用「保持對話方塊開啟」選項,這樣如果您搞砸了某些事情,對話方塊仍然打開。
我可以看到圖像,但它們並不是真正的表格,因為我無法在 JMP 中開啟它們,或無法將資料匯入 JMP。 如果您可以將它們新增為 JMP 表,則會變得更加容易。
對於選項 2,有一個骯髒的 hack:
Join 總是採用第一個符合條目。
所以有了這個選項

- 如果你反向表格順序(透過降序排序) ,“最後”-(現在:第一個)值將保留。
所以,開放的桌子較少 - 但如果我的承諾是真的,一種奇怪的感覺:)
dt= new table("test", add rows(8),New Column( "Column 1",
set values([1 1 1 1 1 2 2 2])
)
);
dt << New Column( "Rank1", set each value( Col Rank( 1,:Column 1 ) ));
dt2 = dt << Subset( All rows, Selected columns only( 0 ) );
dt2: Rank1 << set name("Rank2");
dt << Sort(By( :Rank1 ),Replace Table,Order( Descending, Descending ));
dt2 << Sort(By( :Rank2 ),Replace Table,Order( Descending, Descending ));
dt << Join(
With( dt2 ),
Merge Same Name Columns,
Match Flag( 0 ),
By Matching Columns( :Column 1 = :Column 1 ),
Drop multiples( 1, 1 ),
Include Nonmatches( 0, 0 ),
Preserve main table order( 0 )
);
謝謝回覆。我對創立虛擬專欄有點模糊。能詳細說明一下嗎?
非常感謝
建立虛擬列~變換列:
右鍵單擊列表中的一列並選擇行/行:

以下是一些需要支持的視覺效果@jthi和@hogi建議
第1期
Tables=>Join 將表 2 連接到表 1

第2期
Tables=>Sort 建立虛擬列並將其命名為 Row.......該列的公式為 Row()

然後
表=>連接 將表 1 連接到表 2

這是將運行 2 個問題的 JSL
names default to here(1);
dt1 = New Table( "Table 1",
Add Rows( 6 ),
New Column( "Parameter Set Name",
Character,
Set Values(
{"27109N5", "27109N5", "27109N5", "27109N5", "27109N5", "27109N5"}
)
),
New Column( "Timestamp",
Format( "yyyy-mm-dd", 12 ),
Input Format( "yyyy-mm-dd" ),
Set Values(
[3600115200, 3600115200, 3600201600, 3600201600, 3600201600, 3600201600]
)
),
New Column( "Parameter X",
Set Values( [2.32, 1.21, 1.45, 1.45, 7.89, 2.04] )
)
);
dt2 = New Table( "Table 2",
Add Rows( 2 ),
New Column( "Parameter Set Name",
Character,
Set Values( {"27109N5", "27109N5"} )
),
New Column( "Timestamp",
Format( "yyyy-mm-dd", 12 ),
Input Format( "yyyy-mm-dd" ),
Set Values( [3600115200, 3600201600] )
),
New Column( "Parameter Y",
Format( "Best", 12 ),
Set Values( [21, 22] )
)
);
// Join data tables
// → Data Table( "One to Many" )
Data Table( "Table 1" ) << Join(
With( Data Table( "Table 2" ) ),
Merge Same Name Columns,
By Matching Columns(
:Parameter Set Name = :Parameter Set Name, :Timestamp = :Timestamp
),
Drop multiples( 0, 0 ),
Include Nonmatches( 0, 0 ),
Preserve main table order( 1 ),
Output Table( "One to Many" )
);
// Create the Many to One table
// Sort data table
Data Table( "Table 1" ) << Sort(
By(
:Parameter Set Name,
:Timestamp,
Transform Column( "Row", Formula( Row() ) )
),
Replace Table,
Order( Ascending, Ascending, Descending )
);
// Join Table 1 to Table 2
// Join data tables
// → Data Table( "Many to One" )
Data Table( "Table 2" ) << Join(
With( Data Table( "Table 1" ) ),
Merge Same Name Columns,
By Matching Columns(
:Parameter Set Name = :Parameter Set Name, :Timestamp = :Timestamp
),
Drop multiples( 1, 1 ),
Include Nonmatches( 0, 0 ),
Preserve main table order( 1 ),
Output Table( "Many to One" )
);