创建列的运行总计<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />我想知道如何在 JMP 表中创建一个列,该列是另一列的运行总计(我可能需要通过列名将其作为字符串引用)。 也就是说,如果我有一列包含以下数据:
1个
2个
3个
4个
5个
我想创建一个包含公式的列,其内容可以计算为
1个
3个
6个
10
15
目前我有这个循环,从列名列表中获取运行总计:
对于 (i = 2, i <= numCols, i++,
列名 = 列名;
col = New Column("累计" || colName,
公式(求和(j = 1,行(),作为列(ColName)))
);
);
这似乎可行,但速度很慢,如果我创建多个列,它们最终都会以某种方式得到相同的数据。 做这个的最好方式是什么?
回复:创建列的运行总计顺便说一句,如果 colNames 列表包含名称而不是字符串,这种方法似乎给出与解析字符串相同的结果:
列名= dt <<获取列名( ) ; // 没有“字符串”选项!
列数= N 项(列名) ;
为了(我= 1个,我<=列数,我++,
列名=列名[我] ;
新名字= “累积” || (列名<<取名) ;
山口=新建专栏(新名字,数字,连续的,
公式(评价(代替(
表达式(求和( j = 1个,排() , xxx [ j ])) ,
表达式( xxx ) ,列名[我]
)))
) ;
) ;
回复:创建列的运行总计是的,只要列从不重命名,这就应该有效。
此代码说明了两种方法之间的区别。 丑陋的字符串方法将公式硬编码到特定列。 第二种方法查找具有特定名称的列(可能有用)
// 示例表
dt =新表( “测试” ,
添加行( 4个) ,
新建专栏( “第一列” ,数字,设置值( [ 1个, 2个, 3个, 4个] ) )
) ;
// 通过解析后的字符串添加公式
列名= dt <<获取列名(细绳) ;
列数= N 项(列名) ;
为了(我= 1个,我<=列数,我++,
列名=列名[我] ;
山口=新建专栏( “累积” ||列名,数字) ;
评价(
解析(
评估插入(
"col<< 设置公式(求和(j = 1, row(), ^(ColName)^))”
)
)
) ;
) ;
// 通过代入表达式添加公式
为了(我= 1个,我<=列数,我++,
列名=列名[我] ;
新名字= “累积” ||列名;
山口=新建专栏(新名字,
数字,
连续的,
公式(
评价(
代替(
表达式(
求和( j = 1个,排() ,作为专栏( xxx )[ j ] )
) ,
表达式( xxx ) ,列名
)
)
)
) ;
) ;
等待( 1个) ;
// 更改列名和值并查看公式的工作原理
柱子( 1个) <<设置名称( “新名字” ) ;
柱子( 1个)[ 1个] = 100 ;
等待( 2个) ;
// 添加与原始列同名的新列。
dt <<新建专栏( “第一列” ,数字,价值观( [ 1个, 1个, 1个, 1个] ) ) ;
dt <<重新运行公式;
回复:创建列的运行总计我觉得如果有一种方法可以让 JSL 通过解析字符串来做你想做的事情,那么应该不用 Parse 函数就可以用普通的 JSL 代码(毕竟它只是一个字符串)来做这件事. 这就是我使用 Substitute 工作的结果:
对于 (i = 2, i <= numCols, i++,
列名 = 列名;
newName = "累计" ||列名;
col = New Column(newName, Numeric, Continuous,
公式(求值(代入(
Expr(求和(j = 1, Row(), As Column(xxx))),
Expr(xxx), 列名
)))
);
);
回复:创建列的运行总计Formula() 不评估其参数,因此所有列公式都将包含变量 ColName 和 J,并随着循环的进行而更新。
这是解决此问题的一种方法:
为了(我= 2个,我<=列数,我++,
列名=列名[我] ;
山口=新建专栏( “累积” ||列名,数字) ;
评价(
解析(
评估插入(
"col<< 设置公式(求和(j = 1, row(), ^(ColName)^))”
)
)
) ;
) ;