표 1은 다음과 같다
| 인내심 있는 | 분석 결과 1 | 분석 결과 2 | 분석 결과 3 |
| 1001 | 1 | ㅏ | + |
| 1001 | 2 | 비 | + |
| 1002 | 1 | 씨 | - |
| 1003 | 2 | 디 | - |
표 2는 다음과 같다
| 인내심 있는 | 부작용 |
| 1001 | 아아아 |
| 1002 | 아브 |
| 1002 | aac |
| 1002 | 아드 |
| 1003 | bbb |
| 1003 | 영국 BBC |
내가 얻고 싶은 결과는 다음과 같습니다:( 인내심 있는 열은 이 두 테이블의 '공유 열'입니다.)
| 인내심 있는 | 분석 결과 1 | 분석 결과 2 | 분석 결과 3 | 부작용 |
| 1001 | 1 | ㅏ | + | 아아아 |
| 1001 | 2 | 비 | + | |
| 1002 | 1 | 씨 | - | 아브 |
| | | | | aac |
| | | | | 아드 |
| 1003 | 2 | 디 | - | bbb |
| | | | | 영국 BBC |
누군가 나에게 가능한 한 간단한 솔루션을 제공할 수 있습니까?
감사해요
@Chris_Kirchberg 인내심과 매우 상세한 답변에 감사드립니다!
나는 이것이 내가 허공에서 만든 예라는 점에 주목했어야 했습니다.
다른 프로그래밍 팀원들이 화면을 쉽게 스크롤하여 LB와 AE를 비교할 수 있도록 이 예와 같은 표를 만들고 싶습니다.
아, 환자에 대해 여러 번 분석을 측정할 때 각 측정에는 혼동 가능성 없이 각 측정에 대한 이상 사례(일치하는 ID가 있음)가 올바르게 정렬되었는지 확인하기 위해 실제로 고유한 ID가 있어야 한다는 점을 언급하는 것을 잊었습니다( 내 예에서와 같이 환자 1001에 대해 부작용 aaa가 반복되었지만 그렇게 되어서는 안 되었다고 생각합니다.
일반적으로 유해사례에 대한 날짜-시간 스탬프(또는 연구일) 및 각 분석의 각 측정에 대한 날짜-시간 스탬프(또는 연구일)입니다. 이렇게 하면 이상 사례가 각 분석에 대해 보고된 측정값 중 하나만 해당되는 것으로 예상되는 경우 올바르게 표시됩니다. 분석 결과가 기록된 당일에 여러 부작용이 발생한 경우에도 동일합니다. 예를 들어:
1 번 테이블
| 인내심 있는 |
공부하는 날 |
분석 1 |
분석 2 |
분석 3 |
| 1001 |
1 |
1 |
ㅏ |
+ |
| 1001 |
2 |
2 |
비 |
+ |
표 2
| 인내심 있는 |
공부하는 날 |
부작용 |
| 1001 |
1 |
아아아 |
| 1001 |
2 |
|
표 3(환자 및 연구일을 일치 열로 사용하고 두 테이블의 포함된 비일치 사용을 통한 단순 조인)
| 인내심 있는 |
공부하는 날 |
분석 1 |
분석 2 |
분석 3 |
부작용 |
| 1001 |
1 |
1 |
ㅏ |
+ |
아아아 |
| 1001 |
2 |
2 |
비 |
+ |
|
이렇게 하면 발생할 수 있는 모호하고 우발적인 할당을 방지하고 추가 분석 및 그래프 작성을 위해 JMP에서 사용할 수 있습니다. 또한 테이블 2의 행 2는 학습 2일에 이벤트가 없는 것으로 가정하므로 조인 시에는 실제로 필요하지 않습니다.
안녕 @VBIR ,
처럼 @txnelson 앞서 언급한 바와 같이 테이블이 표시된 대로 정확하게 보이도록 하려면 몇 가지 스크립팅이나 여러 대화형 단계를 수행해야 합니다. 그러나 JMP 표는 실제로 그런 방식으로 데이터를 표시하도록 설계되지 않았습니다. 이는 스프레드시트가 아닌 데이터 테이블이므로 JMP 데이터 테이블 관점에서 간단한 조인은 다음과 같습니다.

이는 JMP 표가 분석 및 그래프 작성 목적으로 사용되는 반면 스프레드시트는 읽기 쉬운 수치 요약을 작성하기 위한 것이기 때문입니다. 임상 시험 세계에서 데이터는 일반적으로 이미지에 표시된 방식으로 저장되지만 표시된 것과 더 유사하게 표시될 수도 있습니다.
그러면 다음 질문으로 이어집니다. 귀하가 제공한 방식으로 결합된 데이터를 표시하는 목표는 무엇입니까? 보고 목적인가요? 아니면 결과에 대해 추가 그래프 작성이나 분석을 수행할 계획인가요?
이 작업은 두 테이블 모두에 카운터 열을 추가하여 수행할 수 있으며, 거기에 있는 환자의 반복되는 값의 수를 각각 계산합니다.
그런 다음 환자와 카운터를 일치시켜 조인을 수행할 수 있습니다.
마지막으로 데이터를 다시 환자 정렬 값으로 정렬하고 약간의 정리 작업을 수행하면 작업이 실현됩니다.

결과를 얻는 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} );