我有 2 張桌子。
表 1:時間戳記(以 15 分鐘為間隔),i1,i2,i3,p1,p2,p3,p4,.... (182 列)
表 2:年、月、日、開始時間、結束時間(開始時間和結束時間的格式為 - h:m am/pm)
我想選擇 Table1 中的所有 182 列和位於 Table2 的 StartTime 和 EndTime 之間的行並建立子集。
注意:Table2 中每個日期的 StartTime 和 EndTime 可能位於任何位置 - 與 Table1 中的時間戳不完全匹配。(或換句話說 StartTime 和 EndTime 不是 15 的倍數)
我怎麼能做到這一點 1)使用點擊方法 - 如連接並使用“行選擇位置”。或其他內建公式...一步一步和 2) JSL
你好,
如果我理解你的問題,這將遠遠超出互動式執行的痛苦。 我認為您需要原始表的子集,其中只要行位於開始/結束表中任何行的開始時間和結束時間之間,該行就是子集的一部分。
如果這就是您想要的,下面的腳本就可以做到。 它依賴 evalinsert( ) 函數以合法的日期/時間格式建立字串,JMP 可以使用 informat( ) 命令將其轉換為本地數字...因此請務必在腳本索引中查看這兩個函數。
預設情況下,選擇其中 ( ) 會預先清除任何目前行選擇。 可選參數目前選擇(“擴展”)允許我們選擇其他行而不會丟失先前的選擇 - 這允許我們使用循環來增量地進行選擇。
乾杯,
布雷迪
Names Default To Here(1);
////////////////////Build example tables
dt = astable(J(1000,1,randomuniform(today()-3600*24*60, today() + 3600*24*60)), << column names({"Timestamp"}));
dt:Timestamp << Input Format( "ddMonyyyy h:m:s", 0 ) << Format( "ddMonyyyy h:m:s", 22, 0 );
dt << Sort( By( :Timestamp ), Replace Table, Order( Ascending ) );
yearMat = J(20,1,2021);
monList = words("May,Jun,Jul,Aug,Sep",",")[J(20,1,randominteger(1,5))];
dayMat = J(20,1,randominteger(1,30));
amMat = J(20,1,7*3600 + randominteger(0,20)*60);
pmMat = J(20,1,16*3600 + randominteger(0,20)*60);
dt2 = new table("lookups",
<<NEW column=""></NEW>表 1:像這樣我有全年 15 分鐘間隔的資料。

表 2:有時此表包含該月的所有日期。 在範例中,每個月只有幾個。

吉姆,請告訴我這是否有幫助。