Expr 및 이름 Expr안녕하세요,
저는 350,000행이라는 더 많은 양의 데이터를 분석하고 있습니다.
각 행에 대해 코드는 루프를 실행하여 테이블 1과 테이블 2 사이의 고유한 델타를 계산한 다음 해당 델타를 기본 데이터 테이블의 열에 추가합니다. 아래 코드에는 뭔가 잘못된 것이 있습니다. 어떠한 제안?
Names Default To Here( 1 );
dt1 = Data Table( "dt_ref" );
dt2 = Data Table( "Data table" );
digt = 5;
itsel1 = {"Currents A", "Currents A2", "Currents A3", "Currents A4", "Currents A5"}; //List of columns to align.<BR />
//// Loop to calculate the delta between the dt1 and dt2 and the add the delta to the column of dt2 from the itsel1 list
dt2 << Add Row( 1, At Start );
dt2 << Begin Data Update;
For Each( {element, idx}, itsel1,
Eval(
Eval Expr(
Column( dt2, element ) << Set Each Value(
Expr(
Name Expr( Column( dt2, element ) )
),
Expr(
Num(
Substr( Char( Column( dt1, "Median" )[dt1 << get rows where( :Tests == element )] - Column( dt2, element ) ), 1, digt + 1 )
) + Column( dt2, element )
)
)
)
)
);
dt2 << Delete Row( 1 );
dt2 << End Data Update;
감사해요,
재키
자동화 및 스크립팅답장: Expr 및 Name Expr여기서 어떤 유형의 계산을 수행하고 있는지 잘 모르겠습니다.
Num(Substr(Char(Column(dt1, "Median")[dt1 << get rows where(:Tests == element)] - Column(dt2, element)), 1, digt + 1)) + Column(dt2, element)
하지만 이와 같은 것이 당신에게 도움이 될 수 있습니다
Names Default To Here(1);
dt1 = Open("$DOWNLOADS/dt_ref.jmp");
dt2 = Open("$DOWNLOADS/Data table.jmp");
digt = 5;
itsel1 = {"Currents A", "Currents A2", "Currents A3", "Currents A4", "Currents A5"}; //List of columns to align.
dt2_colnames = dt2 << Get Column Names("String");
//// Loop to calculate the delta between the dt1 and dt2 and the add the delta to the column of dt2 from the itsel1 list
For Each({colname}, itsel1,
dt2_col_idx = Contains(dt2_colnames, colname);
If(dt2_col_idx == 0,
Print("Skipped column: " || colname);
continue(); // skip this column
);
dt1_row_idx = Loc(dt1[0, "Tests"], colname);
If(N Items(dt1_row_idx) == 0,
Print("Skipped row: " || colname);
continue();
,
dt1_row_idx = dt1_row_idx[1];
);
dt2[0, dt2_col_idx] = dt2[0, dt2_col_idx] - dt1[dt1_row_idx, "Median"];
);답장: Expr 및 Name Expr그래서 dt2의 데이터를 dt1의 Test 중앙값과 정렬하려고 합니다.
따라서 Current A1의 중앙값은 5.408이므로 dt2에 있는 Current A1의 각 행을 빼고 이를 다시 dt2에 있는 Current A1의 행 값에 더합니다.
5.408 - 2.4963333333 = 2.912
2.912 + 2.496333333 = 5.40. 나는 1M 행을 가진 거대한 데이터 세트를 가지고 있고 Expr이 더 빠를 것이기 때문에 전통적인 for 루프를 피합니다.

답장: Expr 및 Name Expr값을 반올림하지 않으면 중간 값으로 끝나지 않겠습니까?
x = 중앙값,
y = 행 값,
z = 결과
x - y = z
z + y = x?
답장: Expr 및 Name Expr@jthi 맞습니다. 하지만 "z"를 소수점 이하 2자리로 반올림한 다음 다시 y에 추가하고 싶습니다. 이렇게 하는 이유는 "테스터 데이터를 마스터 데이터로 상쇄"하기 위해서입니다.