无法在多变量中获取列名称嗨,
我正在尝试自动化流程。以下是开头部分的概述:
-Tabulate
- 做桌子
- 在所有连续列上运行多变量 - 所以我可以得到一个相关矩阵
我在奔跑多变量部分挣扎。我不知道如何把它放在那里我想要的列。如果我知道列名并将其粘贴在此部分中,则此方法有效:
多元 (
ÿ ( 列在这里的名字 ) ,
但是我不知道列名,所以我想放一个列表变量或者适合的东西。任何帮助非常感谢!
这是整个事情:
dt = data table("wpu10");
tab1= dt<<TABULATE></TABULATE>
Re:无法在多变量中获取列名你非常接近....试试这个
Names Default To Here( 1 );
dt = Data Table( "wpu10" );
tab1 = dt << Tabulate(
Add Table( Column Table( Grouping Columns( :series_id, :series_title ), Analysis Columns( :value ) ), Row Table( Grouping Columns( :year ) ) )
);
dtTab1 = tab1 << makeintodatatable;
dtTab1 << set name( "dtTab1" );
// Get Column names returns a list
colnameslist = dtTab1 << get column names( Continuous, string );
Multivariate(
Y( Eval List( colnameslist ) ),
Estimation Method( "Pairwise" ),
Matrix Format( "Square" ),
Scatterplot Matrix( Density Ellipses( 1 ), Shaded Ellipses( 0 ), Ellipse Color( 3 ) )
);
Re:无法在多变量中获取列名Y()参数需要一个或列引用,而不是名称(字符串)。这是使其工作的另一种方法:
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Fitness.jmp" );
col name = dt << Get Column Names( "Continuous" );
col expr = Expr( Y() );
For( i = 1, i <= N Items( col name ), i++,
Insert Into( col expr, Column( col name[i] ) );
);
Eval(
Substitute(
Expr(
Multivariate(
yyy,
Estimation Method( "Pairwise" ),
Matrix Format( "Square" ),
Scatterplot Matrix( Density Ellipses( 1 ), Shaded Ellipses( 0 ), Ellipse Color( 3 ) )
);
),
Expr( yyy ),
Name Expr( col expr )
)
);Re:无法在多变量中获取列名感谢您的帮助,但看起来我仍然遇到麻烦。我把它从我的日志中取出来以防万一它有帮助:
“总和(价值,WPU106,PPI金属和金属制品的商品数据 - 加热设备,未经季节性调整)”,
“总和(价值,WPU107,PPI金属和金属制品的商品数据 - 制造的结构金属产品,未经季节性调整)”,
角色至少需要1列。}
),多变量(/ * ### * / Y(Eval List(colnameslist)),
估算方法(“成对”),
矩阵格式(“Square”),Re:无法在多变量中获取列名我尝试调整你的solutino,但无法让它给我多变量输出。
我认为问题是我不知道列名。在我执行“dtTab1 = tab1 << makeintodatatable;”之后,我需要一种方法来获取名称。
也许你的代码告诉我但仍然在努力去看看如何。你需要你有yyy的列名,还是那些有名字的变量?
Re:无法在多变量中获取列名我不知道这些错误是如何相关的。您是否尝试使用Tabulate标签作为Y角色中多变量的列名?
暂时忘掉脚本。你能以交互方式实现结果吗?也就是说,使用Tabulate以交互方式获取摘要,将结果保存在新数据表中,然后启动多变量?
列名称如“Sum(... )“将被解释为函数调用而不是Eval List()调用中的列引用,而无需特殊处理。
Re:无法在多变量中获取列名您遇到的问题是从Tabulate表创建表时生成的复杂名称。 在下面的脚本中,我已经将Tabulate替换为Summary平台。 这并没有消除复杂的名称问题,但确实在一个快速操作中创建了一个数据表,这在大多数情况下与Tabulate输出相同。 脚本处理复杂名称的作用是,列名称列表中每个元素周围的位置:Name()函数,直接指定JMP将函数的内容视为列名。 最后,将此列表传递到多变量平台以进行分析。
Names Default To Here( 1 );
dt = Data Table( "wpu10" );
/*tab1 = dt << Tabulate(
Add Table( Column Table( Grouping Columns( :series_id, :series_title ), Analysis Columns( :value) ), Row Table( Grouping Columns( :year) ) )
);
dtTab1 = tab1 << makeintodatatable;
dtTab1 << set name( "dtTab1" );*/
// Create the data table directly
dtTab1 = dt << Summary(
Group( :year ),
Sum( :value ),
Subgroup( :series_id, :series_title ),
Freq( "None" ),
Weight( "None" )
);
// Get Column names returns a list
colnameslist = dtTab1 << get column names( Continuous,string);
// Get rid of the Row Number column from the list
colnameslist = remove( colnameslist, 2, 1 );
// Create a new list adding the :Name() function around each column name
// to handle the complex names the summary gave them
thelist={};
For( i = 1, i <= N Items( colnameslist ), i++,
xx = colnameslist[i];
Insert Into( thelist, Parse( Eval Insert( ":Name(\!"^xx^\!")" ) ) );
);
// Run the correlations
dtTab1 << Multivariate(
Y( eval(thelist) ),
Estimation Method( "Pairwise" ),
Matrix Format( "Square" ),
Scatterplot Matrix( Density Ellipses( 1 ), Shaded Ellipses( 0 ), Ellipse Color( 3 ) )
);
另外,我会支持 @markbailey 在他的评论中,能够以交互方式进行分析。 如果这不是你要反复做的分析,为什么还要创建一个脚本。
Re:无法在多变量中获取列名非常感谢您的帮助!我最终点击了所有这一切。我今天早上试着听你的最后一条消息,但仍然有点丢失。列名可能肯定是个问题。此外,当我手动执行并转到dtTab1表然后转到分析>多变量方法>多变量JMP认为我想对dt表执行此操作。直到我第二次经历这个过程时,JMP意识到我想要在新桌子上做这件事。
我正在使用JMP 12所以我不知道这是否也会导致我的问题。
Re:无法在多变量中获取列名你能分享数据表样本吗?
Re:无法在多变量中获取列名是的,我所附的是我在你帮助过的代码中挂断的表格。我想从这个表(dtTab1)到相关系数表 - 就像从Analysis>多变量方法>多变量输出创建的那样。
正如我提到的那样,即使我接手手动操作它有点时髦。在创建dtTab1之后,第一次执行上面描述的步骤时,用于进行多变量分析的列的提示来自内部表(一列中的所有索引以及另一列中的名称)。如果你想要一个人,那就让我知道吧)