설명서 :
1. 나는 2 개의 데이터 테이블을 가지고 있는데, 하나는 제어 한계가있는 매개 변수 목록이고 다른 하나는 기본 데이터 테이블입니다.


2. 템플릿의 순서에 따라 각 열을 수동으로 [오름차순] 정렬해야합니다. Contact가 2보다 작은 경우 [DC is 6] 또는 Contact가 10보다 큰 경우 [DC is 7] DC 열에 입력-DC에 값을 입력 한 후 DC 값이있는 행을 숨기거나 제외하고 다음 매개 변수를 다시 정렬
여러 개의 매개 변수와 큰 데이터 세트가있는 경우 루프를 어떻게 처리합니까?
먼저, 귀하가 제공 한 샘플 데이터 테이블이 주어 졌을 때
" 10보다 큰 접점 [DC는 7] ". Parameter 데이터 테이블의 값이 주어지면 다음과 같이 작성해야한다고 생각합니다.
"23보다 큰 문의 [DC is 7]"
이것을 가정하면 아래 스크립트가 원하는대로 작동한다고 생각합니다. 데이터 테이블에서 행 단위로 진행할 필요가 없으므로 정렬 할 필요가 없습니다. 나는 그것이 당신이 필요로하는 희망
Names Default To Here( 1 );
// Create Sample data tables
dtParms = New Table("Parameters",
Add Rows(4),
New Column("Order",formula(Row())),
New Column("Parameter", character,values({"Contact","MST","Height","Weight"})),
New Column("CL_LL", values([2,23,59,35])),
New Column("CL_UL", values([23,100,109,105])),
New Column("DC_LL", values([6,10,21,33])),
New Column("DC_UL", values([7,11,22,39]))
);
dtMain = New Table("Main",
Add Rows(100),
New Column("Contact", formula(randominteger(1,27))),
New Column("MST", formula(randominteger(18,115))),
New Column("Height", formula(randominteger(50,120))),
New Column("Weight", formula(randominteger(30,110))),
New Column("DC")
);
dtMain << run formulas;
dtMain:Contact << delete formula;
dtMain:MST << delete formula;
dtMain:Height << delete formula;
dtMain:Weight << delete formula;
// Loop through the data and assign the above and below limits
For(i=1,i<=N Rows(dtParms),i++,
foundRows = dtMain << get rows where( as column(dtMain, dtParms:Parameter[i]) < dtParms:CL_LL[i] & isMissing(dtMain:DC) == 1 );
dtMain:DC[foundRows] = dtParms:DC_LL[i];
foundRows = dtMain << get rows where( as column(dtMain, dtParms:Parameter[i]) > dtParms:CL_UL[i] & isMissing(dtMain:DC) == 1);
dtMain:DC[foundRows] = dtParms:DC_UL[i];
);후속 질문 :
dtParms를 코딩하는 대신 동일한 이름으로 데이터 테이블에 저장했지만 스크립팅을 사용하여 결과를 생성하지는 않습니다. 그러나 " 범위가 지정된 데이터 테이블 액세스에는 데이터 테이블 열 또는 변수가 필요합니다 {1} "-이 문제를 어떻게 해결합니까?
코드의 경우 :
For(i=1,i<=N Rows(dtParms),i++,
foundRows = dtMain << get rows where( as column(dtMain, dtParms:Parameter[i]) < dtParms:CL_LL[i] & isMissing(dtMain:DC) == 1 );
dtMain:DC[foundRows] = dtParms:DC_LL[i];
foundRows = dtMain << get rows where( as column(dtMain, dtParms:Parameter[i]) > dtParms:CL_UL[i] & isMissing(dtMain:DC) == 1);
dtMain:DC[foundRows] = dtParms:DC_UL[i];
);
제대로 작동하려면 변수 "dtParms"를 매개 변수가 포함 된 데이터 테이블과 연결해야합니다. 데이터 테이블을 동일한 이름으로 저장했다고 말 했으므로 데이터 테이블의 이름을 "매개 변수"라고 가정합니다. 따라서 스크립트를 실행하기 전에 해당 데이터 테이블을 열고 다음 명령문을 스크립트에 추가해야합니다.
dtParms = Data Table("Parameters");