****************************************************************************************** * GESIS - Leibniz-Institut für Sozialwissenschaften * German Microdata Lab (GML), Mannheim * Postfach 12 21 55 * 68072 Mannheim * Tel.: 0621/1246-265 Fax: 0621/1246-100 * E-Mail: gml@gesis.org ******************************************************************************************* */ -------------------------- VarMZ_A.SAS ------------------------------. 1. Programmname: VarMZ_T.SPS (URL http://www.gesis.org/fileadmin/upload/dienstleistung/tools_standards/mikrodaten_tools/Varianz/SP-Fehler/varmz_a.sas 2. Programmautoren: Ulrich Rendtel (rendtel@em.uni-frankfurt.de), Bernhard Schimpl-Neimanns (bernhard.schimpl-neimanns@gesis.org) 3. Zweck des Programms: Berechnung der Varianz des Regressionsschaetzers bei Randanpassung von Mikrozensus-Fallzahlen an die Bevoelkerungsfortschreibung im faktisch anonymisierten Mikrozensus (FAMZ) 1996. Hier am Beispiel des Merkmals Y "Ledige" (EF35=1) fuer die Subpopulation Z "Bevoelkerung in Privathaushalten" (EF506=1) 4. Weiterfuehrende Aufgabenbeschreibungen: Rendtel, Ulrich/ Schimpl-Neimanns, Bernhard: Varianzschaetzungen fuer den faktisch anonymisierten Mikrozensus. In: Jahrbuecher fuer Nationaloekonomie und Statistik, 220/6, 2000, S. 759-776. Rendtel, Ulrich/ Schimpl-Neimanns, Bernhard: Die Berechnung der Varianz von Populationsschaetzern im Scientific Use File des Mikrozensus.ZUMA-Nachrichten Nr. 48, 2001, S. 85-116 (URL http://www.gesis.org/fileadmin/upload/dienstleistung/ tools_standards/mikrodaten_tools/Varianz/SP-Fehler/zn48_10-bernhard.pdf ) Schimpl-Neimanns, Bernhard/ Rendtel, Ulrich: SAS-, SPSS- und STATA-Programme zur Berechnung der Varianz von Populationsschaetzern im Mikrozensus. ZUMA-Methodenbericht Nr. 2001/04. Mannheim. (URL http://www.gesis.org/fileadmin/ upload/dienstleistung/tools_standards/mikrodaten_tools/Varianz/SP-Fehler/tb01_04.pdf ) 5. Projektbeginn: Oktober 1999 6. Letzte Programmaenderung: 26. Januar 2001 7. Programmstatus: Getestet mit SAS fuer Windows V8.0 (Windows NT 4.0, SP6) und Mikrozensus 1996 (faktisch anonymisierte 70%- Substichprobe). 8. Erforderliche Programmeingaben: SAS-Datensatz basierend auf den Rohdaten des Mikrozensus. Das File sollte keine Missing Values enthalten. Schichtvariablen: EF1 Bundesland, EF708 Gemeindegroessenklasse, EF712 Gebaeudegroessenklasse Klumpenidentifikation (PSU): EF3 Auswahlbezirk Haushaltsidentifikation (HHNR): EF4 Haushaltsnummer Abgrenzung der Anpassungsklassen (ANP): EF32 Geschlecht, EF52 Staatsangehoerigkeit, EF127 Stellung im Beruf Gruppendefinition (GRUPPE): EF1 Bundesland, ANP Die bei anderen als in diesem Beispiel verwendeten Y-Variablen und Subpopulationen (Z) sowie insgesamt zu aendernden Programmschritte sind mit spitzen Klammern <> gekennzeichnet. 9. Grobe Programmstruktur: Einzeldaten einlesen und benoetigte Variablen definieren Berechnen des Regressionskoeffizienten B^ Ausgabe des SOLL/IST Vergleichs fuer die Gruppen und des gewichteten Gesamt-Totals ueber die Gruppen Berechnen der Hilfsgroesse u=g * (y - B^*1) Berechnen der Haushaltstotals der Hilfsgroesse Haushaltsbezogene Daten weiterverarbeiten Berechnen des Verhaeltnisses R=t_y / t_z Berechnen der Hilfsgroesse u=y - R*z Berechnen der PSU Totals und PSU Within Varianzen Berechnen der Schicht Totals, der Between Varianz und der Summe der gewichteten Within Varianzen Summation der Totals und Varianz Terme ueber die Schichten Berechnung der Standard Abweichungen Berechnung der auszugebenden Kennwerte Ausgabe der Kennwerte --------------------------------------------------------------------- */ LIBNAME '' ; DATA MZ_pers ; set (keep = ef1 ef3 ef4 ef32 ef52 ef127 ef708 ef712 ); PSU=ef3; HHNR=ef4; schicht = ef1*100 + ef708*10 + ef712; soll_ist=; Y =<(ef35 eq 1)*(ef506 eq 1)>; Y_W=y*soll_ist; Z =<(ef506 eq 1)>; if (ef52 eq 1 AND ef32 eq 1 AND ef127 ne 9 AND ef127 ne 10) then anp=1; else if (ef52 eq 1 AND ef32 eq 2) then anp=2; else if (ef52 ne 1 AND ef32 eq 1) then anp=3; else if (ef52 ne 1 AND ef32 eq 2) then anp=4; else if (ef52 eq 1 AND ef32 eq 1 AND ef127 eq 9) then anp=5; else if (ef52 eq 1 AND ef32 eq 1 AND ef127 eq 10) then anp=6; * ANPASSUNGSKLASSEN: 1=Deutsche Maenner, 2=Deutsche Frauen ; * 3=Auslaendische Maenner, 4=Auslaendische Frauen ; * 5=Zeit-/Berufssoldaten 6=Wehrdienstleistende ; GRUPPE=ef1*10+anp; LABEL PSU="Auswahlbezirksnummer (EF3)" HHNR="lfd. Haushaltsnummer im Auswahlbezirk (EF4)" SCHICHT="Bu.land * Gem.groesse * Geb.schicht" Y="" Y_W="Y - gewichtete Beobachtung " Z="" ANP="Anpassungsklassen" GRUPPE="Hochrechnungsgruppen"; run; /* Sortieren nach Gruppen */ Proc sort data=MZ_pers; by gruppe; run; /* Berechnen des Regressionskoeffizienten B_dach=t_y_g / t_x_g */ Proc means data=MZ_pers noprint; var y y_w Soll_ist; by gruppe; output out=Reg_koef Sum =t_y_g t_y_w t_s_i N =t_x_g t_x_w; data Reg_koef ; set Reg_koef ; B_dach =t_y_g/t_x_g; t_y_w=t_y_w*100/0.7; t_ist =t_x_w*100/0.7; t_soll=t_ist *t_s_i/t_x_g; run; /* Ausgabe des Soll/Ist Vergleichs fuer die einzelnen Gruppen */ Proc Print data=Reg_koef ; var gruppe B_dach t_ist t_soll t_y_w; run; /* Berechnung des gewichteten Gesamt-Totals ueber die Gruppen */ Proc means data=Reg_koef noprint; var t_y_w ; output out=erg_est sum= T_w ; run; /* Berechnen der Hilfsgroesse u=g*(y - B_dach*1) mit g=Soll_Ist */ data MZ_pers; Merge MZ_pers reg_koef; by gruppe ; u=soll_ist*(y-B_dach); /* Sortieren nach Schicht, PSU und Haushalts-Nr. */ Proc sort data=MZ_pers ; by schicht psu hhnr; /* Berechnung der Haushaltstotals von u */ Proc means data=MZ_pers noprint; var u; by schicht psu hhnr; output out=MZ_h sum=u_k; /* Berechnen der PSU Totals und PSU Within Varianzen */ Proc Means data=MZ_h noprint; var u_k; by schicht psu ; output out=psu_data sum=psu_u Var=psu_var N =psu_n; run; /* Berechnen der Schicht Totals, der Between Varianz und der Summe der gewichteten Within Varianzen */ Data PSU_data; set Psu_data; /* Einige PSUs sind im FAMZ nur mit E I N E M Haushalt repraesentiert - Rekodieren der Missing Values */ if Nmiss(PSU_Var)=1 then PSU_var=0; /* Berechnung n_i*S^2(s_i) */ N_Var=PSU_N*PSU_Var; Proc means data=PSU_data noprint; Var PSU_u N_var; by Schicht; output out=str_data sum=STR_u STR_with Var=Between N =STR_n ; run; /* Strata Varianz=100^2*0.99*n_(I,h)*S^2(n_I,h)/(0.7*0.7) [= V_betw] + 100*0.3/(0.7*0.7) * Summe n_i*S^2(s_i) [= V_with] */ Data STR_data; set STR_data; V_betw=10000*0.99*STR_N*Between/(0.7*0.7) ; V_with= 100*0.3*STR_with/(0.7*0.7); v=v_Betw + V_with ; /* Summation der Varianz Terme ueber die Strata */ Proc Means data=STR_data noprint; var V_betw V_with V; output out=ergebnis sum=V_betw V_with V; run; /* Berechnung der Standard Abweichungen und Ausdrucken der Ergebnisse */ data ergebnis ; merge ergebnis erg_est; t_w = t_w/1000; sig_V=sqrt(V)/1000; sig_B=sqrt(V_betw)/1000; sig_W=sqrt(V_with)/1000; rel=100*sig_V/t_w; LABEL t_w="gewichtetes Total (in 1000)" sig_v="Std.Fehler (in 1000)" sig_b="Std.Fehler Between-Teil (in 1000)" sig_w="Std.Fehler Within-Teil (in 1000)" rel = "relativer Std.Fehler (in %)"; run; Proc print data=ergebnis; var t_w sig_v sig_b sig_w rel; run;