/* Diese Datei: panel_1213_v2.sas (06.02.2018) https://www.gesis.org/missy/materials/MZ/tools/panel/panel_1213_v2.sas Dateiformat: Dos/Windows. Zeichensatz: Windows-1252. */ /* ============================================================================== Zusammenführung der Daten Mikrozensus Scientific Use File 2012 und 2013 zu einem Panel Siehe Herter-Eschweiler/Schimpl-Neimanns (2018): Möglichkeiten der Verknüpfung von Mikrozensus-Querschnittserhebungen ab 2012 zu Panels. Bonn/Mannheim. https://www.gesis.org/missy/files/documents/MZ/panelbildung_suf2012.pdf 3. Panelbildung 3.2 Version 2 (Quersschnittorientierung) Für die Analyse von Netto-Veränderungen oder Kumulation von Querschnittsdaten ------------------------------------------------------------------------------ Programmstruktur 1 Aufbereitung SUF 2012 Erstellung des Personenidentifkators mit Kennung des Jahresüberhangs Prüfung auf doppelte IDs 2 Aufbereitung SUF 2013 Erstellung des Personenidentifkators ohne Kennung des Jahresüberhangs Prüfung auf doppelte IDs und Datenbereinigung 3 Files untereinander Stellen (long format) Ermittlung der Anzahl der Sätze mit Angaben zu 2012 oder 2013 pro idpersx 4 Files nebeneinander stellen (wide format) 5 Hinweis auf zusätzliche Identifikatoren Programmautoren: Robert Herter-Eschweiler, Bernhard Schimpl-Neimanns ============================================================================= */ * Verzeichnis der Daten ; libname p12 "" ; libname p13 "" ; * Verzeichnis der Formate ; libname library "" ; * Keine Formate verwenden, ggf. auskommentieren ; * OPTIONS NOFMTERR; * 1 Aufbereitung SUF MZ 2012 Variablenauszug ; data p12.suf12_2; set "" (keep = EF1 /* Bundesland */ EF3 /* Nr. des Auswahlbezirks (systemfrei) */ EF4 /* Nr. des Haushalts im Auswahlbezirk (systemfrei) */ EF5b /* Jahresüberhang aus dem Vorjahr */ EF12 /* Berichtsquartal */ EF63 /* Personennummer */ EF5a /* Nr. der Person im Haushalt (systemfrei) */ EF30 /* Bevölkerung: Haupt- oder Nebenwohnsitz */ EF31 /* Bevölkerung: Privathaushalte */ EF45 /* Zuzug (i. d. letzten 12 Monaten) */ EF46 /* Geschlecht */ EF47 /* Geburtsjahr */ EF451 /* Selber Wohnsitz (vor einem Jahr) (FB) */ EF952 /* Standardhochrechnungsfaktor Jahr (in 1000) - neuer Hochrechnungsrahmen */ ID /* Identifikationsnummer */ ) ; * Generiere Personenidentifikator mit Kennung des Jahresüberhangs ; idpersx = strip(putn(ef1,"Z2.0")) /* Bundesland */ || strip(putn(ef3,"Z6.0")) /* Nr. des Auswahlbezirks (systemfrei) */ || strip(putn(ef4,"Z3.0")) /* Nr. des Haushalts im Auswahlbezirk (systemfrei) */ || strip(putn(ef5b,"Z2.0")) /* Jahresüberhang aus dem Vorjahr */ || strip(putn(ef12,"Z1.0")) /* Berichtsquartal */ || strip(putn(ef63,"Z2.0")) /* Personennummer */ ; label idpersx= "ID Person (ef1 ef3 ef4 ef5b ef12 ef63)"; file = 1 ; label file= "Datenquelle"; rename id = id12; run; * n = 511946 ; * Doppelte IDs ? ; proc sort data=p12.suf12_2; by idpersx; run; data p12.suf12_2 (compress=yes); set p12.suf12_2; retain pnr; if (idpersx=lag(idpersx)) then pnr = pnr+1; if (idpersx ne lag(idpersx)) then pnr = 0; run; proc freq data=p12.suf12_2 ; table pnr / nocol norow nopercent missing; run; * OK; * =============================================================================; * 2 Aufbereitung SUF MZ 2013 - Variablenauszug; data p13.suf13_2 ; set "" (keep = EF1 /* Bundesland */ EF3 /* Nr. des Auswahlbezirks (systemfrei) */ EF4 /* Nr. des Haushalts im Auswahlbezirk (systemfrei) */ EF5b /* Jahresüberhang aus dem Vorjahr */ EF12 /* Berichtsquartal */ EF63 /* Personennummer */ EF5a /* Nr. der Person im Haushalt (systemfrei) */ EF30 /* Bevölkerung: Haupt- oder Nebenwohnsitz */ EF31 /* Bevölkerung: Privathaushalte */ EF45 /* Zuzug (i. d. letzten 12 Monaten) */ EF46 /* Geschlecht */ EF47 /* Geburtsjahr */ EF451 /* Selber Wohnsitz (vor einem Jahr) (FB) */ EF952 /* Standardhochrechnungsfaktor Jahr (in 1000) - neuer Hochrechnungsrahmen */ ID /* Identifikationsnummer */ ) ; * Generiere Personenidentifikator mit Kennung des Jahresüberhangs ; idpersx = strip(putn(ef1,"Z2.0")) /* Bundesland */ || strip(putn(ef3,"Z6.0")) /* Nr. des Auswahlbezirks (systemfrei) */ || strip(putn(ef4,"Z3.0")) /* Nr. des Haushalts im Auswahlbezirk (systemfrei) */ || strip(putn(ef5b,"Z2.0")) /* Jahresüberhang aus dem Vorjahr */ || strip(putn(ef12,"Z1.0")) /* Berichtsquartal */ || strip(putn(ef63,"Z2.0")) /* Personennummer */ ; label idpersx= "ID Person (ef1 ef3 ef4 ef5b ef12 ef63)"; file = 2 ; label file= "Datenquelle"; rename id = id13; run; * n = 525787 ; * Doppelte IDs pro Panelzeitpunkt (file)? ; proc sort data=p13.suf13_2; by idpersx file; run; proc summary data = p13.suf13_2 nway noprint; class idpersx file ; var ef1; output out = temp(drop= _type_ _freq_) n = n_file; run; * OK ; * ============================================================================; * 3 Files untereinander Stellen (long format); data p13.panel_1213_v2; set p12.suf12_2 p13.suf13_2 ; j1 = (file=1); /* 2012 */ j2 = (file=2); /* 2013 */ run; * n = 1037733 ; proc sort data=p13.panel_1213_v2; by idpersx file; run; * Satznummer pro idpersx ; data p13.panel_1213_v2 (compress=yes); set p13.panel_1213_v2; by idpersx; retain p1 0; if first.idpersx then p1 = 0; if file>=1 & file<=2 then p1 = p1 + 1; run; * Für jede idpersx Anzahl der Sätze mit Angaben zu 2012 oder 2013 ermitteln; proc summary data = p13.panel_1213_v2 nway noprint; by idpersx; var j1 j2; output out = temp(drop= _type_ _freq_) sum= t1 t2; run; data p13.panel_1213_v2 (compress=yes); merge p13.panel_1213_v2 temp ; by idpersx; t_insg = t1 + t2; label t1= "Angaben zu 2012"; label t2= "Angaben zu 2013"; label t_insg= "Angaben zu 2012 oder 2013"; run; /* Angaben zu 2012 und/oder 2013 - 1. Satz in idpersx */ proc freq data=p13.panel_1213_v2 (where = (p1=1)); tables t2 * t1 /norow nocol nopercent missing; run; /* Ergebnis: t2 t1 Angaben zu Angaben zu 2012 2013 0 1 Summe ------------------------------------------- 0 0 223871 223871 1 237712 288075 525787 ------------------------------------------- Summe 237712 511946 749658 */ /* Angaben zu 2012 und/oder 2013 - 1. Satz in idpersx - ohne Ausfallsätze */ proc freq data=p13.panel_1213_v2 (where = (p1=1 & ef63>0)); tables t2 * t1 /norow nocol nopercent missing; run; /* Ergebnis: t2 Angaben zu Angaben zu 2012 2013 0 1 Total ------------------------------------------- 0 0 204763 204763 1 200812 277364 478176 ------------------------------------------- Summe 200812 482127 682939 */ * ============================================================================; * 4 Files nebeneinander stellen (wide format); data tmp1; set p12.suf12_2 (rename = (ef1=ef1_a ef3=ef3_a ef4=ef4_a ef5b=ef5b_a ef12=ef12 ef63=ef63_a ef5a=ef5a_a ef30=ef30_a ef31=ef31_a ef45=ef45_a ef46=ef46_a ef47=ef47_a ef451=ef451_a ef952=ef952_a file=file_a)); run; data tmp2; set p13.suf13_2 (rename = (ef1=ef1_b ef3=ef3_b ef4=ef4_b ef5b=ef5b_b ef12=ef12 ef63=ef63_b ef5a=ef5a_b ef30=ef30_b ef31=ef31_b ef45=ef45_b ef46=ef46_b ef47=ef47_b ef451=ef451_b ef952=ef952_b file=file_b)); run; proc sort data=tmp1; by idpersx; run; proc sort data=tmp2; by idpersx; run; data p13.panel_1213_v2w (compress=yes); merge tmp1 (in=a) tmp2 (in=b); by idpersx; time1 = a; time2 = b; * Panelangaben; if id12^=. & id13=. then ptyp = 1; /* 12-- */ if id12= . & id13^=. then ptyp = 2; /* --13 */ if id12^=. & id13^=. then ptyp = 3; /* 1213 */ label ptyp= "Panelangaben"; run; * Angaben zu 2012 und/oder 2013 - Befragtensätze incl. Ausfallsätze und Paneltyp; proc freq data=p13.panel_1213_v2w ; tables time2 * time1 / nocol norow nopercent missing; tables ptyp /missing ; run; /* Ergebnis: Angaben zu 2012 / 2013; time1 time2 0 1 Summe ------------------------------------------- 0 0 223871 223871 1 237712 288075 525787 ------------------------------------------- Summe 237712 511946 749658 */ /* Panelangaben ptyp Häufigkeit Prozent Kum. n Kum. % | ~Bedeutung~ 1 223871 29.86 223871 29.86 | 12-- 2 237712 31.71 461583 61.57 | --13 3 288075 38.43 749658 100.00 | 1213 */ * ============================================================================; * 5 Hinweis auf zusätzliche Identifikatoren; /* In dieser Version der Datenverknüpfung werden Sätze von Personen und Haushalten des Jahresüberhangs als eigenständige Sätze behandelt. Um erkennen zu können, welche Sätze unabhängig vom Jahresüberhang "zueinander" gehören, sind folgende zusätzliche Identifikatoren sowie eine erweitere Sortierfolge hilfreich. */ data p13.panel_1213_v2w (compress=yes); set p13.panel_1213_v2w; idpsu = strip(putn(ef1,"Z2.0")) /* Bundesland */ || strip(putn(ef3,"Z6.0")); /* Nr. des Auswahlbezirks (systemfrei) */ label idpsu= "ID Auswahlbezirk (ef1 ef3)"; * ID Haushalte ohne Kennung für Jahresüberhänge; idhh = strip(putn(ef1,"Z2.0")) /* Bundesland */ || strip(putn(ef3,"Z6.0")) /* Nr. des Auswahlbezirks (systemfrei) */ || strip(putn(ef4,"Z3.0")); /* Nr. des Haushalts im Auswahlbezirk (systemfrei) */ label idhh= "ID Haushalt (ef1 ef3 ef4)"; * ID Person ohne Kennung für Jahresüberhänge; idpers = strip(putn(ef1,"Z2.0")) /* Bundesland */ || strip(putn(ef3,"Z6.0")) /* Nr. des Auswahlbezirks (systemfrei) */ || strip(putn(ef4,"Z3.0")) /* Nr. des Haushalts im Auswahlbezirk (systemfrei) */ || strip(putn(ef63,"Z2.0")); /* Personennummer */ label idpers= "ID Person (ef1 ef3 ef4 ef63)"; * Sortierung für Netto-Veränderungen: idpsu /* Auswahlbezirk */ idhh /* Haushalt (ohne Kennung für Jahresüberhänge) */ idpers /* Person (ohne Kennung für Jahresüberhänge) */ idpersx /* Person (mit Kennung für Jahresüberhänge) */ ptyp /* Panelangaben */ *; proc sort data=p13.panel_1213_v2w; by idpsu /* Auswahlbezirk */ idhh /* Haushalt (ohne Kennung für Jahresüberhänge) */ idpers /* Person (ohne Kennung für Jahresüberhänge) */ idpersx /* Person (mit Kennung für Jahresüberhänge) */ ptyp /* Panelangaben */ ; run;