Impilando solo una colonnaSono rimasto deluso nello scoprire che JMP ci ha impedito di impilare solo una colonna. Capisco che impilare solo una colonna non ha senso, tuttavia, dal momento che è solo una trasformazione dei dati, ha senso volerlo fare.
Ad ogni modo, volevo aprire la conversazione e vedere chi può inventare un lavoro migliore di quello che ho fatto io. Ecco il mio:
Names Default to Here(1);
//Example Data Table
dt = Open( "$SAMPLE_DATA/Decathlon.jmp" );
//col list is list of columns from 1 to n (never an empty list)
colList = {"Javelin", "Pole Vault"};
//Stack columns to prepare data for analysis
if(nitems(colList) > 1,
analysisColsExpr = Expr(columns());
for(i=1; imax=nitems(colList), i<=imax, i++,
col = Column(dt, colList[i]);
insert into(analysisColsExpr, col);
);
dtAnalysis = Eval(Eval Expr(dt << Stack(
Expr( Name Expr( analysisColsExpr )),
Source Label Column( "AnalysisType" ),
Stacked Data Column( "AnalysisValue" ),
Output Table( "Stacked Data" )
)));
close(dt, nosave);
,
//Can't stack only one column adjust columns to match above strategy
dt << New Column("AnalysisType", Character, Nominal, Formula(colList[1]));
column(dt, colList[1]) << Set Name("AnalysisValue");
dt << Set Name("Stacked Data");
dtAnalysis = dt;
);
//Run Analysis
oneway = dtAnalysis << Oneway( Y( :AnalysisValue ), X( :AnalysisType ) );
In bocca al lupo!
Ri: Impilando solo una colonnaQuesta è una grande strategia e funziona perfettamente in JMP 13, tuttavia, in JMP 12 poiché Name è una colonna Label, la getta automaticamente come una colonna di etichette per la funzione Transpose - cortocircuitando la strategia. Non sono sicuro che sia stato un bug, ma è contento che sia stato risolto in JMP 13. Sfortunatamente, sono l'unico del mio team che ha JMP 13 al momento ...
Ri: Impilando solo una colonnaUn altro approccio senza condizioni (supponendo che la tabella di dati originale abbia> 1 righe):
Names Default To Here(1);
//Example Data Table
dt = Open("$SAMPLE_DATA/Decathlon.jmp");
//col list is list of columns from 1 to n (never an empty list)
colList = {"Javelin", "Pole Vault"};
dtTemp = dt << Transpose(Private, Columns(colList), Label Column Name("AnalysisType"));
stackList = (dtTemp << get column names)[2 :: N Row(dt) + 1];
dtAnalysis = dtTemp << Stack(
Columns(stackList),
Stacked Data Column("AnalysisValue"),
Output Table("Stacked Data")
);
//Run Analysis
oneway = dtAnalysis << Oneway(Y(:AnalysisValue), X(:AnalysisType));
Ri: Impilando solo una colonnaEcco un'alternativa che non rovina la tabella originale se c'è solo una colonna, cioè crea una nuova tabella (come fa Stack ()) invece di adattare la tabella originale all'approccio.
Names Default To Here(1);
//Example Data Table
dt = Open("$SAMPLE_DATA/Decathlon.jmp");
//col list is list of columns from 1 to n (never an empty list)
colList = {"Javelin", "Pole Vault"};
If(N Items(colList) > 1,
dtAnalysis = dt << Stack(
Columns(colList),
Source Label Column("AnalysisType"),
Stacked Data Column("AnalysisValue"),
Output Table("Stacked Data")
),
dtAnalysis = New Table("Stacked Data",
addrows(N Rows(dt)),
New Column("AnalysisType", character, set each value(colList[1])),
New Column("AnalysisValue", numeric, values(Column(dt, colList[1]) << getvalues))
)
);
//Run Analysis
oneway = dtAnalysis << Oneway(Y(:AnalysisValue), X(:AnalysisType));