Come si può ottenere il risultato della formula calcolata con più colonne direttamente dal calcolo di un array in memoria?I requisiti per il calcolo con i dati di "Big Class.jmp" e la formula sono i seguenti:
Aggiungi la colonna "riga6" e trova l'altezza minima dalla riga 10 fino a 6 righe;
Aggiungi la colonna "row7" e trova il valore minimo della colonna dell'altezza a partire dalla riga 10 e fino a 7 righe;
...
Come trovare il risultato di "riga6" - "riga9" direttamente utilizzando il metodo dell'array di memoria?
Grazie!
dt=Open("$SAMPLE_DATA/Big Class.jmp");
dt<<NEW column="">9,min(height[Index(Row()-6,Row())])));dt<<RUN formulas="">9,min(height[Index(Row()-7,Row())])));dt<<RUN formulas="">9,min(height[Index(Row()-8,Row())])));dt<<RUN formulas="">9,min(height[Index(Row()-9,Row())])));dt<<RUN formulas=""></RUN></RUN></RUN></RUN></NEW>
ScriptingRe: Come si può ottenere il risultato della formula calcolata con più colonne direttamente dal calcolo di un array in memoria?Poiché la mia capacità di lettura in inglese è limitata, posso utilizzare solo esempi già pronti come riferimento.
La risposta si trova in questo esempio.Sostituzione dei valori della matrice
Grazie Esperti!
Re: Come si può ottenere il risultato della formula calcolata con più colonne direttamente dal calcolo di un array in memoria?Il mio calcolo effettivo è:
1. Calcolare il valore minimo in base ai requisiti di cui sopra.
2. Calcolare il valore massimo secondo lo stesso principio.
3. Inserisci il valore massimo/minimo delle categorie 6, 7, 8 e 9 rispettivamente.
4. Selezionare il valore minimo dei quattro rapporti
Questo emette il rapporto minimo di ogni riga alla tabella. Altri dati intermedi non vengono emessi.

Ho scritto il codice in VBA di Excel.
Sub vba()
ar = Range("d2:d" & Cells(Rows.Count, "d").End(3).Row)
ReDim br(1 To UBound(ar), 1 To 8): ReDim cr(1 To UBound(ar), 1 To 1)
For r = 10 To UBound(ar)
n = 99: m = 0
For c = 0 To 8
If ar(r - c, 1) < n Then n = ar(r - c, 1)
If ar(r - c, 1) > m Then m = ar(r - c, 1)
If c > 4 Then br(r, c - 4) = n: br(r, c) = m
Next
Next
Cells(2, "G").Resize(UBound(br), UBound(br, 2)) = br
For r = 10 To UBound(ar)
For c = 1 To 4
If c = 1 Then
cr(r, 1) = br(r, c + 4) / br(r, c)
Else
If br(r, c + 4) / br(r, c) < cr(r, 1) Then cr(r, 1) = br(r, c + 4) / br(r, c)
End If
Next
Next
Cells(2, "f").Resize(UBound(br), 1) = cr
End Sub
Come cambio questo VBA in JSL?
Grazie!
Re: Come si può ottenere il risultato della formula calcolata con più colonne direttamente dal calcolo di un array in memoria?Grazie Jim!
Sembra che questo metodo non sia l'operazione completa dell'array di memoria.
Re: Come si può ottenere il risultato della formula calcolata con più colonne direttamente dal calcolo di un array in memoria?Names Default To Here( 1 );
dt = current data table();
theHeight = dt:height << get values;
row6=shape([.],40);
row7=shape([.],40);
row8=shape([.],40);
row9=shape([.],40);
row10=shape([.],40);
For(i=11,i<=N Rows(theHeight),i++,
row6[i]=Min(theHeight[i-6::i]);
row7[i]=Min(theHeight[i-7::i]);
row8[i]=Min(theHeight[i-8::i]);
row9[i]=Min(theHeight[i-9::i]);
row10[i]=Min(theHeight[i-10::i]);
);
Devi leggere la Guida allo scripting in modo da poter iniziare a risolvere questi problemi da solo.
Re: Come si può ottenere il risultato della formula calcolata con più colonne direttamente dal calcolo di un array in memoria?Se ho capito bene, vuoi ottenere risultati da row6 a row9 direttamente sugli array senza usare formule?
Di seguito è riportato un esempio per row6 che utilizza For Each Row con elenco e lo stesso calcolo della formula per la colonna row6.
Names Default To Here(1);
dt=Open("$SAMPLE_DATA/Big Class.jmp");
dt<<NEW column="">9,
min(height[Index(Row()-6,Row())])
)
);
);
dt<<RUN formulas="">9,
min(:height[Index(Row()-6,Row())])
)
)
);
show(row6_list);
dt << new column("row6_l", << set values(row6_list));</RUN></NEW>