在關聯數組中執行計算評估你好,
我正在嘗試獲取一個函數來返回存儲在關聯數組中的標準偏差計算,我的代碼將只返回關聯數組的表達式而不是計算。你能告訴我我的代碼有什麼問題嗎?
變異係數=最大限度(回复列表) ;// 我在文件中的 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 ) ) ) ;