# Aggregieren von Microm-Daten

**URL:** <https://forum.lifbi.de/t/aggregieren-von-microm-daten/3722>\
**Category:** NEPS\
**Tags:** ptargetmicrom, datenaggregation, sc6, regionaldaten\
**Created:** [4. Februar 2020 um 14:16 UTC](https://forum.lifbi.de/t/aggregieren-von-microm-daten/3722 "2020-02-04T14:16:34Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![Leonie](https://forum.lifbi.de/letter_avatar_proxy/v4/letter/l/96bed5/32.png) [@Leonie](https://forum.lifbi.de/u/Leonie)\
**Post date:** [4. Februar 2020 um 14:16 UTC](https://forum.lifbi.de/t/aggregieren-von-microm-daten/3722/1 "2020-02-04T14:16:34Z")

</div>

Liebes NEPS-Forum,

ich arbeite unter anderem mit den Microm-Daten. Hier interessieren mich vor allem die Variablen mgm\_k\_dom (dominantes Milieu), mgs\_k\_dom (dominantes Submilieu), alq\_p\_quote und alq\_k\_quote (Arbeitslosenquoten).

Mein Problem ist nun, dass es ebendiese Variablen nur auf PLZ-8-Ebene gibt, nicht aber auf PLZ-, oder Gemeindeebene. Ich brauche eine repräsentative Stichprobe pro ID\_regio (mit anderen Worten: es sollten mindestens 5-10 Personen in der gleichen Einheit wohnen). Leider gibt es auf PLZ-8-Ebene oft aber nur eine oder zwei Personen pro ID\_regio.

Ich habe mir deswegen überlegt, die PLZ-8-Infos auf PLZ- oder Gemeinde-Ebene zu aggregieren (sodass alle PLZ-8\_IDs ihrer PLZ zugeordnet werden) und von diesen Aggregaten dann einen ungewichteten Durchschnitt zu berechnen. Das dominante Milieu, das am häufigsten PLZ-8 Ebene vorkommt, soll dann das dominante Milieu auf PLZ- oder Gemeinde- Ebene sein.

Wenn man sich die ID\_regios auf PLZ-8 und PLZ-Ebene (oder Gemeinde) anschaut, kann man auch ungefähr erkennen, welche PLZ-8-Nummern in einer PLZ (oder einer Gemeinde) enthalten sind. Nur bin ich mir unschlüssig, wie ich vorgehen muss.

Ich hoffe, ich habe mich einigermaßen verständlich ausgedrückt. Herzlichen Dank schon einmal für Eure Vorschläge.

VG,

Leonie

---

<div class="post-metadata">

**Author:** ![tobias.koberg](https://forum.lifbi.de/user_avatar/forum.lifbi.de/tobias.koberg/32/57_2.png) [@tobias.koberg](https://forum.lifbi.de/u/tobias.koberg)\
**Post date:** [5. Februar 2020 um 08:54 UTC](https://forum.lifbi.de/t/aggregieren-von-microm-daten/3722/2 "2020-02-05T08:54:39Z")

</div>

Liebe Leonie,

dir muss dabei klar sein, dass die PLZ-Ebene nicht deckungsgleich mit der Gemeindeebene ist, d.h., es gibt Gemeinden, die mehrere Postleitzahlen haben, und umgekehrt erstrecken sich Postleitzahlgebiete manchmal über mehrere Gemeinden. Mit einer 1:1 Aggregation kommst du hier nicht hin.

Da es sich ja aber um Kontextinformation handelt, ist es natürlich möglich, aus den vorliegenden Werten auf PLZ(8)-Ebene einen aggregierten Wert für alle Personen aus einer Gemeinde zu bilden. Ob das Sinn macht, musst du letztlich inhaltlich entscheiden und begründen. Eine Möglichkeit, dass zu tun, wäre z.B. (mit einigen Implikationen):

```auto
use ID_t wave regio ID_regio mgm_k_dom using "SC6_pTargetMicrom_O_10-0-1", clear

* Nur Welle 6 behalten und nur die PLZ-8 und Gemeindeebene
keep if wave==6 & regio>=4

* Die Werte aus der PLZ-8-Ebene in die Gemeindeebene kopieren
bysort ID_t (regio): replace mgm_k_dom=mgm_k_dom[_n-1] if missing(mgm_k_dom)

* nur noch Gemeindeebene behalten
keep if regio==5

* Daten innerhalb einer Gemeinde-ID aggregieren
bysort ID_regio: egen mgm_k_dom_median=median(mgm_k_dom)

```

Falls du mehrere Wellen betrachten willst, wird die Syntax natürlich komplexer. Auch handelt es sich bei mgm\_k\_dom eigentlich um eine nominalskalierte Variable, wie du diese aggregieren möchtest, müsstest du inhaltlich begründen (der Median oben ist nur ein Beispiel).

Gutes Gelingen weiterhin,  
Tobias

---

<div class="post-metadata">

**Author:** ![Leonie](https://forum.lifbi.de/letter_avatar_proxy/v4/letter/l/96bed5/32.png) [@Leonie](https://forum.lifbi.de/u/Leonie)\
**Post date:** [15. März 2020 um 17:07 UTC](https://forum.lifbi.de/t/aggregieren-von-microm-daten/3722/3 "2020-03-15T17:07:21Z")

</div>

Lieber Tobias,

herzlichen Dank für diesen Vorschlag, so hat es geklappt.

Ich habe beim Aggregieren auf Gemeindeebene allerdings den Modus der Variable mgm\_k\_dom genommen, sodass das Milieu stehenbleibt, das in einer Gemeinde am häufigsten vorkommt. Problem ist hier natürlich, dass es viele Gemeinden gibt, wo der Modus nicht eindeutig zugeordnet werden kann, weil es mehrere gibt.

Deswegen hatte ich die Idee, den Modus von dem Milieu zu behalten, das in der Gesamtheit relativ gesehen überwiegt.  
Fiktives Beispiel:

![problem](https://forum.lifbi.de/uploads/default/original/1X/ea361fc93551fd0355fd764c5ce04a40a71d10d8.png)

In diesem Beispiel gibt es keinen eindeutigen Modus. Die Variable N pro Milieu gibt an, wie viele Personen insgesamt (aus dem ganzen sample) einem Milieu beiwohnen. Ich möchte nun „hed“ als neuen Modus behalten, weil N hier größer ist als für „bum“. Ich habe verschiedene Dinge ausprobiert, es aber irgendwie nicht ganz hinbekommen.

Für einen Tip wäre ich sehr dankbar! 🙂

Viele Grüße,

Leonie

---

<div class="post-metadata">

**Author:** ![tobias.koberg](https://forum.lifbi.de/user_avatar/forum.lifbi.de/tobias.koberg/32/57_2.png) [@tobias.koberg](https://forum.lifbi.de/u/tobias.koberg)\
**Post date:** [17. März 2020 um 14:11 UTC](https://forum.lifbi.de/t/aggregieren-von-microm-daten/3722/4 "2020-03-17T14:11:45Z")

</div>

Liebe Leonie,

um den Modus anstatt des Medians zu berechnen musst du den Befehl oben nur leicht anpassen:

```auto
bysort ID_regio: egen mgm_k_dom_mode=mode(mgm_k_dom)

```

Der Modus-Befehl in Stata bringt außerdem einige Optionen mit, so z.B. _maxmode_ und _minmode_. Dann wird bei Gleichstand der größte bzw. kleinste Wert genommen. Groß/klein wird allerdings definiert durch den (numerischen) Wert, den die Variable hat. Unter Umständen ist die Variable schon zumindest ordinalskaliert, dann macht das vielleicht Sinn. Wenn du eine eigene Logik in die Wertereihenfolge bringen möchtest (so wie du oben schreibst z.B. nach der Gesamthäufigkeit in der Population), wäre eine Möglichkeit z.B. an die obige Syntax anzuschließen mit:

```auto
preserve
* behalte nur die Variable mgm_k_dom
keep mgm_k_dom
** Missings rauswerfen
keep if !missing(mgm_k_dom) & mgm_k_dom>0
** Gesamtanzahl in der Population errechnen
bysort mgm_k_dom: gen n = _N
** Liste auf die tatsächlichen 10 Einträge reduzieren
duplicates drop
** nach der Häufigkeit sortieren
sort n
** neue Variable erstellen, bei der 1=Wert mit der geringsten Häufigkeit
gen mgm_k_dom_n = _n
** Label von der ursprünglichen Variable übernehmen
decode mgm_k_dom, gen(label)
labmask mgm_k_dom_n, values(label)

** Liste zwischenspeichern und an den Ausgangsdatensatz anspielen
keep mgm*
tempfile mgm
save `mgm'
restore
merge m:1 mgm_k_dom using `mgm', keep(master match) nogen

** Modus aus der neu sortierten Variablen mit der Option maxmode errechnen
bysort ID_regio: egen mgm_k_dom_maxmode=mode(mgm_k_dom_n), maxmode

```

Viele Grüße,  
Tobias
