Suchen Sie zwischen Datumsangaben in zwei Tabellen den Assassinenwert von eins nach außenHallo!
Ich brauche Hilfe
um einen Wert aus einer Tabelle einer äußeren zuzuweisen.
Mein Auslöser ist das Datum,
Wenn das Datum in dtP innerhalb einer Stunde von dtC gleich oder größer ist, müssen Sie den Wert von dtC: chart_value der neuen Spalte (PC_TA) in dtC zuweisen
Jede Hilfe wird geschätzt
Tabellenspalten

Mein Code - keine Werte nur Nullen zuweisen und letzte Zeile nicht behandeln 
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
);
);
);
Re: Durchsuchen Sie zwischen Datumsangaben in zwei Tabellen den Assassinenwert von eins nach außenDanke, Uday.
Wenn ich also hour () verwenden möchte, muss ich wahrscheinlich day () und month () hinzufügen, auch weil meine Daten 30 Tage zurückliegen und ich nur daran interessiert bin, Werte zu vergeben, die innerhalb von 1 Stunde zurückliegen aber aus IP-Gründen kann ich nicht zu viel über die Datentabellen teilen.
aber ich kann ein gutes theoretisches Beispiel dafür geben, was ich erreichen möchte:
Angenommen, die ID-Spalte in dtC ist ein Verkäufer (kann sich in mehreren Zeilen wiederholen) und die Startdatum-Spalte ist das Datum, an dem sie sich in der Mall aufhalten.
Wie bei dtP ist die chart_value-Spalte der Verkaufsdurchschnitt in einer zufälligen Zeit (action_date) im Einkaufszentrum.
Ich möchte sehen, welcher Verkäufer die Mall-Siegel am meisten nach der Summe verbessert und den durchschnittlichen Umsatz in der Mall einem Verkäufer innerhalb einer Stunde nach dem Besuch der Mall zuweist. hoffentlich hilft das.
Ich glaube das if () ist gut, es gibt mir die 1 oder 0, nach der ich suche, wenn ich es teste, aus irgendeinem Grund (vielleicht Datumsformat) gibt es nur 0, wenn ich es auf den Tischen laufen lasse (obwohl ich Datumsangaben sehe.) die Bedingung erfüllen).
Re: Durchsuchen Sie zwischen Datumsangaben in zwei Tabellen den Assassinenwert von eins nach außenIch glaube der erste muss auch umgedreht werden
und das if () ist gut.
Re: Durchsuchen Sie zwischen Datumsangaben in zwei Tabellen den Assassinenwert von eins nach außen @ AdamChoen .
Nicht wirklich. Die Funktion hour () liefert die Stunde des Zeitstempels - gibt also einen Wert zwischen (1-24) zurück.
Die markierte Zeile unten ist falsch. Ich verstehe anhand Ihrer Beschreibung nicht, was Sie tun möchten, aber wenn Sie nach zwei logischen Bedingungen suchen, muss ein logischer Operator vorhanden sein, der diese Bedingungen verbindet.

Re: Durchsuchen Sie zwischen Datumsangaben in zwei Tabellen den Assassinenwert von eins nach außenDanke euch allen
Ich habe das Skript korrigiert
Das if () sucht nach einem Datum in dtP, das bis zu einer Stunde ab dem Datum von dtC größer ist und die zugewiesenen Werte summiert.
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]
);
);
);Ich bekomme immer noch die PC_TA-Spalte leer
@ uday_guntupalli
Wenn ich die ersten Zeilen von den beiden Tabellen nehme und davon abziehe, nehme ich an, ~ 49 Std. ~ 176400 Sec zu erhalten.
mit der Funktion Hour () bekomme ich 22
dtP:action_date[1] - dtC:start_date[1];
/*:
-177221
hour(dtP:action_date[1]) - hour(dtC:start_date[1]);
/*:
22
Re: Durchsuchen Sie zwischen Datumsangaben in zwei Tabellen den Assassinenwert von eins nach außen @ AdamChoen .
Einige Anmerkungen und Vorschläge:
1 Verwenden Sie "j" nicht als Schleifenvariable. JMP hat eine eingebaute Funktion "J" und es ist ratsam, "J" nicht als Variable zu verwenden.
2 Ihre if-Bedingung scheint ein Problem zu haben.
Normalerweise sollte Ihre if-Bedingung den folgenden Bedingungen entsprechen, jedoch haben Sie in Ihrer if-Anweisung 1 vollständige und 1 unvollständige Bedingung ohne logischen Operator.
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
)
)
);Wenn Sie beispielsweise die Stunden der zwei Zeitstempel vergleichen möchten, sollten Sie stattdessen Folgendes berücksichtigen:
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
)
)
);
Re: Durchsuchen Sie zwischen Datumsangaben in zwei Tabellen den Assassinenwert von eins nach außenIch glaube, Sie haben Ihre If () - Anweisungslogik leicht deaktiviert. Ihr zweiter Vergleich sollte kleiner oder gleich dem Start_Date plus 1 Stunde sein
If( dtC:start_date[i] >= dtP:action_date[j] <= dtC:start_date[i] + hr,
dtC:PC_TA[i] = dtP:chart_value[j],
0
);