列見出しから文字列を抽出し、別の列見出しに追加するこんにちは、
私は、Excel から JMP に結果をインポートするために使用するインポート スクリプトを持っています。テンプレート Excel は多くの人が使用しており、編集がロックされています。Excel には、どちらも「結果 - XXX」という結果列が 2 つあります。ここで、XXX は Excel マクロを使用して調査対象に置き換えられるため、各ファイルで変更されます。また、結果列と同じで数値形式の JMP 結果 1 および JMP 結果 2 という列もあります。JMP インポートでは Excel から科学的数値をインポートできないため、これらを使用します。JMP で Excel を開くと、次の画像のようなものが表示されます。

列見出しから「Results -」に続く単語を抽出し、JMP 結果列見出しを置き換えるスクリプトを記述しようとしていますが、正しい見出しを置き換えるように注意しています。結果は次のようになります。

JMP でこれが可能かどうかはわかりませんが、助けていただければ幸いです。後の手順は言うまでもなく、列見出しの文字列の末尾を抽出することから始める方法さえわかりません。よろしくお願いします。
自動化とスクリプトRe: 列見出しから文字列を抽出して別の列見出しに追加するこれは純粋なJSLオプションです。いくつかの仮定を立てなければならなかったため、データによっては簡単に壊れる可能性があります(そして壊れるでしょう)。
Names Default To Here(1);
dt = New Table("Untitled",
Add Rows(1),
Compress File When Saved(1),
New Column("Results - DNA", Numeric, "Continuous", Format("Best", 12), Set Values([.]), ),
New Column("Results - Protein", Numeric, "Continuous", Format("Best", 12), Set Values([.])),
New Column("JMP Result 1", Numeric, "Continuous", Format("Best", 12), Set Values([.])),
New Column("JMP Result 2", Numeric, "Continuous", Format("Best", 12), Set Values([.]))
);
// Assume that you extract last word from result columns
// and results are first then jmp columns and there is equal amount
result_columns = {};
jmp_columns = {};
colnames = dt << Get Column Names("String");
For Each({colname}, colnames,
If(Starts With(colname, "Results - "),
Insert into(result_columns, Word(-1, colname, " "));
,
Insert Into(jmp_columns, colname)
)
);
For Each({{rescol, jmpcol}}, Across(result_columns, jmp_columns),
Column(dt, jmpcol) << Set Name(rescol);
);
Write();Re: 列見出しから文字列を抽出して別の列見出しに追加するこんにちは、
テストデータテーブルを添付しました。次のスクリプトを試してください:
dt = current data table();
for each({name,i}, dt << get column names(string),
if (contains(name, "Results -"),
new_name_string = word(2, name, "- ");
column(dt,i) << set name(substitute(name, "Results -", "Results_Excel -" ));
for each({name2,p}, dt << get column names(string),
if (contains(name2, "JMP Result"),
column(dt,p) << set name(new_name_string);
Break();
,
);
);
,
);
);
これで目的の結果が得られたはずです。そうでない場合はお知らせください。
編集: Jarmos の素晴らしいソリューションを見ました。「Excel」列の名前を変更したくない場合は、このソリューションを選択できます。
乾杯、
ジョナス
Re: 列見出しから文字列を抽出して別の列見出しに追加するスクリプトを使用しないオプションも思いつきました。
積み重ねテーブルを作成する

ラベルから最後の単語列を作成する

これでマッピングテーブルができました

元のテーブルに戻り、列名を再コード化します

テーブルにマッピングを適用を使用します...


そして「再コード化」をクリックします


残念ながら、JMP は、スクリプト内で直接マッピング値を使用するため、適切なスクリプトを自動的に作成することができません。そのため、何らかの方法で「完全なマッピング テーブル」を作成してスクリプトに入力することができない限り、これは手動のプロセスになる可能性があります。
// Recode column names
Local({dt = Data Table("Untitled 2"), names},
names = Recode(
dt << Get Column Names(String),
{Map Value(
_rcOrig,
{"JMP Result 1", "DNA", "JMP Result 2", "Protein"},
Unmatched(_rcNow)
)}
);
For Each({name, i}, names, Column(dt, i) << Set Name(name));
);