Ricodifica più colonne con l'elencoVoglio ricodificare più colonne usando una formula condizionale passando attraverso ogni colonna con una funzione For Each. Non riesco a ricodificare correttamente con il seguente codice:
<
//Crea elenco di colonne da ricodificare
ColNames = {dt:Nome("col 1"), dt:Nome("col 2"),
dt:Nome("col 3"), dt:Nome("col 4")};
Per ciascuno({listitem}, ColNames, Recode(
elenco,
{ Minuscolo ( _rcNow ), If ( Contiene ( _rcNow, "troppo"),
"1000",
_rcOra
), Regex( _rcNow, "\D*(\d+\.?\d*)\D*", "\1", GLOBALREPLACE )}
));
La mia impressione è che il corpo della clausola For Each non sia corretto -- che devo in qualche modo richiamare le colonne in modo più chiaro.
La tabella di dati come "dt" è stabilita in precedenza nel codice. Per la cronaca, non ottengo un errore quando utilizzo lo script ma le colonne non vengono ricodificate correttamente. Grazie.
SceneggiaturaRe: Ricodifica più colonne con elencoForse devi solo usare Recode Column invece di Recode e poi armeggiare un po' su come fare riferimento alle colonne.
Questo sembra funzionare, almeno sostituisce troppo con 1000 in col 1:
Names Default To Here(1);
dt = New Table("Untitled 2",
Add Rows(1),
New Column("col 1", Character, "Nominal", Set Values({"too much"})),
New Column("col 2", Character, "Nominal", Set Values({"a"})),
New Column("col 3", Character, "Nominal", Set Values({"c"})),
New Column("col 4", Character, "Nominal", Set Values({"d"}))
);
//Create list of columns to be recoded
ColNames = {"col 1"};
For Each({listitem}, ColNames,
dt << Recode Column(
//As Column(dt, listitem),
AsColumn(listitem),
{Lowercase(_rcNow), If(Contains(_rcNow, "too much"),
"1000",
_rcNow
), Regex(_rcNow, "\D*(\d+\.?\d*)\D*", "\1", GLOBALREPLACE)},
Update Properties(1),
Target Column(Column(listitem))
)
);Re: Ricodifica più colonne con elencoHo adattato il codice qui per i miei scopi (diverse colonne nell'elenco) ma continua a non funzionare:
ColNames = {dt:Name("col 1"), dt:Name("col 2"),
dt:Name("col 3"), dt:Name("col4")};
For Each({listitem}, ColNames,
dt<<RECODE column=""></RECODE>Stavi suggerendo di andare colonna per colonna per ricodificare?
Re: Ricodifica più colonne con elencoNon sono sicuro di quali formati per le colonne Recode Columns richiede. Puoi vedere che stiamo usando diverse sintassi per ColNames (sto usando l'elenco dei nomi delle colonne e stai usando il vecchio modo per fare riferimento alle colonne (Name("col name"), è stato sostituito da "col name"n) , inoltre stiamo utilizzando colonne diverse nella colonna di destinazione.
Se esegui l'esempio che ho fornito con questa tabella di dati:

Finisco con questo

Ecco un esempio aggiornato con una nuova tabella e più colonne aggiunte all'elenco ColNames
Names Default To Here(1);
dt = New Table("Untitled 2",
Add Rows(3),
Compress File When Saved(1),
New Column("col 1", Character, "Nominal", Set Values({"1000", "too much", "too much"})),
New Column("col 2",
Character,
"Nominal",
Set Values({"too much", "", ""}),
Set Display Width(65)
),
New Column("col 3", Character, "Nominal", Set Values({"c", "", "too much"})),
New Column("col 4", Character, "Nominal", Set Values({"d", "", ""}))
);
wait(1);
//Create list of columns to be recoded
ColNames = {"col 1", "col 2", "col 3", "col 4"};
For Each({listitem}, ColNames,
dt << Recode Column(
//As Column(dt, listitem),
As Column(listitem),
{Lowercase(_rcNow), If(Contains(_rcNow, "too much"),
"1000",
_rcNow
), Regex(_rcNow, "\D*(\d+\.?\d*)\D*", "\1", GLOBALREPLACE)},
Update Properties(1),
Target Column(Column(listitem))
)
);