Ga naar inhoud
  • 0

mediaan


Rudy De Vrieze

Vraag

15 antwoorden op deze vraag

Aanbevolen berichten

  • 0

Zo, los uit de pols, zou ik zeggen:

1) selecteer de groep waarover het gaat

2) sorteer de records in stijgende of dalende volgorde

3) tel het aantal records

4) deel dat getal door twee en zet het resultaat weg in een global

5) ga dan naar die record

 

Dit moet eenvoudig te scripten zijn.

aangepast door Gast
Link naar reactie
  • 0

Ik gebruik (eigenlijk is het gebruikte) de volgende script voor het bepalen van de mediaan van het veld ‘Median_data’ binnen een gevonden reeks. Na het uitvoeren van de script is het global field Glob_Median gelijk aan de mediaan van de gevonden reeks (of dat hoop ik)

 

Je hebt wel een aantal velden nodig :

 

Glob_total (Global, Number)

 

Dit bevat het total aantal records van de gevonden reeks, zodat daarvan de ‘middelste(n)’ gevonden kunnen worden.

 

Glob_gotoRec (Global, Number)

Dit bepaald de positie (number) van de middelste record.

 

Glob_median1 (Global, Number)

 

Dit bevat de waarde van Median_data voor het eerste middelste record, Indien de gevonden reeks een even aantal records heeft.

 

Glob_Median (Global, Number)

 

Dit veld bevat de median van de gevonden reeks. Voor een reeks met oneven records zal het de logische mediaan geven, van het middelste record dus, bij een even aantal zal het de mathematische mediaan geven van de twee middelste records

 

De script "Calculate Median":

 

Perform Find [Restore]

-- Bepaald de te vinden records

 

Sort [Restore, No dialog]

-- Sorteer op het veld waarvan je de mediaan wilt (voor mij : Median_data ).

 

Set Field [Glob_total, Status(CurrentFoundCount) ]

 

Set Field [Glob_gotoRec, if (Glob_total = Int (Glob_total / 2) * 2, Glob_total / 2,

Int (Glob_total / 2 ) + 1 ) ]

-- Bewerking indien er een even of oneven reeks is

 

If [ Glob_total = ( Int (Glob_total / 2) * 2) ] – Controle voor even of oneven.

-- if even:

Goto Record [Glob_gotoRec] – dat is de eerste van de twee middelste

Set Field [Glob_median1, Median_data]

Goto Record [Next] – dat is de tweede van de twee middelste

Set Field [Glob_Median, (Glob_median1 + Median_data ) / 2 ]

 

Else

-- if oneven:

Goto Record [Glob_gotoRec]

Set Field [Glob_Median, Median_data]

 

End If

 

Ik ben even gaan kijken in een oude toepassing (FM2) en vandaaruit het geheel omgezet (tekst) voor FM3. In de versie FM2 gebruik ik nog (noodgedwongen) copy en paste en replace om bepaalde zaken te realiseren.Het geheel niet getest, maar iemand zal wel kunnen zeggen of het werkt ???

Link naar reactie
  • 0

The median is the specific member of a set of numbers which divides the set into two equal sets. In other words, half the remaining numbers are less than or equal to the median, while the other half are greater than or equal to the median.

 

Median: The middle value of a set of numbers arranged in order of increasing magnitude.

 

 

Odd Number of Measurements

x = [ 1 2 3 4 5 6 7 ]

median = 4

 

Even Number of Measurements

x = [ 1 2 3 4 5 6 7 8 ]

median = (4+5)/2= 4.5

The median, unlike the mean, is not affected by extreme data values. The median also divides the data so that it will leave half of all the data items greater than or equal to the median.

 

Dit komt uit een IAEA voorschrift.

Link naar reactie
  • 0

Voor degene die het zou kunnen gebruiken heb ik een kleine aanpassing gedaan van de ‘Mediaan’ script.

Het steunt op 5 global fields en met een calculatie veld kan aangegeven worden per record of dit boven, onder of op het gemiddelde zit.

Het ‘Mark’ veld kan aangepast worden volgens de toepassing, het krijgt dan de naam van het veld waarop de mediaan moet bepaald worden.

 

Volgende velden zijn nodig :

 

Mark Number

NrFoundRecords.g Global – Number

RecordCount.g Global – Number

Mark1.g Global – Number

Mark2.g Global – Number

Mediaan.g Global – Number

Position Calculation – text – unstored

If(Mediaan = “”,””,

Case(

Mark > Mediaan, “Hoger”,

Mark < Mediaan, “Lager”,

“Boenk oep”

))

 

En hier gaan we voor de script :

 

Allow User Abort – Off

 

