For Loop non valuta correttamente la formula.<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Sto cercando di creare nuove colonne in una tabella di dati, ogni nuova colonna è il punteggio Z di una colonna esistente. Ecco quello che ho
Colnames_1st = dt_zscore3 << Ottieni nomi di colonna ();
nlist = N Items (Colnames_1st);
per (i = 5, i <= 10, i ++,
var1 = Column (Colnames_1st );
mean = Col Mean (var1);
stdev = Col Std Dev (var1);
namevar = char (Colnames_1st );
Nuova colonna ("Zscore" || namevar,
Numerico, continuo,
Formato ("Migliore", 12),
Formula ((((var1 []) - media) / stdev)));
);
Il codice crea le 6 nuove colonne e le nomina correttamente.
Ma quando va a riempire i valori in tutte le colonne, non lo fa correttamente.
Tutte le colonne finiscono con lo stesso valore in ogni riga. Mi sembra così
sta creando le colonne, ma poi aspetta che il ciclo for sia finito per calcolare il
valori che vanno in ogni riga in tutte le colonne, quindi utilizza l'ultimo valore di tutti
le variabili per tutte le colonne, invece di calcolare la formula per ciascuna
colonna usando i valori che dovrebbero essere usati da quella colonna.
Sono davvero bloccato Ho provato tutti i tipi di cose ma non riesco a superare questo ostacolo.
Qualsiasi aiuto sarebbe molto apprezzato.
Ri: For Loop non valuta correttamente la formula.Penso che ci possa essere un problema con la tua soluzione. Può funzionare quando vengono create le colonne, ma non in un'altra sessione o se i dati vengono modificati o aggiunti nelle colonne di origine.
Se osservi le formule nelle nuove colonne, sospetto che assomigli a "(var1 [] - mean) / stdev". Questi nomi di variabili hanno senso solo nel contesto corrente dello script (o anche all'interno di una specifica iterazione del ciclo. Se le variabili vengono ridefinite o cancellate, le formule non funzioneranno correttamente.
Le formule dovrebbero essere inserite letteralmente perché le variabili nell'argomento Formula () non sono state valutate apparentemente ma prese alla lettera. Se le variabili devono essere utilizzate, ad esempio in ciclo for, questo può essere ottenuto manipolando stringhe o espressioni.
Esempio utilizzando evalexpr () per valutare espressioni all'interno di un'espressione prima di valutarla:
dt = Aperto ( "$ SAMPLE_DATA / Big Class.jmp" ) ;
n = N Col ( dt ) ;
Per ( io = 4 , io <= n , io ++,
var1 = Colonna ( io ) ;
Eval (
Eval Espr (
dt << Nuova colonna ( "Zscore" || ( var1 << prendi il nome ) ,
Numerico ,
Continuo ,
Formula ( Col standardizzazione ( expr ( var1 ) ) )
)
)
) ;
) ;
Ri: For Loop non valuta correttamente la formula.Penso di aver finalmente trovato una soluzione.
Ho la sensazione che il mio problema stia in qualche modo nel definire variabili come locali rispetto a globali, ma non importa quello che ho provato, non sono riuscito a capire come sistemarlo in quel modo.
Invece ho aggiunto la linea
dt_zscore3 << Esegui formule
e ora lo fa correttamente.
Colnames_1st = dt_zscore3 << Ottieni nomi di colonna ();
nlist = N Items (Colnames_1st);
per (i = 5, i <= nlist, i ++,
Nomi predefiniti qui (1);
var1 = Column (Colnames_1st );
// var1 = Column (Colnames_1st );
mean = Col Mean (var1);
stdev = Col Std Dev (var1);
namevar = char (Colnames_1st );
Nuova colonna ("Zscore" || namevar,
Numerico, continuo,
Formato ("Migliore", 12),
Formula ((((var1 []) - media) / stdev)));
dt_zscore3 << Esegui formule
);
Questo potrebbe non essere elegante o il modo più corretto per farlo, ma lo posterò nel caso qualcuno lo trovasse utile.