긴 형식에서 넓은 형식으로 데이터를 어떻게 바꾸나요?저는 새로운 JMP 사용자입니다.
내 데이터는 현재 긴 형식입니다. 즉, 주제에는 각각 여러 줄의 데이터가 있습니다. 하지만 생존 분석을 위해서는 넓은 형식의 데이터가 필요합니다(피험자당 1줄의 데이터). 전치 기능을 사용하려고 하면 JMP에서 "전치할 수 없습니다. 데이터 열에는 다양한 데이터 유형이 있습니다." 변수는 연속형과 명목형이 혼합되어 있습니다. 그러면 어떻게 해야 할까요? 다른 데이터 세트를 와이드에서 롱으로 어려움 없이 변환할 수 있었지만 그 반대로는 할 수 없는 것 같습니다.
현재 데이터는 다음과 같이 설정됩니다(가짜 데이터).
ID Var1 Var2 결과
001 1 1 0
001 1 1 0
001 1 0 1
002 0 1 0
002 0 1 1
003 1 1 0
나는 이것을 이렇게 원합니다 :
ID Var1_time1 Var2_time1 Var1_time2 Var2_time2.... 결과_timex
001 1 1 1 1 1
002 0 1 0 1 1
003 1 1 . . 0
감사해요!
Re: 긴 형식에서 넓은 형식으로 데이터를 어떻게 전환합니까?고마워요, 제프! 효과가 있었어요!Re: 긴 형식에서 넓은 형식으로 데이터를 어떻게 전환합니까?@ron_horne 올바른 해결책이 있지만 아마도 일부 사진이 도움이 될 것입니다.
테이블 -> 분할 원하는 방식으로 데이터를 다시 정렬하지만 새 열을 식별하는 열이 필요합니다. 귀하의 경우 ID 내의 각 행에 대한 열을 생성하려고 하므로 ID 내의 행을 계산하는 열이 필요합니다.@ron_horne 이 칼럼을 불렀다 색인 .
또한 데이터가 다음 기준으로 정렬되어 있는지 확인해야 합니다. ID 이것이 작동하려면.
첫 번째 게시물에서 JMP 데이터 테이블 형식으로 제시한 데이터는 다음과 같습니다.

이 데이터에 다음을 추가해야 합니다. 색인 열.@ron_horne 그의 Index 열에는 다른 공식을 사용했지만 저는 좀 더 간단한 것을 좋아합니다.

위의 공식은 다음과 같습니다.
If( :ID != Lag( :ID, 1 ), 1, Lag( :Index, 1 ) + 1)
산문적으로 이것은 현재 행의 ID 값이 이전 행의 ID와 동일하지 않은 경우(예: 지연( :ID, 1) ) 그런 다음 색인 열이 아니면 다음 값을 취합니다. 색인 이전 행의 열(예: 지연(:색인, 1) )
보시다시피, 색인 이제 데이터 테이블의 열에서 행 수를 계산합니다. ID .

이제 우리는 사용할 수 있습니다 테이블->분할 당신의 분할 Var1 , Var2 그리고 결과 열 기준 색인 행을 그룹화합니다. ID .

그러면 이 데이터 테이블이 제공될 것입니다. 제 생각에는 이것이 당신이 원하는 것입니다. ID 내의 각 행에 대해 새 열이 있고 ID당 하나의 행이 있습니다.

