다른 테이블에서 스크립트 반복반복되는 횟수를 결정하는이 결함 수준이 있습니다.
dtparms << Subset( By( :Defecting_Level ), All rows, Selected columns only( 0 ), columns( :Parameter, :CL_LL, :CL_UL, :MD_LL, :MD_UL ) );
dtParms1 = Data Table( "Defecting_Level=1" );<BR />dtParms2 = Data Table( "Defecting_Level=2" );
이것은 얼마나 많은 결함 레벨이 있는지에 따라 반복해야하는 코드입니다. 내 문제는 동일한 스크립트를 사용하여 다른 테이블을 반복 할 수 있습니까? 또는 탈북 수준 수에 따라이 프로세스를 어떻게 반복 할 수 있습니까? 예를 들어, 제 탈북 수준은 3입니다. 그런 다음이 코드를 세 번 실행하여 하위 집합 인 세 개의 테이블을 반복해야합니다. 감사
deftb << New Column( "MD1", numeric );
parameters = Column( dtParms1, "Parameter" ) << get values;
deftb_colnames = deftb << get column names( string );
parameters = Associative Array( Eval( parameters ) );
deftb_colnames = Associative Array( Eval( deftb_colnames ) );
parameters << Intersect( deftb_colnames );
params = parameters << get keys;
For( i = 1, i <= N Items( params ), i++,
foundRows = deftb << get rows where( As Column( deftb, dtParms1:Parameter[i] ) < dtParms1:CL_LL[i] & Is Missing( deftb:MD1 ) == 1 );
deftb:MD1[foundRows] = dtParms1:MD_LL[i];
foundRows = deftb << get rows where( As Column( deftb, dtParms1:Parameter[i] ) > dtParms1:CL_UL[i] & Is Missing( deftb:MD1 ) == 1 );
deftb:MD1[foundRows] = dtParms1:MD_UL[i];
);
해석학데이터 테이블다른스크립팅Re : 다른 테이블에서 스크립트 반복아래의 JSL이 쓰여진대로 작동하지 않을 것이라고 확신합니다. 제공된 샘플 코드에는 정의되지 않은 데이터 테이블에 대한 포인터가 있으므로 정확하게 정확하지 않을 수있는 몇 가지 가정을하고 있습니다. 그러나 내가 제공하는 논리와 구문을 따르면 지정된 입력 매개 변수 수에 관계없이 코드 하나를 사용하여 루프하는 방법에 대한 아이디어를 얻을 수 있습니다.
// By specifying the variable to hold the data table names
// that will be created from the Subset with the By clause
// the variable specified becomes a List with an element
// for each table created
theTables = dtparms << Subset(
By( :Defecting_Level ),
All rows,
columns( :Parameter, :CL_LL, :CL_UL, :MD_LL, :MD_UL )
);
Show( theTables );
For( k = 1, k <= N Items( theTables ), k++,
deftb << New Column( "MD1", numeric );
parameters = Column( theTables[k], "Parameter" ) << get values;
deftb_colnames = deftb << get column names( string );
parameters = Associative Array( Eval( parameters ) );
deftb_colnames = Associative Array( Eval( deftb_colnames ) );
parameters << Intersect( deftb_colnames );
params = parameters << get keys;
For( i = 1, i <= N Items( params ), i++,
foundRows = deftb << get rows where(
As Column( deftb, column( theTables[k],"Parameter")[i] ) < column( theTables[k], "CL_LL")[i] &
Is Missing( deftb:MD1 ) == 1
);
deftb:MD1[foundRows] = column(theTables[k],"MD_LL")[i];
foundRows = deftb << get rows where(
As Column( deftb, column( theTables[k],"Parameter")[i] ) < column( theTables[k], "CL_UL")[i] &
Is Missing( deftb:MD1 ) == 1
);
deftb:MD1[foundRows] = column( theTables[k],"MD_UL")[i];
);
);
Re : 다른 테이블에서 스크립트 반복빠른 답변 감사합니다! 후속 질문이 있습니다.
deftb << 새 열 ( "MD1", 숫자); => 반복 값이 저장 될 값은 반복 횟수에 따라 (MD1, MD2, MD3 ..)이어야합니다. 예를 들어, 테이블 1 값에 대한 반복은 MD1에 저장되고 테이블 2 값에 대한 반복은 MD2에 저장됩니다. 이 줄을 추가하려고했지만 작동하지 않습니다.
MD = { "MD1", "MD2", "MD3", "MD4", "MD5", "MD6"};
For (k = 1, k <= N Items (theTables), k ++,
deftb << 새 열 (MD [k + 1], 숫자);
도와 주셔서 감사합니다
Re : 다른 테이블에서 스크립트 반복deftb 데이터 테이블 참조가 설정되어 있고 theTables 목록이 채워져있는 한 아래의 두 코드 모두 잘 작동합니다. 스크립트가 작동하지 않았기 때문에 로그에 어떤 오류 메시지가 있었습니까?
MD = {"MD1", "MD2", "MD3", "MD4", "MD5", "MD6"};
For( k = 1, k <= N Items( theTables ), k++,
deftb << New Column( MD[k + 1], numeric )
);
// or, why go through all of the work to create the list MD
// when you can easily create the character string required
// for the column name as shown below
deftb = Current Data Table();
For( k = 1, k <= N Items( theTables ), k++,
deftb << New Column( "MD" || char[k + 1]), numeric )
);Re : 다른 테이블에서 스크립트 반복이제 작동합니다. 빠른 설명에 감사드립니다. 마지막 질문으로, 값에 대한 열 저장소를 생성 한 후이 루프는 'theTables [k]', theTables [/ * ### * / k] 액세스 또는 평가시 Subscript Range {1} 오류를 표시합니다.
For (i = 1, i <= N Items (params), i ++,
foundRows = deftb << get rows where (
열 (deftb, column (theTables [k], "Parameter") [i]) 누락 됨 (deftb : MD [k + 1]) == 1
);
deftb : MD [k + 1] [foundRows] = column (theTables [k], "MD_LL") [i];
foundRows = deftb << get rows where (
열 (deftb, column (theTables [k], "Parameter") [i]) 누락 됨 (deftb : MD [k + 1]) == 1
);
deftb : MD [k + 1] [foundRows] = column (theTables [k], "MD_UL") [i];
);
내 MD [k + 1] 때문인가요?Re : 다른 테이블에서 스크립트 반복여기서 무슨 일이 일어나고 있는지 알아 내기 위해서는 변수 k의 값을 결정하기 만하면됩니다. 그러면 theTables [k]를 참조하는 것이 잘못된 첨자를 가리키는 이유를 알려줍니다. 일반적으로 이는 인덱스 값으로 k를 사용하여 For () 루프를 사용했고 For () 루프의 사양에서 테이블 목록의 요소 수 이상으로 k를 증가시키기 때문입니다. 또는 스크립트의 이전 부분에서 사용 된 변수 k와이 시점에서 참조 될 때 k의 값은 부적절합니다.
스크립트에서 변수 k에 대한 참조 위로 마우스를 가져 가면 k의 현재 값이 표시됩니다. 그런 다음 가치가 어디에서 왔는지 알 수 있어야합니다.
마지막 참고 사항 .... 스크립트 시작 부분에서 변수를 초기화하지 않기 때문에 변수 값은 스크립트가 마지막으로 끝났을 때의 값으로 설정됩니다. 따라서 그것도 문제를 일으킬 수 있습니다.
Re : 다른 테이블에서 스크립트 반복그래서 나는이 루프로 다시 잃어 버렸고 테이블의 각 테이블 값 대신 MD1 열 내부에서만 6 값을 얻고 각 MD 내부에 배치했습니다. 죄송합니다. jmp의 For 루프와 정말 헷갈립니다.
theTables = dtparms << Subset(
By( :Dispo_name ),
All rows,
Selected columns only( 0 ),
columns( :Parameter, :CL_LL, :CL_UL, :MD_LL, :MD_UL )
);
//create columns
For( n = 1, n <= N Items( theTables ), n++,
deftb << New Column( "MD" || Char( n ), numeric )
);
//loop through each table and store value in MDs
For( k = 1, k <= N Items( theTables ), k++,
parameters = Column( theTables[k], "Parameter" ) << get values;
deftb_colnames = deftb << get column names( string );
parameters = Associative Array( Eval( parameters ) );
deftb_colnames = Associative Array( Eval( deftb_colnames ) );
parameters << Intersect( deftb_colnames );
params = parameters << get keys;
Show( params );
For( i = 1, i <= N Items( params ), i++,
foundRows = deftb << get rows where(
As Column( deftb, Column( theTables[k], "Parameter" )[i] ) < Column( theTables[k], "CL_LL" )[i] &
Is Missing( deftb:MD ) == 1
);
deftb:MD[foundRows] = Column( theTables[k], "MD_LL" )[i];
foundRows = deftb << get rows where(
As Column( deftb, Column( theTables[k], "Parameter" )[i] ) < Column( theTables[k], "CL_UL" )[i] &
Is Missing( deftb:MD ) == 1
);
deftb:MD[foundRows] = Column( theTables[k], "MD_UL" )[i];
);
);Re : 다른 테이블에서 스크립트 반복1. 실제 데이터에 대해 코드를 테스트 할 수 있도록 샘플 데이터 테이블을 첨부하십시오.
2. 최종 데이터 테이블이 어떻게 보일 것으로 예상하는지에 대한 모형을 제공하십시오.