Комментарии |
Программа c*Программа для расчета статистик без справочника *работает с данными представленными в мг/кг или других без *изменения величин Автор В.Д.Брусницын PROCEDURE stat SET TALK OFF SET NULL ON DEFINE POPUP OBJ_FIL PROMPT FILES LIKE *.DBF MESSAGE "ОТКРЫТЬ ФАЙЛ ДЛЯ РАСЧЕТА СТАТИСТИКИ"; TITLE "ОТКРЫТЬ ФАЙЛ ДЛЯ РАСЧЕТА СТАТИСТИКИ" ON SELECTION POPUP OBJ_FIL DEACTIVATE POPUP OBJ_FIL ACTIVATE POPUP OBJ_FIL USE PROMPT() NOUPDATE vorname = PROMPT() vorname = SUBSTR(vorname,1,LEN(vorname)-6) imia = "TM" imia1 = "ST" viv_file =vorname+ALLTRIM(imia)+'.dbf' viv_fil1 =vorname+ALLTRIM(imia1)+'.dbf' viv_fil2 =vorname+ALLTRIM(imia1)+'.xls' COPY TO &viv_file USE &viv_file IN 1 beg = f_fiel() ende = FCOUNT() FOR ii = beg TO ende pii=FIELD(ii) ALTER TABLE &viv_file ALTER COLUMN &pii N(16,9) ENDFOR CREATE TABLE &viv_fil1 (Элемент C(10), Кол_проб N(10), Кол_0 N(10), Кол_null N(10), Mин_неO N(8,3),; Максимум N(7,2), Медиана N(7,3), Ар_среднее N(7,3), АрСтандарт N(6,3), Ар_вариац N(5,2), СтАсимметр N(6,2), Ст_Эксцесс N(6,2),; lgСреднее N(7,3), lgСтандарт N(6,3), НесмещСр N(7,3), lgВариация N(5,2), lgАсимметр N(6,2), lgЭксцесс N(6,2), lg2_5 N(7,3), lg97_5 N(7,3)) SELE 1 COUNT TO NOB GO TOP FOR iii = beg TO ende pii = FIELD(iii) COUNT FOR EVAL(pii) = 0 TO noly COUNT FOR ISNULL(&pii)=.T. TO nully COUNT TO N FOR ISNULL(EVAL(pii))=.F. CALC MIN(EVAL(pii)) FOR EVAL(pii) # 0 AND ISNULL(&pii)=.F. TO mins CALC MAX(EVAL(pii)) TO MAXs REPL &pii WITH RAND()*mins FOR EVAL(pii)=0 CALC MIN(EVAL(pii)) FOR EVAL(pii) # 0 AND ISNULL(&pii)=.F. TO mins1 REPL &pii WITH mins1 FOR EVAL(pii)=0 med=medianal(iii, NOB, nully) SUM(EVAL(pii)) TO arsum FOR ISNULL(EVAL(pii))=.F. SUM(LOG10(EVAL(pii))) TO lgsum FOR ISNULL(EVAL(pii))=.F. arsred = arsum/N lgsred = lgsum/N SUM((EVAL(pii)-arsred)^2) TO sumkv FOR ISNULL(EVAL(pii))=.F. SUM((LOG10(EVAL(pii))-lgsred)^2) TO lgsumkv FOR ISNULL(EVAL(pii))=.F. SUM((EVAL(pii)-arsred)^3) TO sumkub FOR ISNULL(EVAL(pii))=.F. SUM((LOG10(EVAL(pii))-lgsred)^3) TO lgsumkub FOR ISNULL(EVAL(pii))=.F. SUM((EVAL(pii)-arsred)^4) TO sumsq FOR ISNULL(EVAL(pii))=.F. SUM((LOG10(EVAL(pii))-lgsred)^4) TO lgsumsq FOR ISNULL(EVAL(pii))=.F. arstand = SQRT(sumkv/(N-1)) lgstand = SQRT(lgsumkv/(N-1)) anesm = 10^(lgsred+1.15*lgstand^2) arvari = arstand/arsred lgvari = SQRT(10^(2.3*lgstand^2)-1) stasim = sumkub/N/arstand^3/SQRT(6/N) lgstasim = lgsumkub/N/lgstand^3/SQRT(6/N) stex = (sumsq/N/arstand^4-3)/2/SQRT(6/N) lgstex = (lgsumsq/N/lgstand^4-3)/2/SQRT(6/N) dov25= lgsred-1.96*lgstand/SQRT(N) dov975= lgsred+1.96*lgstand/SQRT(N) INSERT INTO &viv_fil1(Элемент, Кол_проб, Кол_0, Кол_null, Mин_неO,; Максимум, Медиана, Ар_среднее, АрСтандарт, Ар_вариац, СтАсимметр, Ст_Эксцесс,; lgСреднее, lgСтандарт, НесмещСр, lgВариация, lgАсимметр, lgЭксцесс, lg2_5, lg97_5); VALUES (pii, NOB, noly, nully, mins, MAXs, med, arsred, arstand, arvari, stasim , stex,; 10^lgsred, 10^lgstand, anesm, lgvari, lgstasim , lgstex, 10^dov25, 10^dov975) SELE 1 ENDFOR CLOSE ALL USE &viv_fil1 IN 1 COPY TO &viv_fil2 TYPE XL5 CLOSE ALL PROCEDURE medianal PARAMETERS numpole, Vsegos, nully usego = Vsegos- nully DIME county( Vsegos) pole=FIELD(numpole) GO TOP FOR aa = 1 TO Vsegos county(aa) = EVAL(pole) SKIP ENDFOR =ASORT(county) IF MOD(usego,2)=1 seredina=(usego+1)/2 + nully mediana=county(seredina) ELSE IF usego>2 seredina1=(usego)/2+nully mediana=(county(seredina1)+county(seredina1+1))/2 ELSE mediana=(county(1+nully)+county(2+nully))/2 ENDIF ENDIF RETURN mediana На главную страницу |
brusmann@mail.ru AbacusComp@yandex.ru © Василий Брусницын. Ивдель-Екатеринбург, 2010 г. Св. обл. Мотив +79045490809 |