列の累計の作成<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />JMP テーブルに、別の列 (列名を文字列として参照する必要がある場合があります) の累計である列を作成する方法を疑問に思っています。 つまり、次のデータを含む列があるとします。
1
2
3
4
5
内容が次のようになる数式を含む列を作成したいと考えています。
1
3
6
10
15
現在、このループがあり、列の名前のリストから作業して、次の合計を取得します。
For(i = 2, i <= numCols, i++,
列名 = 列名;
Col = 新しい列("累積 " || 列名,
Formula(Summation(j = 1, Row(), As Column(ColName))))
);
);
これは機能しているように見えますが、非常に遅く、複数の列を作成すると、どういうわけかすべて同じデータになってしまいます。 これを行うための最良の方法は何ですか?
Re: 列の累計の作成ところで、colNames のリストに文字列ではなく名前が含まれている場合、このアプローチは解析された文字列と同じ結果を与えるようです。
列名= dt <<列名を取得する( ) ; // 「文字列」オプションなし!
列数= N 個のアイテム(列名) ;
ために(私= 1 、私<=列数、私++、
列名=列名[私】 ;
新しい名前= "累積的な " || (列名<<名前を取得する) ;
コル=新しい列(新しい名前、数値、継続的、
方式(評価(代わりの(
エクスプレッション(合計( j = 1 、行() 、 xxx [ j ])) 、
エクスプレッション( xxx ) 、列名[私】
)))
) ;
) ;
Re: 列の累計の作成はい、列の名前が変更されない限り、これは機能します。
このコードは、2 つのアプローチの違いを示しています。 醜い文字列メソッドは、数式を特定の列にハードコードします。 2 番目のメソッドは、特定の名前を持つ列を検索します (これは便利です)。
// テーブルの例
dt =新しいテーブル( "テスト" 、
行の追加( 4 ) 、
新しい列( 「コル1」 、数値、設定値( [ 1 、 2 、 3 、 4 】 ) )
) ;
// 解析された文字列による数式を追加します
列名= dt <<列名を取得する(弦) ;
列数= N 個のアイテム(列名) ;
ために(私= 1 、私<=列数、私++、
列名=列名[私】 ;
コル=新しい列( "累積的な " ||列名、数値) ;
評価(
解析する(
評価インサート(
"col<< Set Formula(Summation(j = 1, row(), ^(ColName)^))」
)
)
) ;
) ;
// 式を代入して式を追加します
ために(私= 1 、私<=列数、私++、
列名=列名[私】 ;
新しい名前= "累積的な " ||列名;
コル=新しい列(新しい名前、
数値、
継続的、
方式(
評価(
代わりの(
エクスプレッション(
合計( j = 1 、行() 、列として( xxx )[ j 】 )
) 、
エクスプレッション( xxx ) 、列名
)
)
)
) ;
) ;
待って( 1 ) ;
// 列名と値を変更して、数式がどのように機能するかを確認します
桁( 1 ) <<セット名( "新しい名前" ) ;
桁( 1 )[ 1 】 = 100 ;
待って( 2 ) ;
// 元の列と同じ名前の新しい列を追加します。
dt <<新しい列( 「コル1」 、数値、価値観( [ 1 、 1 、 1 、 1 】 ) ) ;
dt <<式を再実行する;
Re: 列の累計の作成文字列を解析することで JSL にやりたいことをさせる方法があるのなら、Parse 関数を使わずにプレーンな JSL コード (結局のところ単なる文字列です) でそれを行う方法があるはずだと私は感じています。 。 これは、Substitute を使用して作業したものです。
For(i = 2, i <= numCols, i++,
列名 = 列名;
newName = "累積" ||列名;
Col = 新しい列(newName, 数値, Continuous,
式(Eval(置換(
Expr(Summation(j = 1, Row(), As Column(xxx))))、
Expr(xxx)、列名
)))
);
);
Re: 列の累計の作成Formula() は引数を評価しないため、すべての列の式には変数 ColName と J が含まれ、ループが進むにつれて更新されます。
これを回避する 1 つの方法は次のとおりです。
ために(私= 2 、私<=列数、私++、
列名=列名[私】 ;
コル=新しい列( "累積的な " ||列名、数値) ;
評価(
解析する(
評価インサート(
"col<< Set Formula(Summation(j = 1, row(), ^(ColName)^))」
)
)
) ;
) ;