Let me try to restate this a bit, to see if I understand you correctly.
You want to store all of the values for a given field into an array. You then want to perform various array functions on this. Correct?
This is very possible, and not even all that tricky once you know the technique. However, you need to be aware that there are some timing issues involved. You may need to become very familiar with WhileReadingRecords, WhilePrintingRecords, and EvaluateAfter. Brian's book has an excellent section on these.
In order to accomplish this, you need to create a global array variable, use ReDim Preserve on each record to expand it, and then store the value of the current field. Your formula would look something like:
Global StringVar Array X;
//You can use NumberVar or anything else, as required.
ReDim Preserve X[RecordNumber];
//ReDim Preserve establishes the size of the array, without dropping existing data.
//RecordNumber is an existing Crystal function that gives the number of the current record.
//As you move to each new record, the RecordNumber will increment by 1.
X[RecordNumber] := {MyReport.MyField}
//This stores the current value in the new slot in the array.
You can then run any array functions on this you might need. You should, ideally, use these functions in the report footer, to ensure that all records are read into the array. However, you can try using WhileReadingRecords on this formula, and WhilePrintingRecords on the calculation formula, which should work.