Macros/Loops/Programs

Macros

  1. Definieren Sie einen Macro (local) a=1 und einen Makro b=2 und addieren Sie die beiden Locals
  2. local a = 1
    local b = 2
    di `a' + `b'
  3. Laden Sie die Daten http://www.farys.org/daten/bmi.dta (Auszug aus dem Allbus 2008). Definieren Sie einen Macro kontrollvariablen, der eine Liste von zwei Variablen enthält (alter sex). Schätzen Sie eine Regression mit bmi als AV und einkommen als UV und fügen Sie die zwe Kontrollvariablen in Form des Macros ein.
  4. local kontrollvariablen alter sex
    reg bmi einkommen `kontrollvariablen'
  5. Definieren Sie ein Subsample “Männer über 30” als Macro. Schätzen Sie erneut das OLS Modell aus 2. und verwenden Sie das Macro als if-Bedingung
  6. local men30 sex==1 & alter > 30
    reg bmi einkommen `kontrollvariablen' if `men30'

Loops

  1. Loopen (foreach) Sie über eine Liste (einkommen bmi) von abhängigen Variablen. Schätzen Sie innerhalb des Loops eine Regression mit den Kontrollvariablen als erklärende Variablen.
  2. foreach AV in einkommen bmi {
        reg `AV' `kontrollvariablen'
    }

    in verweist hier auf eine allgemeine Liste. Besser ist unter umständen eine “strukturierte” Liste macro of varlist vars:

    foreach AV of varlist einkommen bmi {
        reg `AV' `kontrollvariablen'
    }

    da dann die Syntax für varlist verwendet werden kann, z.B. Abkürzungen x* oder Blöcke von Variablen x-z.

  3. Loopen Sie über alle Ausprägungen von bjahre (levelsof). Schätzen Sie innerhalb des Loops den Zusammenhang zwischen Einkommen und BMI für die jeweilige Bildungsgruppe.
  4. levelsof bjahre, local(bildungsgruppe)
    foreach gruppe in `bildungsgruppe' {
        display _newline(2) "Bildungsgruppe = `gruppe' Jahre"
        reg bmi einkommen if bjahre==`gruppe'
    }

Programs

  1. Schreiben Sie ein kleines Programm (program define). Als Input soll das Programm zwei Parameter annehmen: Die Unter- und die Obergrenze für das Alter. Das Programm soll dann eine Regression reg bmi einkommen schätzen für ein Subsample der Befragten, deren Alter innerhalb der Altersspanne liegt. Testen Sie das Programm für ein paar Alterswerte.
  2. capture program drop subreg
    
    program define subreg
      syntax anything [if] [in]
      marksample touse
      local lower: word 1 of `anything'
      local upper: word 2 of `anything'
      assert `lower' <= `upper'
      reg bmi einkommen if inrange(alter,`lower',`upper')
    end
    
    subreg 30 40
    subreg 65 100

    Zu Beginn der Syntax wird das Programm gelöscht, da es nicht definiert werden kann, wenn es schon existiert (z.B. falls man in derselben Arbetissession etwas am Code des Programms ändert). Falls das Programm nicht existieren würde, würde program drop einen Fehler werfen subreg not found. Diesen Fehler widerum kann capture abfangen. Allgemein “probiert” Stata den Code hinter capture, bei einem Fehler wird jedoch nicht das Ausführen des do-Files abgebrochen. assert prüft Bedingungen auf Wahrheit und gibt ggf. eine Fehlermeldung zurück. In diesem Fall muss upper mindestens so gross sein wie lower.