選擇使用者輸入開始日期周圍的行範圍我正在處理跨越多年的大型資料集,可以將其簡化為名為 "ID" 和 "Test_date" 的兩列。 日期格式為“m/d/y”,資料表依時間順序排序。 我想選擇測試日期在使用者指定的 Test_date 一年內(之前或之後)的所有行,然後從資料表中刪除所有其他行。
以下是我到目前為止所嘗試過的。 我已為輸入 ID 建立了日期上限和下限,但無法使用 select where() 選擇該範圍內的日期。 相反,我收到錯誤“SelectWhere 的參數未評估為 true 或 false,它是 [0]... 」。 對此的任何幫助將不勝感激。
dt << current data table();
dt << new column("T_YEAR", numeric, continuous, set each value(:Test_date / (365*86400)));
setpoint = ;//user specified numeric value
set_row= dt << get rows where(:ID == setpoint);
set_date = dt:T_YEAR[set_row] ;
set_min = (set_date - 1);
set_max = (set_date + 1);
dt << select where(:T_YEAR >= set_min & :T_YEAR <= set_max )
<< invert row selection
<< delete rows;回覆:選擇使用者輸入開始日期周圍的行範圍@彎曲,看來你的回覆跟我的有重疊。
這對我有用。
dt=open("$SAMPLE_DATA\TechStock.jmp");
set_date=datemdy(12, 15, 2000);
set_min = (set_date - In Days(5));
set_max = (set_date + In Days(5));
dt << select where(:Date >= set_min & :Date <= set_max )
<< invert row selection
<< delete rows;
請注意,我必須更改為 In Days() 而不是幾年,只是因為範例資料中的內容不超過一年,但除此之外,這應該適合您。
回覆:選擇使用者輸入開始日期周圍的行範圍有很多方法可以做到這一點。
您可以使用多年()函數傳回多年的 JMP 日期時間值,或者日期增量()加減年份的函數。
另外,您還可以獲得年()您設定的日期,新增 1 並使用日期 MDY()函數為您提供 JMP 日期值。
set_min = (set_date - In Years(1));
set_max = (set_date + In Years(1));
//or
set_min = Date Increment(set_date, "Year", -1, "actual");
set_max = Date Increment(set_date, "Year", 1, "actual");
//or
set_min = Date MDY( Month( set_date ), Day( set_date ), Year( set_date ) - 1 );
set_max = Date MDY( Month( set_date ), Day( set_date ), Year( set_date ) + 1 );
回覆:選擇使用者輸入開始日期周圍的行範圍是的,這基本上就是我所做的,創建一個新列“T_YEAR”,並使用 Test_date/ (365*86400) 將日期轉換為年份。 我兩種都嘗試過,無論哪種方式都有效。 當在 select where() 中使用 set_min 和 set_max 變數來尋找這些值之間的所有行時,似乎會出現此問題。
回覆:選擇使用者輸入開始日期周圍的行範圍日期時間以秒為單位,因此您需要執行以下操作:
set_min = (set_date - (1 * 365 * 24 * 3600));
set_max = (set_date + (1 * 365 * 24 * 3600));