Sto cercando di creare una colonna e riempirla con una formula ma ottengo un errore.Visualizza altro... For (j=3, j<=10, j=j+2,
ColLen=Length(Char(Column name (j)));
ColName=Left (Char(Column Name(j)),ColLen -5);
NewCol=Substr(ColName,6);
New Column(
"Delta: "||NewCol,
Numeric,
Formula (
(Column (j)- Column(j+1))
)
)
);
Automazione e scriptingRi: Sto cercando di creare una colonna e riempirla con una formula ma ottengo un errore.Sembra funzionare "una volta" (i valori sono OK) - ma (almeno per il mio caso di test) la variante n. 1 riporta un errore con la formula quando la apri in seguito:

La variante n. 6 sembra risolvere questo problema:

ma fallirà sicuramente una volta che Jmp sarà chiuso e dimenticherà cosa dt significa ....
Ri: Sto cercando di creare una colonna e riempirla con una formula ma ottengo un errore.Just As Column() invece di column ha funzionato!
Ri: Sto cercando di creare una colonna e riempirla con una formula ma ottengo un errore.Just As Column() invece di column ha funzionato!
Ri: Sto cercando di creare una colonna e riempirla con una formula ma ottengo un errore.Non funziona 
Ri: Sto cercando di creare una colonna e riempirla con una formula ma ottengo un errore.Dopo aver giocherellato un po'
- esp: chiedendosi perché il numero 1 non dia il risultato atteso:
dt = Open( "$Sample_data/iris.jmp" );
cols = {Sepal length,Sepal width, Petal length};
i = 2;
Eval( Eval Expr( dt << New Column( "new1", Formula( As Column( Expr( i ) ) ) ) ) ); //works but the formula is corrupted
Eval( Eval Expr( dt << New Column( "new2", Formula( As Column( Expr( Column(i) ) ) ) ) ) );
Eval( Eval Expr( dt << New Column( "new3", Formula( As Column( Expr( Char( cols[i] ) ) ) ))) );
Eval(Substitute(Expr(dt << New Column( "new4", Formula( __col__ ) )),Expr(__col__),Name Expr(As Column(i)) ));
Eval(Eval Expr(dt << New Column("new5", Formula(Expr(NameExpr(AsColumn(i)))))));
// new:
Eval( Eval Expr( dt << New Column( "new6", Formula( As Column( dt, Expr( i ) ) ) ) ) ); ... ho trovato una nuova variante che non necessita di allegato Nome Espr per farlo funzionare *)
Interessante ...
*) lavoro - finché Jmp non viene chiuso e riavviato
Ri: Sto cercando di creare una colonna e riempirla con una formula ma ottengo un errore.Un buon post su questo argomento è Inserisci un'espressione in un'altra usando Eval Insert, Eval Expr, Parse e Substitute . Nel tuo caso hai bisogno di una soluzione un po 'più complicata poiché stai usando indici di colonna invece di nomi di colonna se vuoi avere formule (la maggior parte delle volte suggerirei di usare nomi invece di indici). La maggior parte delle volte uso Eval(EvalInsert()) ma anche la sostituzione è una buona opzione
Names Default To Here(1);
dt = New Table("Untitled",
Add Rows(3),
Compress File When Saved(1),
New Column("Column 1", Numeric, "Continuous", Format("Best", 12), Set Values([1, 2, 3])),
New Column("Column 2", Numeric, "Continuous", Format("Best", 12), Set Values([2, 3, 4])),
New Column("Column 3", Numeric, "Continuous", Format("Best", 12), Set Values([3, 4, 5])),
New Column("Column 4", Numeric, "Continuous", Format("Best", 12), Set Values([4, 5, 6])),
New Column("Column 5", Numeric, "Continuous", Format("Best", 12), Set Values([6, 7, 8]))
);
For(j = 1, j < 5, j = j + 2,
// ColLen = Length(Char(Column Name(j)));
// ColName = Left(Char(Column Name(j)), ColLen - 6);
// NewCol = Substr(ColName, 6);
new_col = Word(2, Column(dt, j) << get name, " ");
Eval(Eval Expr(
New Column("Delta: " || new_col, Numeric, Formula(
Expr(NameExpr(AsColumn(j))) - Expr(NameExpr(AsColumn(j + 1)))
))
));
);
Alcune funzioni/messaggi aggiuntivi che potrebbero interessarti: < < Ottieni nomi di colonna , Parola() (cerca anche Words(), Item() e Items() dall'indice di scripting), Per ciascuno() (se hai JMP16+)
Ri: Sto cercando di creare una colonna e riempirla con una formula ma ottengo un errore.@mmarchandTSI , Sono d'accordo,
Formula(Column( ...
non funzionerà.
Che ne dici di usare Sostituto:
For( j = 3, j <= 10, j = j + 2,
ColLen = Length( Char( Column Name( j ) ) );
ColName = Left( Char( Column Name( j ) ), ColLen - 5 );
NewCol = Substr( ColName, 6 );
Eval(Substitute(Expr(
New Column( "Delta: " || NewCol, Numeric, Formula( (__colA__ - __colB__) ) );
),Expr(__colA__),Name Expr(As Column(j)),Expr(__colB__),Name Expr(As Column(j+1)) ))
);
Ri: Sto cercando di creare una colonna e riempirla con una formula ma ottengo un errore.È perché Column() è un riferimento alla colonna stessa e non ai valori nella colonna.So come fare quello che vuoi in un modo brutto.Il seguente script funzionerà nel frattempo fino a quando qualcuno non pubblicherà una soluzione più carina.
Names Default To Here( 1 );
For( j = 3, j <= 10, j = j + 2,
ColLen = Length( Char( Column Name( j ) ) );
ColName = Left( Char( Column Name( j ) ), ColLen - 5 );
NewCol = Substr( ColName, 6 );
Eval(
Parse(
"New Column( \!"Delta: " || NewCol || "\!",
Numeric,
Formula(
:\!"" ||
(Column( j ) << Get Name) || "\!"n - :\!"" || (Column( j + 1 ) << Get Name) || "\!"n
))"
)
);
);
Ri: Sto cercando di creare una colonna e riempirla con una formula ma ottengo un errore.JSL utilizza l'ambito dinamico: credo che tu stia lavorando sotto il presupposto implicito dell'ambito lessicale (utilizzato dalla maggior parte dei linguaggi di programmazione).
Poiché JSL utilizza l'ambito dinamico, la risoluzione dell'ambito per il nome J è fatto alle tempo di esecuzione e quando la formula sta calcolando il nome J non è più nell'ambito, quindi si verifica un errore.
Per aggirare questo problema, puoi pre-valutare parti del codice in modo che JMP non abbia una variabile da cercare all'interno della formula della colonna:
For( j = 3, j <= 10, j = j + 2,
ColLen = Length( Char( Column Name( j ) ) );
ColName = Left( Char( Column Name( j ) ), ColLen - 5 );
NewCol = Substr( ColName, 6 );
Eval( Eval Expr(
New Column( "Delta: " || NewCol, Numeric, Formula( (Column( Expr( j ) ) - Column( Expr( j + 1 ) )) ) );
) )
);
Ri: Sto cercando di creare una colonna e riempirla con una formula ma ottengo un errore.@CrownofTears , Sulla base del tuo JSL originale:
For( j = 3, j <= 10, j = j + 2,
ColLen = Length( Char( Column Name( j ) ) );
ColName = Left( Char( Column Name( j ) ), ColLen - 5 );
NewCol = Substr( ColName, 6 );
Eval(
Eval Expr(
New Column( "Delta: " || NewCol,
Numeric,
Formula( (As Column( Expr( Column Name( j ) ) ) - As Column( Expr( Column Name( j + 1 ) ) )) )
)
)
);
);Mi piacciono le funzioni pulite As Column("column name") e non è brutta come la mia soluzione Eval( Parse(...) ).
Ri: Sto cercando di creare una colonna e riempirla con una formula ma ottengo un errore.Avrei dovuto sottolineare che per passare dal riferimento di colonna al valore di riga, basta inserire a [] .Quanto segue dovrebbe funzionare:
For( j = 3, j <= 10, j = j + 2,
ColLen = Length( Char( Column Name( j ) ) );
ColName = Left( Char( Column Name( j ) ), ColLen - 5 );
NewCol = Substr( ColName, 6 );
Eval( Eval Expr(
New Column( "Delta: " || NewCol, Numeric, Formula( (Column( Expr( j ) )[] - Column( Expr( j + 1 ) )[]) ) );
) )
);
Ri: Sto cercando di creare una colonna e riempirla con una formula ma ottengo un errore.Avrei dovuto sottolineare: per passare da un riferimento di colonna a un valore di riga all'interno di una formula, inserire un [] dopo il riferimento di colonna
Column( 1)[] + Column( 2 )[]
Ri: Sto cercando di creare una colonna e riempirla con una formula ma ottengo un errore.Bel trucco 
Column(1)[]
invece di
Column(1)[row()]