Minimum Origin Version Required: Origin 8 SR0
The following examples show how to do statistics on the selected data and the output results. Please refer to ocmath_basic_summary_stats function for more details.
EX1
This example shows how to do basic statistics on a single region based on the minimum and maximum selected rows and columns. Multiple ranges are ignored:
void stats_on_selected_ranges_ex1() { Worksheet wks = Project.ActiveLayer(); if( !wks ) return; int c1, c2, r1, r2; int nRet = wks.GetSelection(c1, c2, r1, r2); // get the selected range if( WKS_SEL_NONE == nRet ) { out_str("No selection on active worksheet!"); return; } DataRange dr; dr.Add("X", wks, r1, c1, r2, c2); //construct a data range object by selection vector vData; dr.GetData(vData, 0); // get data from range object // minimum and maximum double dMin, dMax; vData.GetMinMax(dMin, dMax); printf("Statistics result of the selected ranges:\n"); printf("Min=%f, Max=%f\n", dMin, dMax); int nN; double dMean, dSD, dSum; nRet = ocmath_basic_summary_stats(vData.GetSize(), vData, &nN, &dMean, &dSD, NULL, NULL, &dSum); if(0 == nRet) { printf("N=%d, Mean=%f, SD=%f, Sum=%f\n", nN, dMean, dSD, dSum); } }
EX2
The following example shows how to do statistics on multiple ranges, whether contiguous or not. This example does aggregate statistics for all selected regions.
// Select multiple regions before running this code. void stats_on_selected_ranges_ex2() { Worksheet wks = Project.ActiveLayer(); if( !wks ) return; //Get selected regions vector<int> vR1, vC1, vR2, vC2; int nSelType = wks.GetSelectedRange(vR1, vC1, vR2, vC2); int nNumRegions = vR1.GetSize(); //vR1 & vC1 & vR2 & vC2 should have same size. printf("The number of regions you select is : %d\n", nNumRegions); //add data of each region into vData vector vData; for ( int iRegion = 0; iRegion < nNumRegions; iRegion++ ) { DataRange dr; dr.Add("X", wks, vR1[iRegion], vC1[iRegion], vR2[iRegion], vC2[iRegion]); vector vTemp; if ( dr && dr.GetData(vTemp, 0) ) { vData.Append(vTemp); } } //Get minimum and maximum double dMin, dMax; vData.GetMinMax(dMin, dMax); printf("Statistics result of the selected ranges:\n"); printf("Min=%f, Max=%f\n", dMin, dMax); int nN; double dMean, dSD, dSum; int nRet = ocmath_basic_summary_stats(vData.GetSize(), vData, &nN, &dMean, &dSD, NULL, NULL, &dSum); if(0 == nRet) { printf("N=%d, Mean=%f, SD=%f, Sum=%f\n", nN, dMean, dSD, dSum); } }
EX3
The following example shows how to do statistics on multiple ranges, whether contiguous or not. This example does individual statistics for each selected region.
void stats_on_selected_ranges_ex3() { Worksheet wks = Project.ActiveLayer(); if( !wks ) return; //Get selected regions vector<int> vR1, vC1, vR2, vC2; int nSelType = wks.GetSelectedRange(vR1, vC1, vR2, vC2); int nNumRegions = vR1.GetSize(); //vR1 & vC1 & vR2 & vC2 should have same size. printf("The number of regions you select is : %d\n", nNumRegions); vector vData; for ( int iRegion = 0; iRegion < nNumRegions; iRegion++ ) { DataRange dr; dr.Add("X", wks, vR1[iRegion], vC1[iRegion], vR2[iRegion], vC2[iRegion]); vector vTemp; if ( dr && dr.GetData(vTemp, 0) ) { vData.Append(vTemp); } //Get minimum and maximum double dMin, dMax; vData.GetMinMax(dMin, dMax); printf("Statistics result of the selected ranges:\n"); printf("Min=%f, Max=%f\n", dMin, dMax); int nN; double dMean, dSD, dSum; int nRet = ocmath_basic_summary_stats(vData.GetSize(), vData, &nN, &dMean, &dSD, NULL, NULL, &dSum); if(0 == nRet) { printf("N=%d, Mean=%f, SD=%f, Sum=%f\n", nN, dMean, dSD, dSum); } dr.Reset(); // Reset the data range vData.SetSize(0); // Reset the vector } }