PDA

Vollständige Version anzeigen : Median berechnen


Gast
22.06.2003, 23:20
Hallo,
ich möchte aus einer Menge von Datensätzen den Median berechnen. Bisher habe ich des Rätsels Lösung noch nicht gefunden. Als Aggregatfunktion scheint ja nur die Varianz bzw. StdAbweichung vorhanden zu sein. Für Hilfe bin ich sehr dankbar.

Viele Grüße Klaus

J_Eilers
22.06.2003, 23:45
Hallo Klaus,

meinst du nicht vielleicht den Mittelwert? Denn den Median zählst du doch aus. Und den Mittelwert kann man doch mit Access berechenen. Ist es eine Abfrage oder wie möchtest du das machen?

Greetz
Jan

Gast
23.06.2003, 07:16
Hallo Jan,
ich möchte mit Hilfe des Median die Plausibilität des Mittelwertes prüfen, da z.B. ein großer Ausreißer das Ergebnis verfälschen kannn. Für diese Aufgabenstellung ist der Median besser geeignet als die StdAbweichung. Der Median ist definiert als der Wert, der bei ber Hälfte aller Werte liegt. Ich möchte dies gerne als Abfrage machen.

Gruß
Klaus

Hondo
23.06.2003, 08:14
Hallo,
sollte eigentlich einfach sein.
1. zuerst die Daten aufsteigend sortieren.
2. wenn Anzahl der Daten ungerade, dann
Median = InStr(int(len(Daten)/2)+1, Daten, 1)

3. wenn Anzahl der Daten gerade, dann
Median = (InStr(len(Daten)/2, Daten, 1)+InStr(len(Daten)/2+1, Daten, 1))/2

Gruß Andreas

C. Palmetshofer
23.06.2003, 08:42
Hi,

versuche diese Funktion:

Function median(Tablename As String, FieldName As String)
Dim RS1 As Recordset, RS2 As Recordset
Dim cnt As Long, mCnt As Integer, i As Integer
Dim tmpVal As Double

Set RS1 = CurrentDb.OpenRecordset("SELECT count(1) from " & Tablename, DB_OPEN_SNAPSHOT)
If RS1(0) > 0 Then
'Mitte bestimmen
cnt = RS1(0) \ 2 + 1
mCnt = 2 - (RS1(0) Mod 2)
Set RS2 = CurrentDb.OpenRecordset("SELECT top " & cnt & " " & FieldName & " from " & Tablename & " order by " & FieldName, DB_OPEN_SNAPSHOT)
RS2.MoveLast
For i = 1 To mCnt
tmpVal = tmpVal + RS2(0)
RS2.MovePrevious
Next i
median = tmpVal / mCnt
RS2.Close
Else
median = Null
End If
RS1.Close

End Function


Bei Bedarf kann man auch noch eine Where-Klausel anfügen!

Gruss