只堆疊一列我很失望地發現JMP讓我們只堆疊一列。 我知道堆疊一列只是沒有意義,因為它只是一個數據轉換,它確實有意義去做。
無論如何,我想打開對話,看看誰能提出比我做得更好的工作。 這是我的:
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 ) );
祝好運!
回复:只堆疊一列這是一個很好的策略,在JMP 13中運行得很好,但是,在JMP 12中,因為Name是一個Label列,它會自動將其作為Transpose函數的標籤列拋出 - 使策略短路。 不確定這是不是一個bug,但很高興它在JMP 13中得到修復。 不幸的是,我是團隊中唯一擁有JMP 13的人......
回复:只堆疊一列沒有條件的另一種方法(假設原始數據表有> 1行):
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));
回复:只堆疊一列如果只有一列,即創建一個新表(如Stack()),而不是將原始表調整為方法,這裡有一個替代方法不會弄亂原始表。
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));