各位,
我在嘗試創建一個作為公式的新列並在 JSL 腳本中向其發送變量時遇到一些麻煩。
我有一個日期表,我試圖計算列的平均滯後。 感興趣的列不一定總是按行均勻間隔,滯後有時會發生變化。 但是,出於我的腳本的目的,只需查看整個列的平均延遲就可以了。
我打算執行此操作的方法(可以手動執行,但更願意使用腳本自動執行)是創建 :X 的 Lag 列,然後取 :X-:Lag(X) 的差值,然後取上校的意思是。 公式(數學)應該是這樣的:
ave_lag = Col Mean(:X-:Lag(X))
我遇到的問題是創建帶有滯後公式的新列。 每次我嘗試評估腳本時,它都會將我在公式中寫入的文字放在公式中,而不是預期的列名稱中。 我嘗試過dt<
我也嘗試過 Eval(Substitute(Expr())),但它實際上放入了帶引號的字符串,而不是作為引用的列,例如 :X。
例如,在我正在使用的表中,我嘗試了以下代碼:
Eval(
Substitute(
Expr(
dt << New Column( "temp", Formula( Lag( __tcols__ ) ) )
),
Expr( __tcols__ ), xcols[1]
)
);它產生一個“temp”列,但公式如下:

列的名稱是 t,變量 xcols={"t"}。 該公式應類似於 Lag(:t),是對列的引用,而不是列名稱。
我什至嘗試過其他代碼來提取 :t 的列號(它可以在數據表中更改),然後將 Column(#) 插入公式中,但這也不起作用。
collist = dt << Get Column Names( string ); //creates a list of the column names
colnum = Loc( collist, xcols[1] )[1]; //locates the position in the list of the script variable xcols[1].
//This previous part basically gets the column number of the local variable xcol in the data table (it can change).
//This is the script where I'd like it to substitute
Eval(
Substitute(
Expr(
dt << New Column( "temp", Formula( Lag( Column( __tcols__ ) ) ) )
),
Expr( __tcols__ ), colnum
)
);它還會生成一個“temp”列,但公式如下:

我認為這應該比我發現的更容易,但我一定做錯了/奇怪的事情,因為我沒有得到我期望的結果。
非常感謝有關如何計算列的平均滯後的任何建議。 我只需要一個數字,最終,我不需要額外的列。
謝謝!,
DS
嘗試:
Eval( Eval Expr(
dt << New Column( "TEMP", "Numeric", <<SET each="" value=""></SET>
您需要告訴 JSL 該字符串實際上是一個名稱(以便將其視為變量),因此作為名稱()功能
你好@ErraticAttack ,
感謝您的輸入,儘管它確實將列的名稱正確插入到列公式中,但我其他現有代碼中的特定代碼段最終導致了對一些需要更新的顯示框的引用問題根據用戶輸入。 不幸的是,由於這個原因,走這條路導致了太多問題,所以我最終更改了代碼並僅使用感興趣列中的值:首先創建一個矩陣,然後簡單地計算行 (n+1) - row(n) 列的差並對矩陣求平均值。
n = Matrix( N Rows( dt ), 1 );
For( i = 1, i <= N Items( n ) - 1, i++,
n[i] = (dt:xcols[i + 1] - dt:xcols[i]) / timefactor
);
deltat = Round( Mean( n ), 3 );
其中“timefactor”是一個變量,取決於該列是否以天、分鐘、小時等為單位。
所以,感謝您解決瞭如何將變量發送到新列函數的原始問題,但不幸的是,我不得不走另一條路才能解決整個代碼的功能。
謝謝!,
DS