选择用户输入开始日期周围的行范围我正在处理跨越多年的大型数据集,可以将其简化为名为 "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));