通过循环连接相等的 jmp 数据集(脚本)我有 100 个结构相同的数据集。 它们都包含一个 ID 和一个常量/字段,其中包含该数据集的名称。
连接它们(格式“long”)很容易。
现在我需要将它们合并为“宽”格式,这同样容易吗?
我想使用该常量作为每个 JMP 数据集的前缀,但我怎样才能让它在循环中工作。
有什么建议吗?
非常感谢和亲切的问候
新手
回复:通过循环连接相等的 jmp 数据集(脚本)我无法想象这些数据集代表什么或生成的组合数据集的用途。 这些信息可能会帮助我们更好地解决您的问题。 如果数据集在结构上是相同的并且只包含重复的常量,那么在我看来,对于您的问题有更有效的数据结构和数据方法。
那么,您将在 JMP 中使用组合数据集做什么?
回复:通过循环连接相等的 jmp 数据集(脚本)考虑到您提供的新信息,这是对我的原始脚本的修改。
您可能还想研究使用您的关联数据表,并使用
表==>拆分
它可以让你非常接近你想要的
Names Default To Here( 1 );
// Create example data tables to be used in the merging
dt = Open( "$SAMPLE_DATA/Blood Pressure.jmp" );
constants = "ABCDEFGHIJKLMNOP";
dt << delete columns( {"Subject", "Dose"} );
dt << New Column( "ID", character, formula( Char( Row() ) ) );
dt << Go To( :ID );
dt << Move Selected Columns( To First );
For( i = 2, i <= N Cols( dt ), i++,
Current Data Table( dt );
dt2 = dt << subset( selected rows( 0 ), columns( :ID, Column( i ) ) );
Column( dt2, 2 ) << set name( "Value1" );
dt2 << New Column( "Value2", formula( Floor( :Name( "Value1" ) + Random Integer( 5 ) ) ) );
dt2 << New Column( "Constant", character, set each value( Substr( constants, i - 1, 1 ) ) );
);
Wait( 0 );
Close( dt, nosave );
// Merge the tables together
// Get the table Names
tableList = {};
For( i = 1, i <= N Table(), i++,
Insert Into( tableList, Data Table( i ) << get name )
);
theConstant = Column( Data Table( tableList[N Items( tableList )] ), "Constant" )[1];
Data Table( tableList[N Items( tableList )] ) << New Column( theConstant || "_ID", character, formula( :ID ) );
Column( Data Table( tableList[N Items( tableList )] ), "Value1" ) << set name( theConstant || "_Value1" );
Column( Data Table( tableList[N Items( tableList )] ), "Value2" ) << set name( theConstant || "_Value2" );
// Loop across the tables and using Update put them back together
For( i = N Items( tableList ) - 1, i >= 1, i--,
theConstant = Column( Data Table( tableList[i] ), "Constant" )[1];
Data Table( tableList[i] ) << New Column( theConstant || "_ID", character, formula( :ID ) );
Column( Data Table( tableList[i] ), "Value1" ) << set name( theConstant || "_Value1" );
Column( Data Table( tableList[i] ), "Value2" ) << set name( theConstant || "_Value2" );
Data Table( tableList[N Items( tableList )] ) << Update( With( Data Table( tableList[i] ) ), Match Columns( :ID = :ID ) );
);
回复:通过循环连接相等的 jmp 数据集(脚本)不管出于什么原因,我周五下午的帖子似乎迷路了……
这就是你在火车上工作时付出的代价,或者看起来是这样。
我有 100 个数据集,每个数据集包含一个不同的常量:
例如
数据集1
ID 常数值 1 值 2
1 A 123 123
2 123 123
数据集2
1 B 456 456
2 乙 456 456
数据集3
1 C 789 789
2 C 789 789
我想要的只是将它们放入具有以下结构的单个数据集中:
A_ID A_CONSTANT A_VALUE1 A_VALUE2 B_ID B_CONSTANT B_VALUE1 B_VALUE2
1 A 123 123 1 B 456 456
2 A 123 123 2 B 456 456 等,
我看到有两种方法可以到达那里:
(1)先给每个数据集中的每一列添加一个前缀,然后按ID合并它们,或者
(2) 首先包含所有数据集,然后使用常量级别作为前缀转置/翻转/循环它们(但是,我发现 JMP 不喜欢混合数据类型)
任何想法如何到达那里... ?
非常感谢任何帮助
新手
回复:通过循环连接相等的 jmp 数据集(脚本)嗨,TX,
我目前无法访问 JMP(我正在旅行),但结果应该是这样的。
现在,我自己看看结构,我认为连接,然后翻转/循环连接表可能是一种简单的方法(ID 并不那么重要)。 但是,我仍然想了解这是否可以通过最简单的(宏)循环来解决。
文件1:
ID 常数值
1 AB 123
2 AB 456
文件2:
ID 常数值
1 定义 123
2 定义 456
...
文件 100:
ID 常数值
1 Z 123
2 Z 456
CONSTANT的“循环”
期望的结果
AB_ID AB_Constant AB_Value DEF_ID DEF_ 常数 DEF_Value ... Z_ID Z_ 常数 Z_Value
1 AB 123 1 DEF 123 ... 1 Z 123
2 AB 456 2 DEF 456 ... 2 Z 123
回复:通过循环连接相等的 jmp 数据集(脚本)我不太清楚您希望输出数据表是什么样子,但是,这是一个简单的示例,它将合并数据表,类似于您描述的结构
Names Default To Here( 1 );
// Create example data tables to be used in the merging
dt = Open( "$SAMPLE_DATA/Blood Pressure.jmp" );
dt << delete columns( {"Subject", "Dose"} );
dt << New Column( "ID", character, formula( "A" || Char( Row() ) ) );
dt << Go To( :ID );
dt << Move Selected Columns( To First );
For( i = 2, i <= N Cols( dt ), i++,
current data table(dt);
dt2 = dt << subset( selected rows( 0 ), columns( :ID, Column( i ) ) );
dt2 << New Column("Table Name", character, set each value(dt2<<GET name=""></GET>