25 개의 테이블 열기, 각각에 대한 요약 및 모든 요약 테이블 연결.안녕하세요,
나는 새로운 JMP 사용자이고 JSL로 자동 데이터 조작을 시도하고있다. 설명 된 제목대로
(i = 1, i <= Nitems ( "directory"), i ++,
1) 25 개의 테이블 중 하나를 엽니 다.
2) 열린 테이블의 요약 테이블을 생성합니다.
);
3) 25 개의 모든 테이블을 루핑 한 후, 25 개의 요약 테이블의 병합 된 테이블을 생성하십시오.
나는 1 부와 2 부를하고 그것들을 반복했다. 그러나 결과 25 개의 요약 테이블을 자동으로 결합하는 f}은 확실하지 않습니다. 이제는 모든 테이블이 생성 된 후 수동으로 연결합니다.
지식이 부족하면 각 요약 테이블의 이름을 지정하고이를 연결해야 할 때이를 참조하는 방법이 있습니다.
또한 스크립트가 열려있는 모든 테이블 (파트 1)과 요약 테이블 (파트 2))을 닫을 수 있으면 좋을 것입니다. 연결된 테이블 만 리턴하십시오. (내 스크립트를 사용하면 총 50 개의 테이블이 튀어 나와 수동으로 닫아야합니다.)
내 스크립트 첨부 :
기본 디렉토리 설정 ( "E : \ Test");
files = 디렉토리의 파일들 ( "E : \ Test");
(i = 1, i <= N 항목 (파일), i ++,
열다(
파일 [i],
워크 시트 ( "워크 시트 1"),
모든 시트 (1),
워크 시트 연결 (0),
연결 열 만들기 (0),
워크 시트 설정 (
1,
열 헤더가 있음 (1),
헤더의 행 수 (1),
헤더가 행 (1)에서 시작합니다.
행 (2)에서 데이터 시작,
데이터는 열 (1),
데이터가 행 (0),
데이터가 열 (0)에서 끝납니다.
복제 된 스팬 행 (1),
복제 된 스팬 헤더 (0),
숨겨진 행 억제 (1), 숨겨진 행 억제
숨겨진 열 표시 안 함 (1), 숨겨진 열 표시 안 함
빈 열 제거 (1),
계층 구조로 처리 (0),
다중 시리즈 스택 (0),
가져 오기 셀 색상 (0),
제한 열 감지 (0),
열 구분 기호 문자열 ( "-")
)
);
새 열 ( "Xindex", 수식 (천장 (: 이름 ( "X") / : 이름 ( "dimensionX"))));
새 열 ( "Yindex", 수식 (Floor (: 이름 ( "Y") / : 이름 ( "dimensionY") ))));
개요(
그룹(
: 이름 ( "X"),
: 이름 ( "Y"),
: Xindex,
: Yindex),
Std Dev (: 이름 ( "Data1")),
Freq ( "없음"),
무게 ( "없음")
)
);
제목 : Re : 25 개의 테이블 열기, 각각에 대한 요약 및 모든 요약 테이블 연결.코드에서
dtConcat = dtSum;
내가 생각한 바는이 문장을 사용할 때 데이터 테이블의 복사본을 만드는 것입니다. 하지만 실제로 dtConcat과 dtSum은 변수 일 뿐이며 데이터 테이블에 대한 포인터를 포함하고 있으며 dtScat과 dtSum을 동일하게 지정하면 두 변수가 모두 같은 데이터 테이블을 가리키고 있습니다.
그런 다음 지정합니다.
close (dtSum,nosave);
그러면 변수 dtSum이 가리키는 데이터 테이블이 닫힙니다. 즉, 이제는 dtSum과 dtConcat 모두 더 이상 가리키는 열린 데이터 테이블이 없습니다.
제목 : Re : 25 개의 테이블 열기, 각각에 대한 요약 및 모든 요약 테이블 연결.안녕 Uday,
고마워요! 귀하의 스크립트는 if ()에서 세미콜론과 쉼표를 사용하는 방법을 알려줍니다 : 쉼표는 test와 expr을 구분하는 데 사용되고 세미콜론은 여러 인수를 하나의 expr로 결합하는 데 사용됩니다. 이 올바른지?
@txnelson
안녕 짐,
쉼표 및 세미콜론 사용법에 대한 올바른 경우 강조 표시된 줄을 추가하여 다음 스크립트를 작동해야합니다.
그러나이 새 스크립트를 사용하면 i = 2 일 때 dt와 dtSum 만 얻었습니다 (현재 테이블에 "i"가 무엇인지 추적하기 위해 모든 테이블에 다른 열을 추가했습니다).
강조 표시된 행이 없으면 i = 1 일 때 dt와 dtSum을 가지며 for () 루프가 완료되면 dtConcat을 갖습니다. 마지막 답장에서 설명한 것처럼 말입니다.
if(i == 1,
dtConcat = dtSum<FONT color="#FF6600"><STRONG>; close(dtSum,nosave);close(dt,nosave);</STRONG></FONT>,
dtConcat = dtConcat << Concatenate(dtSum,"Append to first table");close(dtSum,nosave);Close(dt,nosave);
);
제목 : Re : 25 개의 테이블 열기, 각각에 대한 요약 및 모든 요약 테이블 연결.안녕 짐,
고마워요! 이제는 JMP에서 참조를 사용하는 것에 대한 감각을 갖게되었습니다.
if () 함수에 대한 또 하나의 질문입니다. 다음 if () 함수에서 스크립트에 추가 한 i == 1은 테스트 1이고 dtConcat = dtSum은 expr1이고 나머지는 "dtConcat = dtConcat << ......."은 "else expr"입니다.
내 질문은 if ()에서 test 1에 대해 여러 표현식을 추가하는 방법입니다. 첫 번째 스크립트에서는 이제 세 개의 테이블이 출력됩니다.
1) dt = 1 일 때;
2) i == 1 인 경우 dtSum;
3) for () 루프가 완료되면 dtConcat, 정확히 필요한 것입니다.
이제는 스크립트를 실행 한 후 1) 및 2)를보고하지 않으려 고하며 보고서 3) 만보고 싶습니다.
두 번째 스크립트를 시도했지만 작동하지 않습니다. 또한 두 스크립트는 "잠기거나 파생 된 데이터 테이블에 추가 할 수 없습니다."라는 경고를 제공합니다.
if(i == 1,
dtConcat = dtSum,
dtConcat = dtConcat << Concatenate(dtSum,"Append to first table");close(dtSum,nosave);Close(dt,nosave)
);
두 번째 스크립트에서 나는 1) i == 1, dtSum을 dtConcat에 할당하고 dtSum과 dt를 닫으려고했습니다. 2) i가 1이 아닌 경우 dtSum을 dtConcat에 연결하고 dtSum과 dt를 닫습니다. 그러나 예상대로 작동하지 않습니다. 쉼표와 세미콜론을 잘못 사용하고 있기 때문에 그런 것 같아요?
if(i == 1,
dtConcat = dtSum; close (dtSum,nosave); close (dt, nosave),
dtConcat = dtConcat << Concatenate(dtSum,"Append to first table");close(dtSum,nosave);Close(dt,nosave)
);
제목 : Re : 25 개의 테이블 열기, 각각에 대한 요약 및 모든 요약 테이블 연결.코드에 연결 단계를 추가하기 만하면됩니다.
Set Default Directory( "E:\Test" );
files = Files In Directory( "E:\Test" );
For( i = 1, i <= N Items( files ), i++,
dt = Open(
files[i],
Worksheets( "worksheet1" ),
Use for all sheets( 1 ),
Concatenate Worksheets( 0 ),
Create Concatenation Column( 0 ),
Worksheet Settings(
1,
Has Column Headers( 1 ),
Number of Rows in Headers( 1 ),
Headers Start on Row( 1 ),
Data Starts on Row( 2 ),
Data Starts on Column( 1 ),
Data Ends on Row( 0 ),
Data Ends on Column( 0 ),
Replicated Spanned Rows( 1 ),
Replicated Spanned Headers( 0 ),
Suppress Hidden Rows( 1 ),
Suppress Hidden Columns( 1 ),
Suppress Empty Columns( 1 ),
Treat as Hierarchy( 0 ),
Multiple Series Stack( 0 ),
Import Cell Colors( 0 ),
Limit Column Detect( 0 ),
Column Separator String( "-" )
)
);
New Column( "Xindex", Formula( Ceiling( :Name( "X" ) / :Name( "dimensionX" ) ) ) );
New Column( "Yindex", Formula( Floor( :Name( "Y" ) / :Name( "dimensionY" ) ) ) );
dtSum = dt << Summary(
Group( :Name( "X" ), :Name( "Y" ), :Xindex, :Yindex ),
Std Dev( :Name( "Data1" ) ),
Freq( "None" ),
Weight( "None" );
If( i == 1,
dtConcat = dtSum,
dtConcat = dtConcat << concatenate( dtSum, append to first table );
Close( dtSum, nosave );
);
);
);
제목 : Re : 25 개의 테이블 열기, 각각에 대한 요약 및 모든 요약 테이블 연결. @ Zihao ,
JMP에서 데이터 테이블을 열 때 참조를 캡처하는 한 가지 방법은 다음과 같이하는 것입니다.
dt = Open(<YOUR custom="" path="">);</YOUR>
이제 dt는 메시지를 전달하고 명령을 실행할 수있는 데이터 테이블에 대한 참조를 보유합니다. 데이터 테이블에 메시지를 전달하는 또 다른 방법은 데이터 테이블의 이름을 아는 것입니다
Data Table("Big Class") // This is an example 데이터 테이블을 연결하는 방법에 대한 질문으로 다음 템플릿을 사용할 수 있습니다.
for(i = 1, i <= N Items(files), i++,
dt = Open(<CUSTOM script="" here="">);
If(i == 1,
dt_Results = New Table("Results");
dt_Results = dt;
,
dt_Results << Concatenate(dt,"Append To First Table");
);
);</CUSTOM>