전치를 사용하여 한 테이블에서 두 번째 테이블의 열로 데이터 하위 집합 이동다시 게시해서 죄송합니다. 나는 내 워크 플로의 일부를 여기에 가려진 채로 게시하고 있으며 여전히 어려움을 겪고 있습니다. 나는 진짜 이유없이 StackOverflow가 소리를 지르는 것에 대한 나쁜 경험을했기 때문에 응답을 확인하는 데 어려움이 있습니다. 시간이 지남에 따라 상처가 치유 될 것이라고 확신합니다. 어쨌든, 나는 주변에 있고 결국 당신의 응답을 얻을 것입니다.
기술적 요점에 도달하려면 :
일부 샘플이 실행 된 날짜를 매니페스트 파일의 세 개의 개별 열에 복사하려고합니다 (각 샘플은 프로젝트의 랩 부분에서 모든 것이 잘 진행되었다고 가정 할 때 3 개의 개별 경우에 실행되어야 함). 각 열이 데이터 수집의 한 인스턴스가되도록 내가 수집 한 내용에서 프로젝트의 진행중인 메타 데이터를 추적합니다. 각각 기증자 ID를 가진 여러 기증자가 있고, "동일한 데이터 포인트"에 대해 기기의 여러 수집 채널과 같은 데이터에 중복성이 있습니다 (어떻게 보는지에 따라 다름). 그래야한다고 생각합니다.
여기에 내가 작업하려고 시도한 의사 코드가 있으며 지금까지 거칠 었습니다. 이유를 모르겠습니다. 저는 노련한 컴퓨터 과학자, 개발자 또는 소프트웨어 엔지니어가 아닙니다. 도움을 주시면 감사하겠습니다.
DataTypes:
(associative array) DonorID{
(key) Month1: (value) date1 (empty at start)
(key) Month2: (value) date2 (empty at start)
(key) Month3: (value) date3 (empty at start)
}
find unique donor IDs in data
for each donor ID{
get (i.e. subset) data keyed on donor ID;
for Month in 1, 2, 3 (strings){
if no date in donorID associative array{
add date from data;
}else if date already{
is the date in the data table cell the same as in the associative array entry?
if yes, do nothing (indicates different target channel)
if no, ping user
Multiple run dates for same data point is a problem.
}
}
}
Copy from data to manifest:
loop over DonorID associative array:
for each donorID:
in Month 1, 2, or 3:
add date1 2 or 3 to "Actual Month [1, 2, or 3] Stability Test Date" in manifest
donorID is still row identifier
date (1, 2, or 3) is now column identifier스크립팅Re : 전치로 한 테이블에서 두 번째 테이블의 열로 데이터 하위 집합 이동안녕하세요,
커뮤니티에 오신 것을 환영합니다! 도움을 요청할 때 다른 게시판에서 부정적인 경험을해서 죄송합니다. JMP 사용자 커뮤니티는 환영하고 도움이되는 곳이지만 원하는 정보를 얻을 수있는 기회를 극대화 할 수있는 몇 가지 "모범 사례"가 있습니다.
좀 더 일반적인 질문을하는 것이 당신이 그것을 풀 수 있다면 갈 길이다.하지만 나는 때때로 "그가 모르는 것을 모른다"는 것을 알고있다. 상당량의 의사 코드를 게시하는 것은 사람들을 놀라게 할 수 있습니다. 다른 방법으로 질문을 할 수 없다면 "이전"및 "이후"파일과 스크린 샷을 첨부하여 시청자가 구체적인 정보를 얻을 수 있도록하는 것이 크게 도움이됩니다. "시작"테이블 (또는 텍스트 데이터) 및 "마침"테이블의 예. 이것은이 특별한 경우에 확실히 실질적인 차이를 만들 것입니다. 데이터 세트를 "정리"해야한다면 괜찮습니다 (정말 최고). 당신이 설명하려는 요점이 여전히 만들어 질 수있는 한 모든 것이 좋습니다.
구체적이고 대상이 명확한 질문을하고 설명 파일과 스크린 샷을 포함하면 여기에있는 많은 사람들이 도움을받을 가능성이 높습니다. 나는 정말로 그것에 저항 할 수없는 몇 명의 공격자 이상을 생각할 수있다!
건배,
브래디
Re : 전치로 한 테이블에서 두 번째 테이블의 열로 데이터 하위 집합 이동고마워, 브래디.Re : 전치로 한 테이블에서 두 번째 테이블의 열로 데이터 하위 집합 이동안녕하세요 여러분. 지금까지 내 코드는 다음과 같습니다.
Names Default To Here( 1 );
dt_data = Open( "[filepath, no issues here]" );
dt_manifest = Open( "[filepath, no issues here]" );
Summarize( dt_data, IDs = by( :ID ) ); //this finds all the unique IDs in the data file, which we will need //[no issues here]
//First, populate the temporary data structure--associative array--from the data file which we will then copy over to the manifest file.
For( i = 1, i <= N Items( IDs ), i++,
ID = IDs[i];
data_array = Associative Array( {"data1", "data2", "data3"}, {{}, {}, {}} ); //it appears in the print statements we get 3 copies, indicating this loop works
For( data = data_array << First, !Is Empty( data ), data = data_array << Next( data ), //looping through data_array's keys is clunky but done this way in JMP
Write( ID ); //just a check; works
data_array[data] = :Run date << Where(:ID == ID & :Timepoint == data); //does not work
//...continue with further code to transfer from LBCM_array to manifest
);
);구조와 정보 (이름 'a'이름, 라벨에서 라벨까지)를 유지하면서 기밀이되도록 정리했습니다 (기업 정보를 염려 할 필요가 없습니다.)).
내 문제는 현재이 라인에 있습니다.
data_array[data] = :Run date << Where(:ID == ID & :Timepoint == data);
오류 메시지를 던집니다.
.
Name Unresolved: Run date in access or evaluation of 'Run date' , :Run date/*###*/
In the following script, error marked by /*###*/
...
data_array[data] = :Run date/*###*/ <<WHERE></WHERE>
: 실행 날짜는 실험 실행 날짜가있는 데이터 테이블 (특히 dt_data)의 데이터 열 (헤더)입니다. 각 데이터 포인트가 세 번 / 세 번 수집되어야하므로 초기화 할 때 data_array에 세 개의 키와 세 개의 빈 값이 있으므로 두 번째 파일로 전송하려고합니다. 이것은 데이터가가는 곳,이 연관 배열 (data_array)입니다. 그런 다음 dt_manifest로 전송되지만이 부분이 작동하면 나중에 사용할 수 있습니다.
지금은 액세스하는 데 문제가있는 것 같습니다.
data_array[data] = :Run date << Where(:ID == ID & :Timepoint == data);
내가 관심있는 행과 열의 적절한 선택. 이 시점에서 청중의 모든 사람이 내가있는 데이터의 하위 집합을 선택하는 방법을보다 구문 적으로 (그리고 의미 상으로) 올바른 방식으로 지정하는 방법에 대한 솔루션이나 기여를 제공 할 수있을만큼 문제 설명이 명확합니까? (data_dt에서)에 관심이 있습니까?
조옮김 문제에 대해 걱정하지 마십시오. 나중에 다룰 것이며 데이터가 aa (연관 배열)에 있으면 솔직히 매우 쉬울 것이라고 생각합니다. 이 시점에서 나는 여전히 행 / 열 선택, 데이터 테이블의 하위 집합 등 관련 문제를 조작하는 방법을 배우고 있습니다.
한 가지 더 참고 : 날짜와 데이터 및 배열이 섞여있는 것이 이상해 보인다면, 아마도 회사의 비밀을 안전하게 유지하기 위해 데이터 열의 스크러빙 / 익명화 제목 / 라벨 또는 관련 데이터 엔티티에 대해 잘못된 이름을 선택했기 때문일 것입니다. 나는 내가 말하고 싶은이 모든 과정에서 여전히 신인이고, 안전한 쪽에서 실수하는 것을 선호한다.
나는 내 끝에서 문제에 대해 계속 노력할 것입니다.
감사합니다.
마이크
Re : 전치로 한 테이블에서 두 번째 테이블의 열로 데이터 하위 집합 이동마이크,
Associative Array를 사용하려는 이유에 대해 조금은 잃어 버렸지 만, 그럼에도 불구하고 아래 코드가 각 ID에 대한 3 개의 측정 행에 대한 날짜 값인 배열로 이동할 것이라고 믿습니다.나는 당신의 데이터의 레이아웃과 닮았 으면하는 몇 가지 데이터를 만들었습니다.나는 당신의 진술과 코드 사용을 기반으로 추측하고 있습니다.

