表達式和名稱表達式你好,
我正在分析大量數據,35 萬行。
對於每一行,程式碼執行一個迴圈來計算表 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 和名稱 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 和名稱 Expr所以我試著將 dt2 中的資料與 dt1 中 Test 的中位數對齊
因此,目前 A1 的中位數是 5.408,因此減去 dt2 中目前 A1 的每一行,並將其加回 dt2 中目前 A1 的行值
5.408 - 2.4963333333 = 2.912
2.912 + 2.496333333 = 5.40。 我避免使用傳統的 for 循環,因為我有一個包含 1M 行的巨大資料集,Expr 會更快

回覆:Expr 和名稱 Expr如果你不對你的值進行四捨五入的話,你最終不會得到中位數嗎?
x = 中位數,
y = 行值,
z = 結果
x - y = z
z + y = x?
回覆:Expr 和名稱 Expr@jthi這是正確的,但我想將“z”四捨五入到小數點後兩位,然後將其加回 y。 這樣做的原因是“用主數據抵消測試儀數據”