各位,
我在尝试创建一个作为公式的新列并在 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