創建列的運行總計<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)^))”
)
)
) ;
) ;