Set Error Capture – On

 

1.Find All

 

2.Sort Sort Order

Restore sort order Mark (Ascending)

No dialog

3.Set Field NrFoundRecords.g

Calculation

Status(CurrentFoundCount)

 

4.Go to Record/Request/Page

First

 

5.Set Field RecordCount.g

Calculation

1

 

6.If Calcualtion

Mod(NrFoundRecords, 2) = 1

 

7.Loop

 

8.Exit Loop If Calculation

RecordCount.g = NrFoundRecords/2 + 0,5

 

9.Go to Record/Request/Page

Next

 

10.Set Field RecordCount.g

Calculation

RecordCount.g + 1

 

11.End Loop

12.Set Field Mediaan

Calculation

Mark

 

13.Else

 

14.If Calculation

Mod(NrFoundRecords, 2) = 0

 

15.Loop

 

16.Exit Loop if Calculation

RecordCount.g = NrFoundRecords/2

 

17.Go to Record/Request/Page

Next

 

18.Set Field RecordCount.g

Calculation

RecordCount + 1

 

19.End Loop

 

20.Set Field Mark1.g

Calculation

Mark

 

21.Go to Record/Request/Page

Next

 

22.Set Field Mark2.g

Calculation

Mark

 

23.Set Field Mediaan

Calculation

Average (Mark1.g, Mark2.g)

 

24.End If

 

25.End If

 

26.Unsort

 

 

Mijn logica :

 

Stap 1 het vinden van alle records en stap 2 zet het veld NrFoundRecords.g gelijk aan het aantal gevonden records. Stap 3 sorteert volgens Mark en stap 4 vindt het eerste record van deze reeks, terwijl RecordCount.g gelijk wordt gesteld aan 1 in stap 5.

 

Vanaf hier moet de script in twee richtingen kunnen gaan, afhankelijk of er even of oneven records zijn.

Stap 6 gebruikt de modulo functie om te bepalen of NrFoundRecords.g oneven is.

Als dit zo is, zal stap 7 tot 11 een loop doen die gelijdelijk naar de volgende record zal gaan door RecordCount.g met 1 te verhogen tot de waarde van de middelste record bereikt is.

Stap 12 zet Mediaan gelijk aan de waarde van het veld Mark voor het middelste record.

 

De tweede richting wordt gevolgd vanaf de Else stap 13 als het veld NrFoundRecords even is, en dat wordt bevestigd door Mod(NrFoundRecords.g, 2) = 0.

 

Stap 14 to 19 is logisch als je ze vergelijkt met 6 – 11.

 

Stap 20 – 23 bevestigen dat, wanneer RecordCount.g = NrFoundRecords/2 bereikt is in de loop, de eerste van de middelste records gevonden is.

Vanaf hier is het eenvoudig, copy Mark, naar het volgende record gaan en ook copy Mark, het gemiddelde van deze twee geeft de mediaan.

 

De script eindigt met Unsort om de records terug in hun originele volgorde te zetten (indien nodig).

 

Het geheel is getest tot en met FM 5.0.

 

HTH

Link naar reactie
  • 0

Kan volgens mij véél simpeler, korter en met minder velden (ééntje extra):

 

-veld aanmaken "mediaan_c" (number)

 

-script aanmaken "set mediaan":

 

Sort [ Sort Order: punten (Ascending) ]

[ Restore sort order, No dialog ]

 

Replace Contents [ mediaan_c, Replace data:Calculation: , If(Mod( Status( CurrentFoundCount); 2 )=0;If(Status( CurrentRecordNumber) =

Int(Status( CurrentFoundCount)/2) or Status( CurrentRecordNumber) = Int(Status( CurrentFoundCount)/2)+1;punten/2;0);If(Status(

CurrentRecordNumber) = Int(Status( CurrentFoundCount)/2)+1;punten;0)) ]

[ No dialog ]

 

-veld aanmaken: "mediaan", summary, total of "mediaan_c".

 

HTH,

Stef

Link naar reactie

Doe mee aan dit gesprek

Je kunt dit nu plaatsen en later registreren. Indien je reeds een account hebt, log dan nu in om het bericht te plaatsen met je account.

Gast
Beantwoord deze vraag...

×   Geplakt als verrijkte tekst.   Plak in plaats daarvan als platte tekst

  Er zijn maximaal 75 emoji toegestaan.

×   Je link werd automatisch ingevoegd.   Tonen als normale link

×   Je vorige inhoud werd hersteld.   Leeg de tekstverwerker

×   Je kunt afbeeldingen niet direct plakken. Upload of voeg afbeeldingen vanaf een URL in

×
×
  • Nieuwe aanmaken...