使用 For 迴圈建立新列你好
我嘗試使用 for 循環建立新列
names default to here (1);
dt = current data table ();
summarize (PN=by (:Name("~DEVICE TYPE" )));
for (i=1, i <= N items(PN), i++,
new column("Cnt "||PN[i],
formula(If( :Name( "~DEVICE TYPE" ) == PN[i],
If( :SERIAL_NO || :TIME_DATE == Lag( :SERIAL_NO || :TIME_DATE, -1 ),0,1)
))));
我可以建立新列,但無法使公式起作用。 日誌檔案顯示以下錯誤訊息。
Column Cnt TRB100BC-08 Formula Interrupted
Subscript Range 1 times At rows: 2 Operation: PN[i], PN[/*###*/i]
Formula evaluation errors have been ignored
回覆:使用 For 循環建立新列謝謝回覆:使用 For 循環建立新列您遇到的主要問題是New Column() 函數中的Formula 元素在處理前不會進行計算,因此,它將放入您的規範PN[i] 的公式中,並且由於循環時變量“i”正在更改更改您正在建立的每一列的公式都會發生變化。所以你要做的就是將公式改為靜態值。也就是說,您不希望安裝的公式具有 PN[i],而是希望具有 PN[i] 的實際評估值。Substitution() 函數允許這種情況發生。我認為下面的腳本會做你想要的
Names Default To Here( 1 );
dt = Current Data Table();
Summarize( PN = by( :Name( "~DEVICE TYPE" ) ) );
PN={"X"}
For( i = 1, i <= N Items( PN ), i++,
Eval(
Substitute(
Expr(
New Column( __name__,
formula(
If( :Name( "~DEVICE TYPE" ) == __PN__,
If(
:SERIAL_NO || :TIME_DATE ==
Lag( :SERIAL_NO || :TIME_DATE, -1 ),
0,
1
)
)
)
)
),
Expr( __name__ ), "Cnt " || PN[i],
Expr( __PN__ ), PN[i]
)
)
);