home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Shareware Overload
/
ShartewareOverload.cdr
/
database
/
db3tips2.zip
/
DB3MATH.TXT
< prev
next >
Wrap
Text File
|
1986-07-01
|
7KB
|
171 lines
dBASE Statistical Functions
(PC Magazine Vol 5 No 1 January 14, 1986 Power User)
The program below calculates descriptive statistics from data
stored in a numeric field in a dBASE III file. The formula separately
sums the top and bottom one-sixth of a given range of figures, such as
scores. The sum of the lowest scores is subtracted from the sum of
the highest scores. The resulting value, divided by one-half of the
total number of entries, is an estimate of the standard deviation.
Editor's Note: One caution is in order. In the line
"STORE str(INT(A/6),1) TO R the value and width of R can vary from
1 to 3 digits, depending on the result obtained by dividing A by 6.
For greater accuracy in such cases, you should allow R to be larger
by changing the 1 in the formula to 2 or 3. However, if you allow
more than the exact number of digits for the variable R (by changing
1 to 2 or 3), the subsequent code "SKIP -&R" will not work properly.
Try it as written first, and then change the width of R only if it
appears that the answer for (A/6) requires more than a single digit
for accuracy.
SET HEADING OFF
SET SAFETY OFF
CLEAR
SET TALK OFF
? 'DESCRIPTIVE STATISTICS PROGRAM'
?
ACCEPT 'DATA FILE? ' TO FILE
ACCEPT 'FIELD? ' TO FIELD
USE &FILE
?
? 'STEP 1 OF 4: INDEXING RECORDS'
INDEX ON &FIELD TO INDEXF
USE &FILE INDEX INDEXF
? 'STEP 2 OF 4: COUNTING RECORDS'
COUNT FOR &FIELD <> 0 TO A
? 'STEP 3 OF 4: ADDING VALUES'
SUM &FIELD TO SUM
STORE str(INT(A/6),1) TO R
? 'STEP 4 OF 4: FINDING HIGH/LOW VALUES, MEDIAN, MEAN'
GO TOP
STORE &FIELD TO LOW
SUM &FIELD NEXT &R TO BSUM
GO BOTTOM
STORE &FIELD TO HIGH
SKIP -&R
SUM &FIELD NEXT &R TO TSUM
STORE A/2 TO MM
IF INT(MM)=MM
GO TOP
SKIP MM
STORE &FIELD TO B
SKIP -1
STORE &FIELD TO C
STORE (B+C)/2 TO MEDIAN
ELSE
GO TOP
SKIP INT(MM)
STORE &FIELD TO MEDIAN
ENDIF
STORE HIGH-LOW TO RANGE
STORE SUM/A TO MEAN
STORE (TSUM-BSUM)/(A/2) TO SD
STORE SD*SD TO VARIANCE
@ 11,1 SAY 'RESULTS'
@ 13,1 SAY "NO. OF ENTRIES'
@ 13,19 SAY A
@ 14,1 SAY 'HIGHEST VALUE'
@ 14,19 SAY HIGH
@ 15,1 SAY 'LOWEST VALUE'
@ 15,19 SAY LOW
@ 16,1 SAY 'RANGE'
@ 16,19 SAY RANGE
@ 17,1 SAY 'SUM'
@ 17,19 SAY SUM
@ 18,1 SAY 'MEDIAN'
@ 18,19 SAY MEDIAN
@ 19,1 SAY 'MEAN'
@ 19,19 SAY MEAN
@ 20,1 SAY 'STANDARD DEVIATION'
@ 20,19 SAY SD
@ 21,1 SAY 'VARIANCE'
@ 21,19 SAY VARIANCE
RELEASE FILE,FIELD,A,SUM,R,LOW,BSUM,HIGH,TSUM,MM,B,C
RELEASE MEDIAN,MEAN,SD,VARIANCE,RANGE
USE
RETURN
-----------------------------------------------------------------
Using Numeric Field in dBASE III Text
(PC Magazine Vol 5 No 1 January 14, 1986 Power User)
dBASE's PICTURE command works well for inputting numerically
formatted data to be printed in tabular reports. However, it leaves
blank spaces in the field when the number doesn't fill the field
completely. For this reason, PICTURE doesn't work very well in
applications where you need to drop the numbers into the middle of
text. This difficulty can be overcome by converting the number to a
trimmed character string. After doing so, however, you'll also need
to add commas and retain decimal points before you put the converted
numbers into form letters and other text. DOLLARS.PRG below can
perform both the conversions and reformatting for you automatically.
You can actually produce simple form letters entirely with dBASE
III. By using the SET MARGIN TO command the TEXT/ENDTEXT statements,
you can create a program that produces a convincing form letter
without resorting to external word processing programs.
Editor's Note: You can indeed use TEXT/ENDTEXT and SET MARGIN TO
to create programs for form letters. However, any macros embedded
within the text block defined by TEXT/ENDTEXT will not be expanded,
since dBASE ignores everything within these bracketing statements.
To insert the converted numbers created by DOLLARS.PRG in your dBASE
form letters, then, you must use @ SAY statements instead, before or
after the TEXT/ENDTEXT statements.
* This program will convert AMOUNT (a numeric field or memory variable
* with two decimal places) into the string variable MONEY for printing
* in text material. Leading blanks are removed and commas are inserted.
* This routine can not process numbers greater than 99,999,999.99.
* Numbers less than .01 will be rounded to 2 places.
*
* Declare public memory variable MONEY so that results can be passed
* back to the calling program
PUBLIC MONEY
* Convert numeric variable into string, insert commas and decimal point
MONEY=SUBSTR(STR(AMOUNT*100),1,2)+",";
+SUBSTR(STR(AMOUNT*100),3,3)+",";
+SUBSTR(STR(AMOUNT*100),6,3)+".";
+SUBSTR(STR(AMOUNT*100),9)
* Strip leading blanks and commas
DO WHILE SUBSTR(MONEY,1,1)=" " .OR. SUBSTR(MONEY,1,1)=","
MONEY=SUBSTR(MONEY,2)
ENDDO
* If money <.1 insert missing 0
IF SUBSTR(MONEY,1,2)=". "
MONEY=SUBSTR(MONEY,1,1)+"0"+SUBSTR(MONEY,3)
ENDIF
-----------------------------------------------------------------
Square Roots in dBASE Revisited
(PC Magazine Vol 5 No 3 Feb 11, 1986 Power User)
A previous article (PC Mag Vol 4 No 23 Power User) outlined a
dBASE program (SQRT.PRG) for finding square roots. The "exponentiation"
operator can be used to find the square root (or any other root or
power, including fractionals. For example:
N = 3
? N**1/2 (yields 1.73 as the square root)
N = 3.00000
? N**1/2 (Yields 1.73205 as the square root)
Editor's Note: Part of the reason for showing SQRT.PRG earlier
was that the program's origins were in Pascal. It thus served to
illustrate the kind of cross-programming possible between dBASE and
other programming languages. Use of the exponentiation operator is
limited to dBASE III; dBASE II does not have these useful extra
operators. Thus, for users of dBASE II, the only way to get square
roots easily is through a program like SQRT.PRG. Finally, this
example is wrong. To find a square root in dBASE III, you would
normally use the program's SQRT (?) operator (? is the number whose
root you're seeking). You can also use the ** operator followed by .5
to produce the same result. However, using the fraction 1/2 only
gives you one-half the number stored in N, not its square root.