こんにちは、
元のデータセット (table1) があり、それをテーブル 2 の結果にスクリプト化しようとしています。
300 未満の数値の場合は、「type1」文字列を「result1」列に出力します。
数値が 300 を超える場合は、「type2」文字列を「result2」列に出力します。
| 番号 |
タイプ1 |
タイプ2 |
結果1 |
結果2 |
| 100 |
a1 |
a2 |
|
|
| 200 |
b1 |
b2 |
|
|
| 150 |
c1 |
c2 |
|
|
| 275 |
d1 |
d2 |
|
|
| 555 |
e1 |
e2 |
|
|
| 424 |
f1 |
f2 |
|
|
| 572 |
g1 |
g2 |
|
|
| 783 |
h1 |
h2 |
|
|
| 125 |
i1 |
i2 |
|
|
表1: 元のデータ
| 番号 |
タイプ1 |
タイプ2 |
結果1 |
結果2 |
| 100 |
a1 |
a2 |
a1 |
|
| 200 |
b1 |
b2 |
b1 |
|
| 150 |
c1 |
c2 |
c1 |
|
| 275 |
d1 |
d2 |
d1 |
|
| 555 |
e1 |
e2 |
|
e2 |
| 424 |
f1 |
f2 |
|
f2 |
| 572 |
g1 |
g2 |
|
g2 |
| 783 |
h1 |
h2 |
|
h2 |
| 125 |
i1 |
i2 |
i1 |
|
表2: 結果
これまでのところ、スクリプトで行ったことを以下に示します。
dt = Current Data Table();
dt << New Column("result1",
Character,
"Nominal",
For Each Row(If(:Number << 300), :result1 == :type1, "")
);
dt << New Column("result2",
Character,
"Nominal",
For Each Row(If(:Number >> 300), :result2 == :type2, "")
);
私個人としては、各列に個別の数式を適用して新しい列を作成する Excel のようなアプローチを使用してこのような問題に取り組むのは混乱を招き、非効率的であると感じています。「オープン」JSL コード内のデータ テーブルの値を直接変更する JMP の機能を使用すると、よりクリーンで効率的な方法で問題を解決できます。
// Create the new columns
dt << New Column( "result1", Character );
dt << New Column( "result2", Character );
// Populate the columns
For Each Row( If( :Number < 300, :result1 = :type1, :result2 = :type1 ) );
こんにちは、jthi さん。ヘルプ情報を試してみます。 スクリプトは機能します。 助けてくれてありがとう。
比較として >>/<< を使用することと、列作成内で For Each Row を使用することには、いくつか問題があります。 以下は、<< Set Each Value を使用した構文の動作オプションの 1 つです (値がちょうど 300 の場合は空になるので注意してください)。
Names Default To Here(1);
dt = New Table("Untitled",
Add Rows(9),
Compress File When Saved(1),
New Column("Number", Numeric, "Nominal", Format("Best", 9), Set Values([100, 200, 150, 275, 555, 424, 572, 783, 125])),
New Column("type1", Character(16), "Nominal", Set Values({"a1", "b1", "c1", "d1", "e1", "f1", "g1", "h1", "i1"})),
New Column("type2", Character(16), "Nominal", Set Values({"a2", "b2", "c2", "d2", "e2", "f2", "g2", "h2", "i2"}))
);
dt << New Column("result1", Character, "Nominal", << Set Each Value(
If(:Number < 300,
:type1
, //else
""
)
));
dt << New Column("result2", Character, Nominal, << Set Each Value(
If(:Number > 300,
:type2
, //else
""
)
));
JMP の [ヘルプ] メニューからスクリプト インデックスを直接チェックアウトすることを強くお勧めします。 JMP ヘルプ ページのスクリプト ガイド。他にも次のようなスクリプト ソースもあります。
JMP スクリプト言語の概要構文を理解するために