표 1은 다음과 같습니다.
| 환자 | 분석 결과 1 | 분석 결과 2 | 분석 결과 3 |
| 1001 | 1 | ㅏ | + |
| 1001 | 2 | 비 | + |
| 1002 | 1 | 씨 | - |
| 1003 | 2 | 디 | - |
표 2는 다음과 같습니다.
| 환자 | 부작용 |
| 1001 | aaa |
| 1002 | aab |
| 1002 | aac |
| 1002 | aad |
| 1003 | bbb |
| 1003 | bbc |
내가 얻고 싶은 결과는 다음과 같습니다. 환자 열은이 두 테이블의 '공유 열'입니다.)
| 환자 | 분석 결과 1 | 분석 결과 2 | 분석 결과 3 | 부작용 |
| 1001 | 1 | ㅏ | + | aaa |
| 1001 | 2 | 비 | + | |
| 1002 | 1 | 씨 | - | aab |
| | | | | aac |
| | | | | aad |
| 1003 | 2 | 디 | - | 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 ,
같이 헉헉 위에서 언급 한대로 테이블이 정확히 보이도록하려면 스크립팅 또는 여러 대화 형 단계를 수행해야합니다. 그러나 JMP 테이블은 실제로 이러한 방식으로 데이터를 표시하도록 설계되지 않았습니다. 스프레드 시트가 아니라 데이터 테이블이므로 JMP 데이터 테이블 관점에서 단순 조인은 다음과 같습니다.

이는 JMP 테이블이 분석 및 그래프 작성 목적으로 사용되기 때문입니다. 스프레드 시트는 읽기 쉬운 수치 요약을 만들기위한 것입니다. 임상 시험 세계에서 데이터는 일반적으로 이미지에 표시된 방식으로 저장되지만 사용자가 보여준 것과 더 비슷하게 표시 될 수 있습니다.
그러면 다음 질문으로 이어집니다. 결합 된 데이터를 우리에게 제공 한 방식으로 표시하는 것이 목표는 무엇입니까? 보고 목적입니까, 아니면 결과로 추가 그래프 또는 분석을 수행 할 계획입니까?
아, 환자에 대해 여러 번 분석을 측정 할 때 각 측정에는 혼동없이 각 측정에 대해 부작용 (일치하는 ID가 있음)이 적절하게 정렬되도록 자체 ID가 있어야합니다 ( 내 예에서와 같이 부작용 aaa가 환자 1001에 대해 반복되었지만 그럴 필요가 없었습니다.
일반적으로 부작용에 대한 날짜-시간 스탬프 (또는 연구 일) 및 각 분석에 대한 각 측정에 대한 날짜-시간 스탬프 (또는 연구 일). 이렇게하면 부작용이 각 분석에 대해보고 된 측정 중 하나에 만 해당되는 경우 올바르게 표시됩니다. 분석 결과가 기록 된 같은 날 여러 유해 사례에 대해 동일합니다. 예를 들면 :
1 번 테이블
| 환자 |
공부의 날 |
분석 1 |
분석 2 |
분석 3 |
| 1001 |
1 |
1 |
ㅏ |
+ |
| 1001 |
2 |
2 |
비 |
+ |
표 2
| 환자 |
공부의 날 |
부작용 |
| 1001 |
1 |
aaa |
| 1001 |
2 |
|
표 3 (일치하는 열로 Patient 및 Study Day와 단순 조인하고 두 테이블에서 포함 된 비 일치 사용)
| 환자 |
공부의 날 |
분석 1 |
분석 2 |
분석 3 |
부작용 |
| 1001 |
1 |
1 |
ㅏ |
+ |
aaa |
| 1001 |
2 |
2 |
비 |
+ |
|
이것은 만들어 질 수있는 모호한 우발적 할당을 방지하고 추가 분석 및 그래프 작성을 위해 JMP에서 사용할 수 있도록합니다. 또한 연구 2 일차에는 이벤트가 없다고 가정하기 때문에 표 2의 행 2는 참가할 때 실제로 필요하지 않습니다.
안녕하세요. 인내심과 매우 상세한 답변에 감사드립니다!
나는 이것이 내가 얇은 공기로 만든 예라는 것을 주목해야했다.
다른 프로그래밍 팀원이 화면을 쉽게 스크롤하여 LB와 AE를 비교할 수 있도록이 예제와 같은 테이블을 만들고 싶습니다.