다음은 스크립트입니다.위의 데이터 테이블은 스크립트 시작 부분에 생성되므로 코드의 핵심은 데이터 테이블 생성 아래에 있습니다.
Names Default To Here( 1 );
dt_data = New Table( "Example",
Add Rows( 6 ),
New Column( "ID", Character, "Nominal", Set Values( {"A", "A", "A", "B", "B", "B"} ) ),
New Column( "Run Date",
Numeric,
"Continuous",
Format( "m/d/y", 12 ),
Input Format( "m/d/y" ),
Set Values( [3692304000, 3694982400, 3697401600, 3700080000, 3702672000, 3705350400] )
),
New Column( "TimePoint", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [., ., ., ., ., .] ) )
);
//dt_manifest = Open( "[filepath, no issues here]" );
Summarize( dt_data, IDs = by( :ID ) ); //this finds all the unique IDs in the data file, which we will need //[no issues here]
//First, populate the temporary data structure--associative array--from the data file which we will then copy over to the manifest file.
For( i = 1, i <= N Items( IDs ), i++,
ID = IDs[i];
theRows = dt_data << get rows where( :ID == ID );
data_array = Associative Array( {"data1", "data2", "data3"}, {{}, {}, {}} );
k=0;
For( data = data_array << First, !Is Empty( data ), data = data_array << Next( data ), //looping through data_array's keys is clunky but done this way in JMP
k++;
show( ID ); //just a check; works
data_array[data] = :Run date[theRows[k]];
//...continue with further code to transfer from LBCM_array to manifest
);
show(data_array);
);
코드 결과는 로그에 나열됩니다.
ID = "A";
ID = "A";
ID = "A";
data_array = ["data1" => 3692304000, "data2" => 3694982400, "data3" => 3697401600];
ID = "B";
ID = "B";
ID = "B";
data_array = ["data1" => 3700080000, "data2" => 3702672000, "data3" => 3705350400];
data_array의 숫자는 실행 날짜의 숫자 값입니다.
Re : 전치로 한 테이블에서 두 번째 테이블의 열로 데이터 하위 집합 이동안녕하세요,
당신은 쓰기:
내 문제는 현재이 라인에 있습니다.
data_array[data] = :Run date << Where(:ID == ID & :Timepoint == data);
몇 가지 잠재적 인 문제가 있습니다. 다음 사항을 확인하세요.
1) : Run Date는 쓰여진대로이 코드 줄이 해석되는 시점에 현재 데이터 테이블의 열을 나타냅니다. 이 코드 줄을 해석 할 때 현재 데이터 테이블에 "실행 날짜"라는 열이 포함되어 있지 않다는 오류 메시지가 나타납니다. 두 개의 테이블을 여는 것을 봅니다. 사용할 테이블을 JMP에 맡기면 의도 한 테이블이 실제로 현재 테이블인지 항상 확인하십시오. 현재 데이터 테이블 명령을 사용하여 원하는 테이블을 현재 테이블로 만들 수 있습니다.
dt1 = open("firstfile");
dt2 = open("secondfile");
Current Data Table (dt1); // sets first table current
Current Data Table (dt2); //sets second table current
그러나 결정하기 위해 JMP에 맡길 필요는 없습니다. 사용할 테이블을 현재 여부에 관계없이 명시 적으로 지정할 수 있습니다. 표 : 열 형식은 다음과 같습니다.
dt1:Run Date
2) 테이블 통화 문제를 해결 한 후에는 << 행 가져 오기 () 일부 기준을 충족하는 행을 리턴하기 위해 적절한 데이터 테이블로 전송 된 메시지. 종종 이들은 귀하의 경우와 같이 색인으로 사용됩니다. dt1로 작업한다고 가정하면 코드는 다음과 같이 나타납니다.
data_array[data] = dt1:Run Date[dt1 << Get rows Where(:ID == ID & :Timepoint == data)];
이 라인은 3 가지 작업을 수행합니다.
1) 일부 기준을 충족하는 dt1의 행을 가져 와서 벡터로 반환합니다. 때문에 << 행 가져 오기 () 메시지가 dt1로 전송되면 : ID 및 : Timepoint도 dt1에있는 것으로 이해됩니다.
2) 위의 1 단계에서 반환 된 벡터를 dt1의 Run Date 열인 dt1 : Run Date에 대한 인덱스로 사용합니다. dt1 : Run Date를 사용하여 실행 날짜를 dt1 테이블로 명시 적으로 범위를 지정 했으므로 dt1이 현재 테이블인지 여부는 중요하지 않습니다. 이 두 번째 단계를 완료하면 실행 날짜 열에서 정확히 원하는 값의 벡터 값이 반환됩니다.
3) 위의 2 단계에서 반환 된 실행 날짜 값의 벡터를 특정 키의 값으로 할당합니다. 데이터, 연관 배열에서 data_array .
건배,
브래디
Re : 전치로 한 테이블에서 두 번째 테이블의 열로 데이터 하위 집합 이동안녕 짐. 응답 해 주셔서 감사합니다. 코드가 어떻게 작동하는지 인간 영어로 설명해 주시겠습니까? 내 해석은 다음과 같습니다. ID가 고유 한 모든 행은 theRows에 배치됩니다. 그런 다음 인덱스 k가 인스턴스화됩니다.실행 날짜가 데이터 배열에 추가되는 루프 내에서 증가합니다.이 루프 내에서 이제는 이전에 가졌던 것 대신 theRows의 각 고유 값이 : Run 날짜에 액세스하기위한 인덱스로 사용되며 그 결과는 데이터 배열에 채워집니다.
내가 더 오래 공부한다면 이것은 나에게 의미가 있습니다. 언뜻보기에는 너무 명확하지 않습니다. 확실하지 않다. 그러나 게시물 끝에 한 줄로 결론을 설명합니다.
스크럽 된 모든 변수를 코드에서 실제 변수로 바꾼 후 오류가 발생합니다.
invalid subscript (must be number or list of numbers) in access or evaluation of 'theRows[k]' , theRows[/*###*/k]
이유를 모르겠습니다.
여전히 혼란스럽고이 코드를 계속 연구 할 것입니다. 이상합니다. 저는 대학에서 상당한 양의 코딩 수업을 들었지만 지식 기반을 유지하지 않았기 때문에 시간이 지남에 따라 침식 될 수 있다고 생각합니다.
도와 주셔서 감사합니다!
남자 이름
추신 : 왜 연관 배열을 사용하는지 : Java / Python 라인에 대한 경험이 많은 JMP 초보자로서 데이터를 전송하는 효율적인 방법이라고 생각했습니다. 테이블을 직접 조작하는 것이 좋습니다. 나는 지금까지이 길을 따라 왔는데, 이런 방식으로 당면한 작업을 완료하는 것이 흥미로울 지 궁금합니다.
Re : 전치로 한 테이블에서 두 번째 테이블의 열로 데이터 하위 집합 이동고마워, 브래디. 그 모든 것이 나에게 의미가 있습니다.
이러한 것 중 일부는 실제로 내 코드에서 문제가 된 것 같습니다. 나는 그들에게 말했고 앞으로 나아가고있다. 조금 알아 내면 게시 할 새로운 문제가 있습니다.
마이크