분할 기준 열을 생성하지 않은 간단한 예를 보는 것이 더 쉬울 수 있습니다. 여기 그것을 보여주는 비디오가 있습니다.
내가 표시를 놓쳤거나 여전히 혼란스러운 경우 알려주십시오.
Re: 긴 형식에서 넓은 형식으로 데이터를 어떻게 전환합니까?마지막 기회,
1) 첫 번째 명령은 원본 데이터 소스를 긴 형식으로 만듭니다.
2) 두 번째 명령은 각 ID에 대한 이벤트 번호에 대한 인덱스를 소개합니다. 각 ID의 이벤트 수가 동일할 필요는 없습니다. 그러나 일부 ID의 이벤트 수가 적으면 와이드 테이블 형식에서 누락된 값이 발생합니다.
3) 세 번째 명령은 요청한 방식으로 테이블을 분할하기 위해 인덱스와 ID 열을 활용합니다. 각 이벤트와 변수에 대해 하나의 열이 있고 각 행은 하나의 ID만 나타냅니다.
데이터에서 마지막 두 명령만 실행하면 됩니다.
names default to here(1);
// source data table
dt = New Table( "Long",
Add Rows( 7 ),
New Column( "ID",
Numeric,
Continuous,
Format( "Best", 5 ),
Set Values( [1, 1, 1, 2, 2, 3, 3] )
),
New Column( "Var1",
Numeric,
Continuous,
Format( "Best", 12 ),
Set Values( [1, 1, 1, 0, 0, 1, 1] )
),
New Column( "Var2",
Numeric,
Continuous,
Format( "Best", 12 ),
Set Values( [1, 1, 0, 1, 1, 1, 0] )
),
New Column( "Outcome",
Numeric,
Continuous,
Format( "Best", 12 ),
Set Values( [0, 0, 1, 1, 1, 0, 0] )
)
);
// add index column for spliting - no need to sort the table first
dt << new column ("index", formula(Sum( :ID[Index( 1, Row() )] == :ID ) ) );
// now split by index and group by ID
dt << Split(
Split By( :index ),
Split( :Var1, :Var2, :Outcome ),
Group( :ID ),
Output Table( "Wide" )
);
Re: 긴 형식에서 넓은 형식으로 데이터를 어떻게 전환합니까?이 코드는 나에게 2개의 테이블을 제공했습니다. 첫 번째는 "소스"라고 불리며 데이터 행 10개와 열 5개만 있었습니다. ID 열은 1~4(내 ID 아님)이며 ID는 3행에 표시됩니다. 나는 이것이 무엇을 하기로 되어 있었는지 정말로 모른다. 모든 데이터는 바이너리이며 심지어 내 날짜 변수도 마찬가지입니다. 두 번째 테이블 "제목 없음"에는 4개의 데이터 행과 4개의 열이 있습니다. ID는 1-4에서 행 아래로 이동하며 열은 모두 누락으로 표시됩니다.
나는 이것이 내가 원하는 것을하고 있다고 생각하지 않습니다.
Re: 긴 형식에서 넓은 형식으로 데이터를 어떻게 전환합니까?전체 스크립트를 있는 그대로 실행했고 결과가 원하는 결과인 경우 몇 번의 클릭만으로 데이터 세트에서 이를 재현할 수 있습니다.
1) 새 열을 추가하고 "인덱스"라고 부릅니다.
2) 공식을 다음과 같이 설정합니다: Sum( :ID[Index( 1, Row() )] == :ID )
3) 테이블 >> 분할하여 채워넣습니다.

