<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Ciao a tutti,
Mi capita di avere una domanda. Allegata è la tabella dei dati.
Fondamentalmente, vorrei calcolare la media, lo stddev e il conteggio in base alle colonne "vol" per gruppi. Quindi ho prima scritto i seguenti script con la funzione "Summarize ()":
Riepiloga (vol_g = Per (: gruppo),
vol_m_g0 = Media (: vol_0),
vol_m_g1 = Media (: vol_1),
vol_m_g2 = Media (: vol_2),
vol_m_g3 = Media (: vol_3),
vol_m_g4 = Media (: vol_4),
vol_m_g5 = Media (: vol_5),
vol_m_g6 = Media (: vol_6),
vol_sd_g0 = stddev (: vol_0),
vol_sd_g1 = stddev (: vol_1),
vol_sd_g2 = stddev (: vol_2),
vol_sd_g3 = stddev (: vol_3),
vol_sd_g4 = stddev (: vol_4),
vol_sd_g5 = stddev (: vol_5),
vol_sd_g6 = stddev (: vol_6),
vol_n_g0 = Conteggio (: vol_0),
vol_n_g1 = Conteggio (: vol_1),
vol_n_g2 = Conteggio (: vol_2),
vol_n_g3 = Conteggio (: vol_3),
vol_n_g4 = Conteggio (: vol_4),
vol_n_g5 = Conteggio (: vol_5),
vol_n_g6 = Conteggio (: vol_6)
);
Ma è troppo lungo, quindi preferisco usare il ciclo "for" qui sotto:
Per (i = 0, i <= 6, i ++,
Riepiloga (vol_g = Per (: gruppo),
Eval (Parse (Eval Insert ("vol_m_g ^ i ^ = Mean (: vol_ ^ i ^)"))),
Eval (Parse (Eval Insert ("volsd_g ^ i ^ = Stddev (: vol_ ^ i ^)"))),
Eval (Parse (Eval Insert ("vol_n_g ^ i ^ = Conteggio (: vol_ ^ i ^)")))
)
);
Ma questa versione "for loop" non funziona. Come posso modificarlo per farlo funzionare?
Molte grazie!!
A seconda di come generale vuoi che il tuo codice sia, e cosa succederà dopo, potrebbe essere più conveniente creare una tabella di riepilogo:
NamesDefaultToHere ( 1 ) ;
dt1 = Tabella dati ( "Raw_data_new" ) ;
// Ottieni un elenco di tutte le colonne in dt
Cols = dt1 << GetColumnNames ( "Stringa" ) ;
// Elimina qualsiasi colonna che non vogliamo riassumere
Per ( c = NItems ( Cols ) , c > = 1 , c -, Se ( ! contiene ( Cols [ c ] , "Vol_" ) , Rimuovere da ( Cols , c )) ) ;
// Crea una tabella di riepilogo
dt2 = dt1 << Sommario ( Gruppo ( : Gruppo ) , Significare ( EvalList ( Cols )) , StdDev ( EvalList ( Cols )) , N ( EvalList ( Cols ))) ;
Dovrebbe funzionare se si costruisce l'intera espressione riepilogare () come una stringa:
Per ( io = 0 , io <= 6 , io ++,
Eval ( analizzare ( Eval Insert ( "Riepiloga (vol_g = Per (: gruppo),
vol_m_g ^ i ^ = Media (: vol_ ^ i ^),
volsd_g ^ i ^ = Stddev (: vol_ ^ i ^),
vol_n_g ^ i ^ = Conteggio (: vol_ ^ i ^)) "
)))
) ;