表1看起來像
| 患者 | 分析結果1 | 測定結果2 | 測定結果3 |
| 1001 | 1個 | 一種 | + |
| 1001 | 2 | b | + |
| 1002 | 1個 | C | -- |
| 1003 | 2 | d | -- |
表2看起來像
| 患者 | 不良事件 |
| 1001 | aa |
| 1002 | 阿卜 |
| 1002 | AAC |
| 1002 | 阿德 |
| 1003 | bbb |
| 1003 | 英國廣播公司 |
我想要得到的結果看起來像:(患者列是這兩個表的“共享列”)
| 患者 | 分析結果1 | 測定結果2 | 測定結果3 | 不良事件 |
| 1001 | 1個 | 一種 | + | aa |
| 1001 | 2 | b | + | |
| 1002 | 1個 | C | -- | 阿卜 |
| | | | | AAC |
| | | | | 阿德 |
| 1003 | 2 | d | -- | bbb |
| | | | | 英國廣播公司 |
有人可以給我一個解決方案(盡可能簡單)嗎?
謝謝
可以通過在兩個表中添加一個計數器列來完成該任務,對存在的患者重複值的數量進行計數
然後可以完成連接,在患者和櫃檯上進行匹配
最後,將數據分類回到患者分類值並進行一些清理,就可以完成任務

這是獲得結果的JSL,但是JSL中的每個任務都可以輕鬆地以交互方式完成
Names Default To Here( 1 );
// Create example data tables
dt1 = New Table( "Table1",
Add Rows( 4 ),
New Column( "patient", character, Set Values( {"1001", "1001", "1002", "1003"} ) ),
New Column( "assay result 1", Character, "Nominal", Set Selected, Set Values( {"1", "2", "1", "2"} ) ),
New Column( "assay result 2", Character( 16 ), "Nominal", Set Values( {"a", "b", "c", "d"} ) ),
New Column( "assay result 3", Character( 16 ), "Nominal", Set Values( {"+", "+", "-", "-"} ) )
);
dt2 = New Table( "Table2",
Add Rows( 6 ),
New Column( "patient", Character, Set Values( {"1001", "1002", "1002", "1002", "1003", "1003"} ) ),
New Column( "adverse event", Character( 16 ), "Nominal", Set Values( {"aaa", "aab", "aac", "aad", "bbb", "bbc"} ) )
);
dt1 << New Column( "counter",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula(
If( Row() == 1, c = 1 );
If( Lag( :patient ) != :patient,
c = 1,
c
++);
c;
)
);
// Add a counter column to both data tables
dt2 << New Column( "counter",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula(
If( Row() == 1, c = 1 );
If( Lag( :patient ) != :patient,
c = 1,
c
++);
c;
)
);
// Join the tables matching upon patient and counter
dt3 = dt1 << Join(
With( dt2 ),
Merge Same Name Columns,
By Matching Columns( :patient = :patient, :counter = :counter ),
Drop multiples( 0, 0 ),
Include Nonmatches( 1, 1 ),
Preserve main table order( 1 )
);
// Sort the data into patient order
dt3 << sort( by( :patient, :counter ), order( ascending, ascending ), replace table( 1 ) );
// If the data came from only the "With" data table, delete the patient value
dt3:patient[dt3 << get rows where( :match flag == 2 )] = "";
// Clean up the table
dt3 << delete columns( {:Match Flag, :counter} );
你好@VBIR ,
如@txnelson提到,要使表格看起來與顯示的外觀完全一樣,您必須執行一些腳本編寫或多個交互步驟。 但是,JMP表實際上並非旨在以這種方式顯示數據。 它們是數據表,而不是電子表格,因此從JMP數據表的角度來看,簡單的連接看起來像這樣

這是因為JMP表用於分析和製圖目的,而電子表格用於生成易於閱讀的數字摘要。 在臨床試驗世界中,數據通常以圖像中顯示的方式存儲,但顯示的方式可能更像您顯示的內容。
這就引出了下一個問題,以您給我們的方式顯示聯接數據的目標是什麼? 是出於報告目的,還是您打算對結果進行一些其他圖形化或分析?
哦,我忘了提一下,當多次測量患者的化驗時,每個測量實際上都應該有自己的ID,以確保不良事件(具有匹配的ID)與每個測量正確對齊,而不會造成混淆(就像在我的示例中,患者1001重複發生了不良事件aaa,但我認為這種情況不應該發生。
通常,每個事件的每次測量的不良事件的日期時間戳(或研究日)和每次測量的日期時間戳(或研究日)。 這樣,如果不良事件僅應針對每種測定的報告測量值之一,則將正確顯示該事件。 在記錄測定結果的同一天,對多種不良事件也是如此。 例如:
表格1
| 患者 |
學習日 |
測定1 |
測定2 |
測定3 |
| 1001 |
1個 |
1個 |
一種 |
+ |
| 1001 |
2 |
2 |
b |
+ |
表2
| 患者 |
學習日 |
不良事件 |
| 1001 |
1個 |
aa |
| 1001 |
2 |
|
表3(與患者和研究日的簡單連接作為匹配列,並使用兩個表中包含的不匹配項)
| 患者 |
學習日 |
測定1 |
測定2 |
測定3 |
不良事件 |
| 1001 |
1個 |
1個 |
一種 |
+ |
aa |
| 1001 |
2 |
2 |
b |
+ |
|
這樣可以避免可能產生的含糊不清的意外分配,並允許在JMP中用於進一步的分析和製圖。 另外,加入時實際上並不需要表2中的第2行,因為可以假設在研究第2天沒有任何事件。
@chris_kirchberg感謝您的耐心配合和非常詳細的解答!
我應該注意到,這是我憑空做出的一個例子。
我只想為其他編程團隊創建一個類似於此示例的表格,以便他們可以輕鬆滾動屏幕來比較LB和AE。