JSL スクリプトで複数の列を作成する<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />やあ
JMP スクリプトについてアドバイスをお願いします。
現在のテーブルからいくつかの列名を自動的に取得し、数式を使用して列ごとに新しい列を作成する必要があります。
たとえば、これは私のテーブルです
ユニットID データ1 データ2 データ3
A 1.1 1.2 1.1
B 1.2 1.2 1.0
C 1.3 1.2 1.4
D 1.1 1.2 1.1
1 - Data1 から Data3 までの列を選択する必要があります
2 - Data1_Floor、Data2_Floor、Data3_Floor のように 3 つの新しい列を作成する必要があります。
3 - 新しい列はそれぞれ、元の列のデータを使用して「Floor」関数として計算されます: Data1_Floor = Floor (Data1), ...
JSL スクリプトの例といくつかのコメントをいただければ幸いです
ありがとう
アレックス
Re: JSL スクリプトで複数の列を作成するこれで済むはずです:
dt = current data table();
startcol = 2;
endcol = 4;
for (i = startcol, i <= endcol, i++,
data_col = column(i) << get name;
floor_col = data_col || "_Floor";
str = evalinsert(
"\[dt << new column( "^floor_col^", Numeric, Continuous, Format( "Best", 12 ),
formula(floor(:^data_col^)));]\");
eval(parse(str));
);
Re: JSL スクリプトで複数の列を作成するまた、列の名前に共通の文字列が含まれていない場合はどうなるでしょうか?「ifcontains」の代わりに、列 B から列 D まで、または番号順に列 #2 から #4 まで取得するようにスクリプトに指示する必要があるようにするにはどうすればよいでしょうか?
Re: JSL スクリプトで複数の列を作成する素晴らしい、うまくいきました、ありがとう
Re: JSL スクリプトで複数の列を作成するもうすぐですよ。変数を割り当てる必要がありますdtデータテーブルを指すようにします。次のいずれかを使用してそれを行うことができます。
// Replace <YOUR table="" name=""> with the actual name of your table
dt = data table("<YOUR table="" name="">");
or with:
dt = current data table();</YOUR></YOUR>
Re: JSL スクリプトで複数の列を作成するPMroz さん、こんにちは。
素早い返信ありがとうございます。感謝しています。残念ながら、私は JSL を初めて使用するため、それを再現できませんでした。「」行からスクリプトを実行しようとしました。列リスト= ...」と表示されましたが、期待したような出力は得られませんでした。私は何か間違ったことをしているに違いありません。
ここに私が手に入れたいものがあります。
これは私の元のデータテーブルです。
| ユニット | データ1 | データ2 | データ3 |
| あ | 12.35336 | 8.876483 | 3.207919 |
| B | 9.838289 | 1.483974 | 2.5232 |
| C | 3.136643 | 6.092754 | 0.980194 |
| D | 0.3593 | 4.639877 | 6.672549 |
「Data」文字列を持つすべての列を取得し、それぞれに対して新しい列を生成するスクリプトを実行したいと思います。そのため、最終的なテーブルは次のようになります。
| ユニット | データ1 | データ2 | データ3 | データフロア 1 | データフロア 2 | データフロア 3 |
| あ | 12.35336452 | 8.876483446 | 3.207918972 | 12 | 8 | 3 |
| B | 9.838288756 | 1.483974287 | 2.523200042 | 9 | 1 | 2 |
| C | 3.136642653 | 6.092754288 | 0.980193636 | 3 | 6 | 0 |
| D | 0.359299803 | 4.639877062 | 6.672548555 | 0 | 4 | 6 |
このアクションを実行するスクリプトを作成してみていただけますか?
Re: JSL スクリプトで複数の列を作成する
// Create data table
dt = New Table( "Floor Example",
Add Rows( 4 ),
New Column( "Unit ID", Character, Nominal, Set Values( {"A", "B", "C", "D"} ) ),
New Column( "Data1", Numeric, Continuous, Format( "Best", 12 ),
Set Values( [1.1, 1.2, 1.3, 1.1] ) ),
New Column( "Data2", Numeric, Continuous, Format( "Best", 12 ),
Set Values( [1.2, 1.2, 1.2, 1.2] ) ),
New Column( "Data3", Numeric, Continuous, Format( "Best", 12 ),
Set Values( [1.1, 1, 1.4, 1.1] ) ),
);
// Get the list of column names
col_list = dt << get column names(string);
// Loop over column names, searching for data columns
for (i = 1, i <= nitems(col_list), i++,
// If it's a Data column then add the floor formula
if (contains(col_list[i], "Data"),
data_col = ":" || col_list[i];
floor_col = col_list[i] || "_Floor";
// Build new column string dynamically and then execute it.
str = evalinsert(
"\[dt << New Column( "^floor_col^", Numeric, Continuous, Format( "Best", 12 ),
Formula( Floor( ^data_col^))
);]\");
eval(parse(str));
);
);