확인을 클릭하면 완료됩니다.
최상의,
론
Re: 긴 형식에서 넓은 형식으로 데이터를 어떻게 전환합니까?좋습니다. 저는 JMP를 처음 접했고 JSL을 사용해 본 적이 없습니다. 하지만 SPSS, SAS 및 기타 몇 가지 프로그래밍을 많이 해봤습니다. 이 예에서는 스크립팅, 특히 "값 설정"을 전혀 따르지 않습니다. 다음 명령 블록은 분할 전에 그룹화를 위한 새로운 인덱스 변수를 생성하려고 하는 것 같습니다.
다른 데이터세트에서 넓은 데이터세트에서 긴 데이터세트로 이동할 때 몇 가지 변수를 만들었지만 이 경우 모든 주제의 관측치는 동일했습니다.
Re: 긴 형식에서 넓은 형식으로 데이터를 어떻게 전환합니까?먼저 다시 확인하지 못해 죄송합니다.
다음을 시도해 보세요
이름의 기본값은 여기입니다. ( 1 ) ;
// 소스 데이터 테이블
dt = 새 테이블 ( "원천",
행 추가 ( 10 ) ,
새 열 ( "ID ",
숫자,
마디 없는,
체재 ( "최상의", 5 ) ,
값 설정 ( [ 1 , 1 , 1 , 2 , 2 , 삼 , 삼 , 4 , 4 , 4 ] )
) ,
새 열 ( "Var1",
숫자,
마디 없는,
체재 ( "최상의", 12 ) ,
값 설정 ( [ 1 , 1 , 1 , 0 , 0 , 1 , 1 , 0 , 1 , 0 ] )
) ,
새 열 ( "Var2",
숫자,
마디 없는,
체재 ( "최상의", 12 ) ,
값 설정 ( [ 1 , 1 , 0 , 1 , 1 , 1 , 0 , 1 , 1 , 0 ] )
) ,
새 열 ( "결과",
숫자,
마디 없는,
체재 ( "최상의", 12 ) ,
값 설정 ( [ 0 , 0 , 1 , 1 , 1 , 0 , 0 , 1 , 1 , 1 ] )
)
) ;
// 분할을 위한 인덱스 열을 추가합니다. 먼저 테이블을 정렬할 필요가 없습니다.
dt << 새 열 ( "인덱스", 수식 ( 합집합 ( :ID [ 색인 ( 1 , 열 () )] == :ID ) ) ) ;
// 이제 인덱스로 분할되고 ID로 그룹화됩니다.
dt << 나뉘다 (
분할 기준 ( :색인 ) ,
나뉘다 ( :Var1, :Var2, :결과 ) ,
그룹 ( :ID )
) ;
Re: 긴 형식에서 넓은 형식으로 데이터를 어떻게 전환합니까?그때 무슨 일이 일어나고 있는지 잘 모르겠습니다. 데이터는 ID별로 정렬됩니다. ID별로 분할하고 변수를 "분할 열"로 사용하면 결국 14줄의 데이터와 각 ID/변수 조합에 대한 열이 생성됩니다.
나는 다음을 얻으려고 노력하고 있습니다 :
ID 방문1 방문2 .... 방문13 결과1 결과2 ... 결과13
001 9/13 10/20 ... 3/2 0 0 ... 1
002 7/04 8/12 ... 12/5 0 1 ... 1
내가 얻는 것은
날짜1-ID001 날짜1-ID002
1호선 9/13 7/04
2호선 10/20 8/12
감사해요,
조
Re: 긴 형식에서 넓은 형식으로 데이터를 어떻게 전환합니까?
앗..그룹을 이용하시고 거기에 아이디 항목도 넣어주시면 해결이 될 것 같습니다.
데이터가 ID별로 정렬된 경우(특정 ID에 대한 모든 데이터가 함께 있음) 정렬되지 않은 경우 Tables==>Sort로 이동하여 ID별로 데이터를 정렬합니다. 그런 다음 이를 "분할 기준" 열로 선택하고 Var1, Var2, Outcome을 "분할 열"로 선택하면 분할 기준 열 값당 하나의 행이 있는 데이터 테이블이 생성되고 Var1 001, Var1 002가 표시됩니다. ......Var1 013, Var2 001, Var2 002......Var2 013, 결과 001, 결과 002......결과 013.
최대 13레벨까지 가질 수 있다는 사실을 고려하면.
Re: 긴 형식에서 넓은 형식으로 데이터를 어떻게 전환합니까?고마워요, 론. 하지만 저는 간단한 요약을 하려는 게 아닙니다. 생존분석을 하고 있어요. 첫 번째 단계는 데이터를 와이드 형식으로 가져오는 것입니다.
조Re: 긴 형식에서 넓은 형식으로 데이터를 어떻게 전환합니까?고마워요, 짐. 그것은 부분적으로 효과가 있었습니다. 그러나 각 객체 ID(n=15,000)에 대해 한 행을 가져오는 대신 14행의 데이터를 얻었고 각 변수 이름에 SubjectID가 추가되었습니다.
내 데이터는 SubjectID로 구성되어 있습니다. 그 안에서 피험자는 각 방문에 대해 여러 줄의 데이터(치료 코드)를 가질 수 있습니다. 긴 형식에는 주제당 1~13줄의 데이터가 있습니다.
여러 개의 "분할 기준" 변수를 사용해야 합니까? "그룹별"을 사용해야 합니까?
감사해요,
조
Re: 긴 형식에서 넓은 형식으로 데이터를 어떻게 전환합니까?짐 말이 맞아요. 그러나 ID당 데이터 요약을 생성하기 위해 이 작업을 수행하는 경우 테이블 >>> 요약을 사용하여 이 단계를 저장할 수 있습니다.
최상의,
론
Re: 긴 형식에서 넓은 형식으로 데이터를 어떻게 전환합니까?당신이하고 싶은 것은 사용하는 것입니다
테이블==>분할
ID로 분할하고 var1,var2 및 결과를 분할 열로 지정할 수 있습니다.Re: Long 포맷에서 Wide 포맷으로 데이터를 전치하려면 어떻게 해야 하나요?오래된 스레드인 줄 알지만, 질문이 있습니다. 이 방법은 제게는 효과가 있었지만, 인덱스 열을 만들려고 하면 첫 번째 ID가 비어 있습니다. 이렇게 보입니다.
이런 현상이 무엇 때문에 일어나는지 아는 사람 있나요?

Re: Long 포맷에서 Wide 포맷으로 데이터를 전치하려면 어떻게 해야 하나요?원하는 것을 얻는 한 가지 방법은 다음과 같습니다.
If( Row() == 1,
theVal = 1,
If( Lag( :yourColumn ) != :yourColumn,
theVal
++)
);
theVal;
Re: Long 포맷에서 Wide 포맷으로 데이터를 전치하려면 어떻게 해야 하나요?안녕하세요,
이 공식을 어디에 넣어야 하나요? 같은 Index 열에? "yourColumn"을 뭔가로 바꿔야 하나요?
Re: Long 포맷에서 Wide 포맷으로 데이터를 전치하려면 어떻게 해야 하나요?제가 지정한 수식은 인덱스 열에 배치됩니다.
"yourColumn"은 열이 변경될 때 Index 열의 값을 증가시키려는 열의 이름으로 변경해야 합니다.