<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />嗨,大家好,
有人可以帮我解决以下问题吗?
我想避免如下长公式:(每个元素都是一个列名!)
列(“标准”)<<添加列属性(
公式(
标准差(
:F23 m A,:F23 m C,:F23 m H,:F23 MA,:F23 MC,:F23 MH,:F23 NA,:F23 NC,:F23 NH,
:F30 m A,:F30 m C,:F30 m H,:F30 MA,:F30 MC,:F30 MH,:F30 NA,:F30 NC,:F30 NH,
:F36 m A,:F36 m C,:F36 m H,:F36 MA,:F36 MC,:F36 MH,:F36 NA,:F36 NC,:F36 NH,
:F37 m A,:F37 m C,:F37 m H,:F37 MA,:F37 MC,:F37 MH,:F37 NA,:F37 NC,:F37 NH,
:F49 m A,:F49 m C,:F49 m H,:F49 MA,:F49 MC,:F49 MH,:F49 NA,:F49 NC,:F49 NH,
:F53 m A,:F53 m C,:F53 m H,:F53 MA,:F53 MC,:F53 MH,:F53 NA,:F53 NC,:F53 NH,
:F87 m A,:F87 m C,:F87 m H,:F87 MA,:F87 MC,:F87 MH,:F87 NA,:F87 NC,:F87 NH ) ) );
干杯,
担
上述两种解决方案都可以,但请注意,对于 Ron 的解决方案,该公式可能仅在全局变量之前有效名称被重新定义或清除,例如当 JMP 会话关闭时。
以下是比较这两种方法的一些代码:
dt =打开( "$SAMPLE_DATA/大类.jmp" ) ;
名称= dt <<获取列名;
// Ron 的方法:公式中的变量未计算
dt <<新列( “标准” ,公式(标准开发(名称[ 4 :: 5 ]))) ;
// Ian 的方法:在设置公式之前评估变量
公式=评估表达式(标准开发(表达式(名称[ 4 :: 5 ]))) ;
dt <<新列( “标准 2” ,公式(名称表达式(公式))) ;
// 比较日志中的公式
打印( :标准<<得到公式,标准2 <<得到公式) ;
//清除变量定义并添加行。 只有 Std2 会识别变化
清除全局变量() ;
当前数据表() <<连接(
打开( “$SAMPLE_DATA/Students2.jmp” ) ,
附加到第一个表
) ;
你好dank77 ,
伊恩@JMP的解决方案是正确的。 但是,如果您正在寻找不那么严格的东西,您可以尝试以下方法。
假设公式所需的列都在一个范围内,您可以引入第一个和最后一个的数量,如下所示:
dt =打开( "$SAMPLE_DATA/大类.jmp" ) ;
名称= dt <<获取列名;
山口= dt <<新专栏( “标准” ) ;
山口<<设置公式(标准开发(名称[ 4 :: 5 ] )) ;
最好的,
罗恩
此代码“避免”,因为它使用当前选定的列,因此您不必键入。 请问这就是你要的吗?
执行“文件 > 新建 > 新脚本”,剪切并粘贴 JSL,然后执行“编辑 > 运行脚本”。
名称DefaultToHere ( 1 ) ;
// 做一个表
数控= 30 ;
dt =新表( “测试” ) ;
为了( C = 1 , C <=数控, C ++,
dt <<新列( “科尔” ||字符( C ) ,数字,连续的,公式(随机正常())) ;
) ;
dt <<添加行( 100 ) ;
// 选择一半的列
n =圆形的(数控/ 2 ) ;
C =随机索引( NCol ( dt ) , n ) ;
为了(一世= 1 ,一世<= n ,一世++,
柱子( dt , C [一世]) <<设置选定( 1 ) ;
) ;
// 运行此代码为表中当前选择的列的标准偏差创建一个新的公式列
选择列= dt <<获取选定列;
添加科尔=表达式( dt <<新列( “标准差” ,数字,连续的,公式(标准差( colsTBD )))) ;
代入(添加科尔,表达式( colsTBD ) ,评估(选择列)) ;
添加科尔;