在关联数组中执行计算评估你好,
我正在尝试获取一个函数来返回存储在关联数组中的标准偏差计算,我的代码将只返回关联数组的表达式而不是计算。你能告诉我我的代码有什么问题吗?
变异系数=最大限度(回复列表) ;// 我在文件中的 cvf 是 8
简历=关联数组() ;
简历[ 6个] =关联数组({(标准偏差( 5个, 6个, 7 , 8个, 9 , 10 ))}) ;
简历[ 8个] =关联数组({(标准偏差( 5个, 6个, 7 , 8个, 9 , 10 , 11 , 12 ))}) ;
简历[ 12 ] =关联数组({(标准偏差( 5个, 6个, 7 , 8个, 9 , 10 , 11 , 12 , 13 , 14 , 15 , 16 ))}) ;
CVC =功能( {参考} ,当地的({简历=关联数组({变异系数,评价(变异系数)} )} ,简历<<获取值(变异系数)) ;简历[参考]) ; ) ;
A = CVC (变异系数) ;
评估(评估表达式( A )) ;
显示(一);
这是我得到的输出:
a = 关联数组({{Std Dev( 5, 6, 7, 8, 9, 10, 11, 12 ), 1}}, 0);
这是我想要的输出:a= 2.5
回复:在关联数组中执行计算评估Summarize(age grp) 是两个列表的列表,与关联数组 (age grp) 不兼容。 此外,avg 和 sd 位于单个列表中,该列表与 Summary(age grp) 的交叉引用不兼容。 下面的代码正确对齐列表(不漂亮)
Names Default to Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
Summarize( sum = By( :age),sex grp= By (:sex), avg = Mean( :height ), sd = Std Dev( :height ) );
age grp = Associative Array( :age ) << Get Keys;
sex grp = Associative Array( :sex ) << Get Keys;
dt << New Column( "CV" ) << New Column( "AVG" ) << New Column( "SD" );
For( g = 1, g <= nitems(age grp), g++,
For(i =1, i<=nitems(sex grp), i++,
rows = dt << get rows where( :age == age grp[g] & :sex == sex grp[i] );
if( i==1,
:AVG[rows] = avg[ g*2-1 ];
:SD[rows] = sd[ g*2-1 ];
:CV[rows] = 100 * avg[ g*2-1 ] / sd[ g*2-1 ];
,
:AVG[rows] = avg[ g*i ];
:SD[rows] = sd[ g*i ];
:CV[rows] = 100 * avg[ g*i ] / sd[ g*i ];
)));
回复:在关联数组中执行计算评估谢谢,它有效
回复:在关联数组中执行计算评估不确定它何时出现,但仅供参考,我只是注意到在我的 JMP (13) 版本中,“CV”是“表格 > 摘要”提供的统计数据之一。 所以不需要公式列。
回复:在关联数组中执行计算评估对于您有两个分组变量这一事实,我深表歉意。 这个修改后的脚本将向您展示它是如何工作的。
Names Default to Here( 1 );
// Open example of a data table
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
// Estimate group statistics and group identities
Summarize( age sex grp = By( :age, :sex ), avg = Mean( :height ), sd = Std Dev( :height ) );
// Make a new columns for group result
dt << New Column( "Avg" ) << New Column( "SD" ) << New Column( "CV" );
// Iterate over groups
For( g = 1, g <= N Items( age grp ), g++,
// Convert :age level to match data type of identity
rows = dt << Get Rows Where( Char( :age ) == age sex grp[1][g] & :sex == age sex grp[2][g] );
:Avg[rows] = avg[g];
:SD[rows] =sd[g];
:CV[rows] = 100 * sd[g] / avg[g];
);
我不认为关联数组是识别组的最有效方法。 Summarize() 函数同时估计组统计信息并使用两个并行的组级别列表识别关联组。 在我看来,唯一的缺点是分组级别始终是字符串,即使原始级别是数字,例如本例中的 :age 级别。 所以我必须转换 :age 级别以用于获取目标行号的比较。
现在您有两种方法,包括 Ian 使用摘要命令\的解决方案。
回复:在关联数组中执行计算评估您可以尝试看看这是否更有效(我可能会这样):
Names Default To Here( 1 );
// Example table
dt = Open("$SAMPLE_DATA/Big Class.jmp");
// Edit to taste . . .
var = Column(dt, "height");
byVars = {Column(dt, "sex"), Column(dt, "age")};
// Use a summary table with formula column
dt2 = dt << Summary(Group(byVars), Mean(var), Std Dev(var));
Column(dt2, 4) << setName("Mean");
Column(dt2, 5) << setName("StdDev");
dt2 << New Column( "CV", Numeric, "Continuous", Format( "Percent", 12, 3 ), Formula(:StdDev/:Mean));
如果您需要原始表中的 CV 值,请使用“表 > 连接”。
回复:在关联数组中执行计算评估嗨,马克,
我使用您的示例并且能够正确获取行号,但平均值和标准偏差不正确。 而且我的表超过10,000行,计算有点慢。 你能告诉我我哪里做错了吗?谢谢。
名称默认为此处( 1个) ;
dt =打开( “$SAMPLE_DATA/Big Class.jmp” ) ;
总结(年龄组=经过( :年龄) ,性别组=经过( :性别) ,平均值=意思是( :高度) ,标准差=标准偏差( :高度) ) ;
年龄组=关联数组( :年龄) <<取得钥匙;
性别组=关联数组( :性别) <<取得钥匙;
dt <<新建专栏( “简历” ) ;
为了( G = 1个, G <=物品(年龄组) , G ++,
为了(我= 1个,我<=物品(性别组) ,我++,
行= dt <<获取行在哪里( :年龄==年龄组[ G ] & :性别==性别组[我]) ;
:简历[行] = 100 *标准差[我] /平均值[我] ;
)) ;
回复:在关联数组中执行计算评估谢谢,正是我要找的。谢谢。
蜀
回复:在关联数组中执行计算评估试试这个例子:
Names Default to Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
Summarize( age grp = By( :age ), avg = Mean( :height ), sd = Std Dev( :height ) );
age grp = Associative Array( :age ) << Get Keys;
dt << New Column( "CV" );
For( g = 1, g <= N Items( age grp ), g++,
rows = dt << Get Rows Where( :age == age grp[g] )
:CV[rows] = 100 * sd[g] / avg[g];
);
回复:在关联数组中执行计算评估一张数据表有三列,一列表示replicate number,另一列是replicate的信号输出,最后一列是dataID。我需要计算所有 dataID 的标准偏差。所有数据将只有两个副本,除了一种名为“Titer”的特定类型,并且根据生成数据的位置,数据类型“Titer”可以有 6、8 或 12 个副本。因此,我将这三个案例作为一个数组并将它们链接到复制列。
我的代码并将公式返回到标准偏差计算,但是,当我将它们放在新列中进行 CV 计算时,它什么也没做。
我能想到的另一种选择是使用 Tabulate 平台获取标准偏差并将它们放入数组中并将它们分配回新列。 有什么建议吗?
回复:在关联数组中执行计算评估让我们重新开始。
- 你想做什么?
- 你的数据是什么样的?
- 它是如何组织的?
- 您需要什么结果?
- 你想对结果做什么?
我不清楚您是否需要使用关联数组。
回复:在关联数组中执行计算评估我弄清楚了我的问题,但我有一个新问题。
我的关联数组是一个公式,我需要检索密钥来执行计算。
我的代码将返回 a,这是关于如何计算标准偏差的公式。但是当我将公式放入新公式时,新公式不执行计算。
A = CVC (变异系数) <<拿到钥匙(变异系数) ;
展示( A ) ;// 这是一个公式:
{标准开发(:仪器信号[行()+ 8],:仪器信号[行()+ 1],:仪器信号[行()+ 2],:仪器信号[行()+ 3],:仪器信号[行() + 4], :INSTRUMENT_SIGNAL[Row() + 5], :INSTRUMENT_SIGNAL[Row() + 6], :INSTRUMENT_SIGNAL[Row() + 7])};
但是一旦我将 a 放入下面的新公式中: a 就会进行计算。 请帮忙!
C醇2个<<设定公式(如果( :运行样本== “TITERC.NEG” , ( A / :平均信号) * 100 ) ,
如果( :运行样本[排()] == :运行样本[排() + 1个] ,
如果( :代表[排()] != 2个, (标准偏差( :仪器_信号[排() + 1个] , :仪器_信号[排()] ) / :平均信号) * 100 ) ) ) ;