Etichetta del valoreSto provando a modificare i valori in più colonne usando un ciclo For e un'istruzione If. Sfortunatamente, mentre crea correttamente le nuove colonne, i valori nella seconda colonna vengono per qualche motivo copiati anche nella prima colonna. Cosa mi sfugge?
New Table( "Untitled 11",
Add Rows( 4 ),
New Column( "Column_1",
Character,
"Nominal",
Set Values( {"A1000", "A2000", "A3000", "A4000"} )
),
New Column( "Column_2",
Character,
"Nominal",
Set Values( {"B5000", "B6000", "B7000", "B8000"} )
)
);
OldColNames = { "Column_1", "Column_2" };
NewColNames = { "New_Column_1", "New_Column_2" };
nCols = N Items( OldColNames );
For( i = 1, i <= nCols, i++,
oldcol = OldColNames[i];
newcol = NewColNames[i];
New Column( newcol,
Character,
"Nominal",
Formula(
If(
"A10" <= Left( As Column( oldcol ), 3 ) <= "A19", "A-One",
"A20" <= Left( As Column( oldcol ), 3 ) <= "A29", "A-Two",
"A30" <= Left( As Column( oldcol ), 3 ) <= "A39", "A-Three",
"A40" <= Left( As Column( oldcol ), 3 ) <= "A49", "A-Four",
"B50" <= Left( As Column( oldcol ), 3 ) <= "B59", "B-Five",
"B60" <= Left( As Column( oldcol ), 3 ) <= "B69", "B-Six",
"B70" <= Left( As Column( oldcol ), 3 ) <= "B79", "B-Seven",
"B80" <= Left( As Column( oldcol ), 3 ) <= "B89", "B-Eight",
)
)
);
);Grazie!
Modellazione statistica avanzataRicerca sui consumatori e sul mercatoAccesso ai datiFusione e pulizia dei datiIngegneria della qualità e dei processiRe: Etichetta di valoreÈ perché il nome vecchio col all'interno delle formule viene valutato (risolto) solo quando viene eseguita la formula e la formula non viene eseguita quando viene creata la colonna ma in un momento successivo.A quel punto successivo si riferiscono entrambe le colonne vecchio col , che ora si risolve nella stessa colonna
Per risolvere questo problema, devi impostare il vecchio valore col al momento della creazione della colonna, in questo modo:
New Table( "Untitled 11",
Add Rows( 4 ),
New Column( "Column_1",
Character,
"Nominal",
Set Values( {"A1000", "A2000", "A3000", "A4000"} )
),
New Column( "Column_2",
Character,
"Nominal",
Set Values( {"B5000", "B6000", "B7000", "B8000"} )
)
);
OldColNames = { "Column_1", "Column_2" };
NewColNames = { "New_Column_1", "New_Column_2" };
nCols = N Items( OldColNames );
For( i = 1, i <= nCols, i++,
oldcol = OldColNames[i];
newcol = NewColNames[i];
Eval( Eval Expr(
New Column( newcol,
Character,
"Nominal",
Formula(
As Constant( col = As Name( Expr( old col ) ) );
If(
"A10" <= Left( col, 3 ) <= "A19", "A-One",
"A20" <= Left( col, 3 ) <= "A29", "A-Two",
"A30" <= Left( col, 3 ) <= "A39", "A-Three",
"A40" <= Left( col, 3 ) <= "A49", "A-Four",
"B50" <= Left( col, 3 ) <= "B59", "B-Five",
"B60" <= Left( col, 3 ) <= "B69", "B-Six",
"B70" <= Left( col, 3 ) <= "B79", "B-Seven",
"B80" <= Left( col, 3 ) <= "B89", "B-Eight",
)
)
);
) );
);Qui sto usando il Eval( Eval Espr( ... Espr( var ) ... ) ) costrutto per pre-valutare parte dello script e il come costante() valuta solo per la prima riga e mantiene quel valore per tutte le righe successive (può velocizzare le formule impedendo il tempo di ricerca del nome)
Re: Etichetta di valoreEccellente!Grazie molte.