Apilando solo una columnaMe decepcionó descubrir que JMP no nos permite apilar solo una columna. Entiendo que apilar solo una columna no tiene sentido, sin embargo, dado que es solo una transformación de datos, tiene sentido querer hacerlo.
De todos modos, quise abrir la conversación y ver quién puede trabajar mejor que yo. Aquí está el mío:
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 ) );
¡Buena suerte!
Re: Apilando solo una columnaEsta es una gran estrategia y funciona perfectamente en JMP 13, sin embargo, en JMP 12, ya que Nombre es una columna de Etiqueta, la lanza automáticamente como una columna de etiqueta para la función Transponer, cortocircuitando la estrategia. No estoy seguro de si fue un error, pero me alegro de que se haya solucionado en JMP 13. Desafortunadamente, soy el único en mi equipo que tiene JMP 13 actualmente ...
Re: Apilando solo una columnaOtro enfoque sin condicional (suponiendo que la tabla de datos original tiene> 1 filas):
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));
Re: Apilando solo una columnaAquí hay una alternativa que no desordena la tabla original si solo hay una columna, es decir, crea una nueva tabla (como hace Stack ()) en lugar de adaptar la tabla original al enfoque.
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));