This uses the ExtractOneGroup OriginC function discussed by CP in the topic referenced above. (Origin 7.5 SR1)
void sum_all_groups(int nGroupCol = 0, int nDataCol = 1)
{
Worksheet wks = Project.ActiveLayer();
Dataset dGroup(wks, nGroupCol);
vector<ushort> vRowMap;
vRowMap = dGroup;
Worksheet wResult;
wResult.Create();
wResult.AddCol();
wResult.AddCol();
wResult.Columns(1).SetName("Mean");
wResult.Columns(2).SetName("SD");
wResult.Columns(3).SetName("N");
wResult.Columns(2).SetType(OKDATAOBJ_DESIGNATION_ERROR);
BasicStats bsStat;
Data_sum(&dGroup,&bsStat);
int iMin = bsStat.min;
int iMax = bsStat.max;
int nGroup;
for(int i=iMin;i<=iMax;i++)
{
if( sum_one_group(wks, bsStat, vRowMap, i, nDataCol) )
{
wResult.SetCell(nGroup,0,i);
wResult.SetCell(nGroup,1,bsStat.mean);
wResult.SetCell(nGroup,2,bsStat.sd);
wResult.SetCell(nGroup,3,bsStat.N);
nGroup++;
}
}
}
int sum_one_group(Worksheet wks, BasicStats &bsStat, vector<ushort> vRowMap, int nGroupVal, int nDataCol)
{
vector vResult;
if( wks.ExtractOneGroup(vResult, nDataCol, vRowMap, 0, 0, vRowMap.GetSize()-1, nGroupVal) )
{
Dataset dOut;
dOut.Create(vResult.GetSize());
dOut = vResult;
Data_sum(&dOut,&bsStat);
return bsStat.N;
}
return 0;
}
Mike Buess
Origin WebRing Member
Edited by - Mike Buess on 03/02/2004 3:11:15 PM