JSL コードと要約ヘルプJMPコミュニティの皆さん、こんにちは。
JMP プロ v17。
先月は動作していたスクリプトがありますが、もう動作していないようです。 1 つの列が :Date という名前のデータ テーブルがあります (添付のデータ テーブルを参照)。 次のスクリプトは、:Date の Year( ) でデータ テーブルを要約し、変数 "yrs" の年のリストを生成することになっています。
Summarize( dt, yrs = By( Year( :Date ) ) );
たとえば、Year( ) コマンドは :Date 列から年の値だけを抽出するはずなので、{"2022"、"2023"、"2024"} などの日付のリストが返されるはずですが、実際にはそうではありません。
:Date の周りの Year( ) コマンドを削除して、次のように実行します。
Summarize( dt, yrs = By( :Date ) );
結果はすべての個別の日付のリストです。以下に抜粋を示します。
{"0263/09/29"、"1930/01/30"、"1955/11/2"、"2002/05/03"、"2002/08/13"、"2002/10/19"、
"01/01/2021"、"01/02/2021"、"01/06/2021"、"01/18/2021"、"01/30/2021"、"02/12/2021"、
"2021/02/13"、"2021/02/15"、"2021/03/26"、"2021/03/27"、"2021/03/28"、"2021/03/30"、
"2021/04/23"、"2021/04/24"、"2021/04/25"、}
日付が間違って入力されている箇所もありますが、現時点では無視できます。
実際にはすべての日付が必要なわけではなく、すべての年のリストが欲しいだけです。残念ながら、yr = Year( :Date) を実行しようとすると、yr が null/空の変数になります。これは、元の JSL でその前後の By( ) コマンドで評価できないことになります。必要なのかどうかわかりません。
奇妙だと思うのは、約 1 か月前にこのコードを構築していたときは問題なく動作していたのに、今は以前のようには機能していないことです。
この問題の原因となっている単純な何かを見逃しているに違いないのですが、それが何なのかわかりません。または、Summarize( ) と、その中で By( ) グループがどのように使用されているかについて考えています。
ご意見やフィードバックをお待ちしております。
DS
自動化とスクリプト大量カスタマイズウィンドウズRe: JSL コードと要約のヘルプこんにちは、
Year 関数を次のように評価する必要があります。
Eval(Eval Expr(summarize (dt, yr = By(Year(:Date)))));
最高、
TS
Re: JSL コードと要約のヘルプSummarizeではそれができないと思いますが、テーブルに新しい列を作成したくない場合は、列を変換してSummaryを使用できます。
Names Default To Here(1);
dt = Open("$DOWNLOADS/Date.jmp");
dt_summary = dt << Summary(
Group(Transform Column("Year", Formula(Year(:Date)))),
Freq("None"),
Weight("None"),
Link to original data table(0),
output table name("Summary of Date grouped by Year"),
Private
);
years = dt_summary[0, 1];
Close(dt_summary, no save);
Show(years);
Re: JSL コードと要約のヘルプこんにちは、 @Thierry_Sと@jthi 、
迅速なフィードバックとアイデアをありがとうございました。ただ、奇妙なことが起こったので、解決済みとしてマークするのが早すぎたかもしれません。
私は、summary コマンドでラップされた@Thierry_Sの Eval( Eval Expr( )) を実行してみましたが、テスト データ テーブル (日付のみのテーブル) でテストしているときは機能していましたが、元のデータ テーブルに移動するとすぐに機能しなくなり、次のエラーが表示されます: 'Year' のアクセスまたは評価で列が見つかりません、Year/*###*/(:Date)。
ここで、戻って日付の「偽の」データ テーブルでこれを実行しようとすると、再びエラーが発生します。
@jthi 、あなたのオプションは可能ですが、それを行列 (または 1 次元ベクトルから数値のリスト) に変換する必要があります。それを簡単に行う方法はありますか? 連想配列で年のリストを使用しているため、それを実行する必要があります。
ありがとう!、
DS
Re: JSL コードと要約のヘルプ連想配列のキーは整数ですか、それとも文字列ですか? 整数の場合は、As List() を使用できます。
Names Default To Here(1);
dt = Open("$DOWNLOADS/Date.jmp");
dt_summary = dt << Summary(
Group(Transform Column("Year", Formula(Year(:Date)))),
Freq("None"),
Weight("None"),
Link to original data table(0),
output table name("Summary of Date grouped by Year"),
Private
);
years = dt_summary[0, 1];
Close(dt_summary, no save);
show(As List(years)); // As List(years) = {263, 1930, 1955, 2002, 2021, 2022, 2023, 2024, 2025};
文字列の場合は、列を文字に変更して値を取得します
Names Default To Here(1);
dt = Open("$DOWNLOADS/Date.jmp");
dt_summary = dt << Summary(
Group(Transform Column("Year", Formula(Year(:Date)))),
Freq("None"),
Weight("None"),
Link to original data table(0),
output table name("Summary of Date grouped by Year"),
Private
);
Column(dt_summary, 1) << Set Data Type("Character");
years = dt_summary[0, 1];
Close(dt_summary, no save);
show(years); // years = {"263", "1930", "1955", "2002", "2021", "2022", "2023", "2024", "2025"};
Re: JSL コードと要約のヘルプ先月動作していたスクリプトがあります
既存の列が原因でしょうか?

Re: JSL コードと要約のヘルプ要約は変換列で機能します:
dt = Open( "$SAMPLE_DATA/Hurricanes.jmp" );
dt << Transform Column( "tmp", Formula( year(:date) ) );
Summarize(years = by (tmp));
//dt << Delete Columns( :tmp );
Show(years)
変換列の削除を忘れても心配しないでください。次に「開く」と、列は消えます。
Re: JSL コードと要約のヘルプこんにちは@jthi さん
フィードバックと提案をありがとうございます。年を文字列として入力する必要があるのは、後で文字列のみを受け入れるコンボ ボックスで使用することになるからです。
ご協力とトラブルシューティングに感謝します。
DS
Re: JSL コードと要約のヘルプこんにちは@hogi さん
すべてのデータ テーブルには同じ列名 :Date があり、すべて数値の連続列であるため、以前は機能していたのに今は機能しない理由がわかりません。また、奇妙なことに、Hurricanes.jmp データ テーブルでは機能しますが、私のデータ テーブルでは機能しません。なぜこのようなことが起こるのか本当に理解できませんが、実際に起こります。
いずれにせよ、Jarmo が提案した方法はうまく機能し、Summarize(By( )) コマンドのように面倒なことにはなりません。
ありがとう!、
DS
Re: JSL コードと要約のヘルプHurricanes.jmp の場合、列:yearにより機能します。
JMP はyear(:date)を:yearに再ルーティングしますか?
Re: JSL コードと要約のヘルプこんにちは@hogi 、そうかもしれません。私には見当もつかないし、JSL がなぜそのようなことをするのか理解できません。その理論をテストしたところ、確かに、列 :Year がなくなったため、Summarize コマンドは機能しませんでした。とても奇妙です! また、:Date 列は Hurricanes.jmp ファイル内の数式ですが、それは問題ではありません。数式が削除されれば問題なく機能しますが、列 :Year が削除されると、機能しなくなります。その背後にある JSL ロジックは理解できませんが、それが現実です。