home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 7 / 07.iso / c / c129 / 1.ddi / SUMSTATS.C < prev    next >
Encoding:
C/C++ Source or Header  |  1990-01-08  |  2.6 KB  |  118 lines

  1. # include <math.h>
  2. # include <stdlib.h>
  3.  
  4. void SortSumData(float *dataset,int numrow)
  5. {
  6.    int j;
  7.    int k;
  8.    float TempX;
  9.    char abort;
  10.  
  11.    if ( numrow <= 1 )
  12.       return;
  13.    for ( j = 0; j <= numrow - 1; ++j ) {
  14.       abort = 0;
  15.       TempX = dataset[j];
  16.       k = j - 1;
  17.       while ( ! (abort) && (k >= 0) ) {
  18.          if ( TempX < dataset[k] ) {
  19.             dataset[k + 1] = dataset[k];
  20.             k = k - 1;
  21.          }
  22.          else {
  23.             abort = 1;
  24.          }
  25.       }
  26.       dataset[k + 1] = TempX;
  27.    }
  28. }
  29.  
  30. void CalculateMode(float *dataset, int numrow, float *mode)
  31. {
  32.    char Even;
  33.    int Num;
  34.  
  35.    Even = 1;
  36.    if ( numrow % 2 != 0 ) {
  37.       Even = 0;
  38.    }
  39.    SortSumData(dataset,numrow);
  40.    if ( Even ) {
  41.       Num = numrow / 2;
  42.       (*mode) = (dataset[Num] + dataset[Num + 1]) / 2;
  43.    }
  44.    else {
  45.       Num = numrow / 2 ;
  46.       (*mode) = dataset[Num];
  47.    }
  48. }
  49.  
  50. void SumMinMax( float *dataset,int numdat,float *minval,
  51.                  float *maxval, float *range)
  52. {
  53.    int i;
  54.  
  55.    (*minval) = dataset[0];
  56.    (*maxval) = dataset[0];
  57.    for ( i = 1; i <= numdat-1; ++i ) {
  58.       if ( dataset[i] < (*minval) ) {
  59.          (*minval) = dataset[i];
  60.       }
  61.       if ( dataset[i] > (*maxval) ) {
  62.          (*maxval) = dataset[i];
  63.       }
  64.    }
  65.    (*range) = (*maxval) - (*minval);
  66. }
  67.  
  68. void MatMean(float *datary, int numrow, float *sumx,float *mean)
  69. {
  70.    int i;
  71.  
  72.    (*sumx) = 0.0;
  73.    for ( i = 0; i <= numrow-1; ++i ) {
  74.       (*sumx) = (*sumx) + datary[i];
  75.    }
  76.    (*mean) = (*sumx) / numrow;
  77. }
  78.  
  79. void MatStd(float *datary, float mean,int numrow,
  80.             float *variance, float *stddev)
  81. {
  82.    int i;
  83.    int j;
  84.    float xsqr;
  85.  
  86.  
  87.    xsqr = 0.0;
  88.    for ( i = 0; i <= numrow-1; ++i ) {
  89.      xsqr = xsqr + datary[i]*datary[i];
  90.    }
  91.    (*variance) = (xsqr - numrow * mean*mean) / (numrow - 1);
  92.    (*stddev) = sqrt(fabs((*variance)));
  93. }
  94.  
  95. void SummaryStats(float *dataset, int numobs, int numcol,
  96.               float *minima, float *maxima, float *range,
  97.               float *sumxx, float *mean,float *variance,
  98.               float *stddev, float *semean, float *mode)
  99. {
  100.    int i;
  101.    int j;
  102.    float *tempv;
  103.  
  104.    tempv = (float *) calloc(numobs*4,4);
  105.  
  106.    for ( j = 0; j <= numcol-1; ++j ) {
  107.       for ( i = 0; i <= numobs-1; ++i ) {
  108.          tempv[i] = dataset[i*numcol+j];
  109.       }
  110.       CalculateMode(tempv,numobs,&mode[j]);
  111.       SumMinMax(tempv,numobs,&minima[j],&maxima[j],&range[j]);
  112.       MatMean(tempv,numobs,&sumxx[j],&mean[j]);
  113.       MatStd(tempv,mean[j],numobs,&variance[j],&stddev[j]);
  114.       semean[j] = stddev[j] / sqrt(numobs);
  115.    }
  116.    free(tempv);
  117. }
  118.