# Basic Summary Stats

## Version Info

Minimum Origin Version Required: Origin 8 SR0

## Description

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.

## Example

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
}
}