表1は次のようになります
| 患者 | アッセイ結果1 | アッセイ結果2 | アッセイ結果3 |
| 1001 | 1 | a | + |
| 1001 | 2 | b | + |
| 1002 | 1 | c | - |
| 1003 | 2 | d | - |
表2は次のようになります
| 患者 | 有害事象 |
| 1001 | aaa |
| 1002 | aab |
| 1002 | aac |
| 1002 | aad |
| 1003 | bbb |
| 1003 | BBC |
私が取得したい結果は次のようになります:(患者columnは、これら2つのテーブルの「共有列」です)
| 患者 | アッセイ結果1 | アッセイ結果2 | アッセイ結果3 | 有害事象 |
| 1001 | 1 | a | + | aaa |
| 1001 | 2 | b | + | |
| 1002 | 1 | c | - | aab |
| | | | | aac |
| | | | | aad |
| 1003 | 2 | d | - | bbb |
| | | | | BBC |
誰かが私に解決策を提供できますか(可能な限り簡単です)?
ありがとう
このタスクは、両方のテーブルにカウンター列を追加し、患者の繰り返し値の数をそれぞれカウントすることで実行できます。
次に、患者とカウンターで照合して、結合を行うことができます
最後に、データを患者の並べ替え値に並べ替えて、タスクを少しクリーンアップすることが実現されます

これが結果を得るための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が必要です(私の例のように、有害事象aaaが患者1001に対して繰り返されましたが、そうすべきではなかったと思います。
通常、有害事象の日時スタンプ(または研究日)および各アッセイの各測定の日時スタンプ(または研究日)。 そうすれば、有害事象が各アッセイで報告された測定値の1つだけにあると想定される場合、それは正しく表示されます。 アッセイ結果が記録された同じ日の複数の有害事象についても同じです。 例えば:
表1
| 患者 |
勉強の日 |
アッセイ1 |
アッセイ2 |
アッセイ3 |
| 1001 |
1 |
1 |
a |
+ |
| 1001 |
2 |
2 |
b |
+ |
表2
| 患者 |
勉強の日 |
有害事象 |
| 1001 |
1 |
aaa |
| 1001 |
2 |
|
表3(一致する列として患者と研究日と単純に結合し、両方のテーブルから含まれる不一致を使用する)
| 患者 |
勉強の日 |
アッセイ1 |
アッセイ2 |
アッセイ3 |
有害事象 |
| 1001 |
1 |
1 |
a |
+ |
aaa |
| 1001 |
2 |
2 |
b |
+ |
|
これにより、行われる可能性のあるあいまいな偶発的な割り当てが防止され、JMPで使用してさらに分析およびグラフ化することができます。 また、表2の行2は、調査2日目にイベントがないと想定されるため、参加する場合は実際には必要ありません。
@chris_kirchbergあなたの忍耐と非常に詳細な答えに感謝します!
これは私が薄い空気で作った例であることに注意してください。
他のプログラミングチームメイトが画面を簡単にスクロールしてLBとAEを比較できるように、この例のようなテーブルを作成したいと思います。