2つのテーブルの日付間を検索すると、一方から外側に暗黙の値が追加されます。こんにちは!
あるテーブルから外側のテーブルに値を代入するには、助けが必要です:)。
私の引き金は日付です、
dtPの日付がdtCから1時間以内に等しいかそれより大きい場合は、dtC:chart_valueの値をdtCの新しい列(PC_TA)に割り当てる必要があります。
任意の助けをいただければ幸いです
テーブル列

私のコード - ゼロにのみ値を割り当てず、最後の行を処理しないでください:(
dtC = open ("....");
dtP = open ("....");
hr = 3600;
dtC << new column ( "PC_TA", numaric,continuous,format( "Best",8),);
for (i=1, i for (j=1, j if ( dtC:start_date[i] >= dtP:action_date[j] >= dtC:start_date[i] + hr,
dtC:PC_TA[i] = dtP:chart_value[j],
dtC:PC_TA[i] =0
);
);
);
再:2つのテーブルの日付間の検索で、一方から外側に暗黙の値を追加ありがとう、Uday。
したがって、hour()を使用したい場合は、day()とmonth()のどこかに追加する必要があります。これは、データが30日前であり、1時間以内の値を割り当てることにのみ関心があるためです。しかし、IP上の理由から、データテーブルについてはあまり共有できません。
しかし、私が達成したいことの良い理論的な例を挙げることができます。
dtCのID列はセールスマン(複数行で繰り返すことができる)で、開始日列はモールで訪問した日です。
dtPと同様に、chart_value列はモールのランダムな時間(action_date)における売上平均です。
どのセールスマンがモールシールを合計で最も向上させるのかを確認し、モールへの訪問から1時間以内にセールスマンのモール内の平均売上を割り当てます。それが役立つことを願っています。
私はそれをテストするとき私が探している1または0を与えるif()が良いと思います、何らかの理由で(おそらく日付フォーマット)私がテーブルでそれを実行するとき0しかありません条件を満たしています)。
再:2つのテーブルの日付間の検索で、一方から外側に暗黙の値を追加私は最初のものも反転する必要があると思います:)そしてif()は良いです。
再:2つのテーブルの日付間の検索で、一方から外側に暗黙の値を追加 @AdamChoen 、
あんまり。hour()関数はタイムスタンプの時間を取得しています - そのため(1-24)の間の値を返します。
下の強調表示されている行は間違っています。私はあなたの説明からあなたが何をしたいのか理解していませんが、あなたが2つの論理条件をチェックしているなら、これらの条件を結合する論理演算子が必要になるでしょう。

再:2つのテーブルの日付間の検索で、一方から外側に暗黙の値を追加皆さんありがとう
スクリプトを修正しました
if()は、dtCの日付から最大1時間経過し、割り当てられた値を合計するdtPの日付を探します。
hr = 3600;
dtC << new column ( "PC_TA", numaric,continuous,format( "Best",8),);
for (i=1, i <= Nrow(dtC), i++,
for (r=1, j <= Nrow(dtP), r++,
if ( dtC:start_date[i] <= dtP:action_date[r] <= dtC:start_date[i] + hr,
dtC:PC_TA[i] = dtC:PC_TA[i] + dtP:chart_value[r]
);
);
);それでも、PC_TA列がすべて空になります
@ uday_guntupalli
2つの表から最初の行を取り出して減算すると、最大49時間から176400秒になります。
Hour()関数を使えば22
dtP:action_date[1] - dtC:start_date[1];
/*:
-177221
hour(dtP:action_date[1]) - hour(dtC:start_date[1]);
/*:
22
再:2つのテーブルの日付間の検索で、一方から外側に暗黙の値を追加 @AdamChoen 、
いくつかの所見と提案
1。ループ変数として "j"を使用しないでください。JMPには作り付けの関数 "J"があり、"j"を変数として使用しないことをお勧めします。
2。あなたのif状態に問題があるようです。
通常、あなたのif条件は私が以下に持っているもののようにすべきですが、あなたはあなたのif文の中に1つの完全な条件と1つの不完全な条件が論理演算子なしで結合されます。
dtC = data table ("cycles");
dtP = data table ("74_edt_PC");
hr = 3600;
dtC << new column ( "PC_TA", numaric,continuous,format( "Best",8),);
For( i = 1, i < N Row( dtC ), i++,
For( r = 1, r < N Row( dtP ), r++,
If( dtC:start_date[i] >= dtP:action_date[r],
dtC:PC_TA[i] = dtP:chart_value[r],
dtC:PC_TA[i] = 0
)
)
);たとえば、2つのタイムスタンプの時間を比較したい場合は、代わりに次のことを検討する必要があります。
dtC = data table ("cycles");
dtP = data table ("74_edt_PC");
hr = 3600;
dtC << new column ( "PC_TA", numaric,continuous,format( "Best",8),);
For( i = 1, i < N Row( dtC ), i++,
For( r = 1, r < N Row( dtP ), r++,
If( hour(dtC:start_date[i]) >= hour(dtP:action_date[r]),
dtC:PC_TA[i] = dtP:chart_value[r],
dtC:PC_TA[i] = 0
)
)
);
再:2つのテーブルの日付間の検索で、一方から外側に暗黙の値を追加私はあなたがあなたのIf()ステートメントの論理を少しオフにしていると信じています。 2回目の比較はStart_Dateに1時間を加えた値以下でなければなりません
If( dtC:start_date[i] >= dtP:action_date[j] <= dtC:start_date[i] + hr,
dtC:PC_TA[i] = dtP:chart_value[j],
0
);