Seleziona l'intervallo di righe attorno alla data di inizio dell'input dell'utenteSto lavorando con un ampio set di dati che copre molti anni, che può essere semplificato in due colonne denominate "ID" e "Test_date". La data è formattata come "m/d/y" e la tabella dati è ordinata cronologicamente. Vorrei selezionare tutte le righe in cui la data del test è entro un anno (prima o dopo) dalla data_test specificata dall'utente, quindi eliminare tutte le altre righe dalla tabella dati.
Di seguito è riportato ciò che ho provato finora. Ho creato i limiti di data superiore e inferiore per un ID di input, ma non riesco a selezionare le date all'interno di tale intervallo utilizzando select where(). Invece, ricevo l'errore "L'argomento di SelectWhere non è stato valutato come vero o falso, è [0]... ". Qualsiasi aiuto su questo sarebbe molto apprezzato.
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;Ri: Selezionare l'intervallo di righe attorno alla data di inizio dell'input dell'utente@piegato , sembra che la tua risposta e la mia si siano sovrapposte.
Questo funziona per me.
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;
Tieni presente che ho dovuto passare a In Days() anziché a anni solo perché i dati di esempio non contenevano più di un anno, ma a parte questo dovrebbe funzionare per te.
Ri: Selezionare l'intervallo di righe attorno alla data di inizio dell'input dell'utenteCi sono molti modi per farlo.
Puoi usare il In anni() per restituire il valore datetime JMP per un numero di anni oppure il Incremento data() funzione per aggiungere o sottrarre un numero di anni.
Inoltre, potresti ottenere il file Anno() della data impostata, aggiungi 1 e utilizza il Data MDY() funzione per darti il valore della data 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 );
Ri: Selezionare l'intervallo di righe attorno alla data di inizio dell'input dell'utenteSì, essenzialmente è quello che ho fatto creando una nuova colonna "T_YEAR" con la data convertita in anni utilizzando Test_date/ (365*86400). Ho provato entrambi e funziona in entrambi i casi. Il problema sembra verificarsi quando si utilizzano le variabili set_min e set_max in select where() per trovare tutte le righe tra tali valori.
Ri: Selezionare l'intervallo di righe attorno alla data di inizio dell'input dell'utenteLe date e gli orari sono espressi in unità di secondi, quindi dovrai fare qualcosa del genere:
set_min = (set_date - (1 * 365 * 24 * 3600));
set_max = (set_date + (1 * 365 * 24 * 3600));