News Artikel Foren Join Projekte List Links Random Über Redscope Previous Next Startseite › Foren › ETL & Base SAS Berechnung des Median bei klassifizierten Daten?!?! 7 September, 2012 - 15:16 — ollie_ Hallo Zusammen, Mir liegen klassifizierte Häufigkeitsverteilungen vor und ich möchte gerne den Median berechnen. Leider lässt sich der Median nicht ablesen, sondern nur näherungsweise berechen. Schritt 1: Bestimmung der Medianklasse m über die Positionsziffer n/2 Schritt 2: Lokalisierung des Medians Anwendung der Formel: Me=x_m^u+(n/2-H_(m-1))/h_m °(x_m^o-x_m^u) Positionsziffer : n/2 Klassenuntergrenze: x_m^u Klassenobergrenze: x_m^o Häufigkeit in der Klasse: h_m Kumulierte Häufigkeit der nächst unteren Klasse: H_(m-1) Daten: Unter Ober Mitte Klassen Total Total_kum 1 1 75 von 50 bis unter 100 15 15 2 2 150 von 100 bis unter 200 50 65 3 3 250 von 200 bis unter 300 80 145 4 4 350 von 300 bis unter 400 40 185 5 5 500 von 400 bis unter 600 40 225 6 6 800 von 600 bis unter 1000 20 245 Bei der Berechnung per Hand fällt die Positionsziffer 122,5 in die 3. Klasse und als Median erhalte ich 271,90. /*Positionsziffer Median*/ proc sql; select count(*)/2 as Position from work.class; Quit; /sascode> <pre> Wie geht man bei den weiteren Schritte am geschicktesten vor? Ich denke ich müsste als nächsten Schritt eine lookup Tabelle bauen, um die Positionsziifer eine Klasse Hat vielleicht jemand von euch einen Macro für diese Berechnung? </pre> Foren: ETL & Base SAS Log in or register to post comments Macrovariable verwenden Hallo ollie_ 10 September, 2012 - 14:45 — JanHeuer Testdatensatz: Data Test; infile cards; input Klasse m_u m_o h_m H_m_kum; cards; 1 50 100 15 15 2 100 200 50 65 3 200 300 80 145 4 300 400 40 185 5 400 600 40 225 6 600 1000 20 245 run; zuerst bestimmst du die Position des Medians und speicherst das Ergebnis in einer Macrovariable. Proc sql; select Max(h_m_kum)/2 into :h_m_kum from test; quit; Durchführung der Berechnung, wenn der kumululierte Wert GE der Position des Medians, Ausgabe und Abbruch der Berechnung. Data Klasse; retain alter_wert 1 pos &H_m_kum. ; set test; if h_m_kum >= Pos then do; median = M_u + (Pos - alter_Wert)/h_m * (M_o - m_u); output; stop; end; alter_wert = h_m_kum; run; Schöne Grüße Jan Log in or register to post comments Vielen hat hat mir sehr 14 September, 2012 - 10:57 — ollie_ Vielen hat hat mir sehr geholfen! Als nächsten Schritt möchte ich gerne den Modus berechnen: Modusklasse : mk Klassenuntergrenze: x_m^u Klassenobergrenze: x_m^o Häufigkeit in der Klasse: h_m Kumulierte Häufigkeit der nächst unteren Klasse: h_(m-1) Kumulierte Häufigkeit der nächst oberen Klasse: h_(m+1) Schritt 1: Festlegung der Modusklasse (Maximum der Häufigkeiten) Schritt 2: Lokalisierung des Modus Anwendung der Formel: Mod=x_m^u+(h_m-h_(m-1))/((h_m-h_(m-1) )+(h_m-h_(m+1) ) )°(x_m^o-x_m^u) Wie kann ich den Zeiger eine Position weiterrücken lassen, um den Wert nach dem Maximum zu bekommen? /*Festlegung Modusklasse*/ Proc sql; select Max(h_m) into :h_m_kum from Forderungen; /*Zeiger muss eine Position weiter!*/ quit; Data work.Modus; retain ganz_alter_wert 1 alter_wert 1 pos &H_m_kum. ; set work.Forderungen; if h_m_kum >= Pos then do; modus = m_u + (alter_Wert-ganz_alter_Wert)/((alter_Wert-ganz_alter_Wert)+(alter_Wert-pos))* (m_o - m output; stop; end; ganz_alter_wert=alter_wert alter_wert = h_m; run; Warum verschwindet trotz Verwendung von <sascode> die Formatierung? Log in or register to post comments