2017-02-22 1 views
0

Ich werde die vereinfachte Version von dem, was ich tun möchte, vorstellen. Ich weiß, wie man es leicht in SAS macht, aber nicht in Stata. Nehmen wir an, ich versuche eine "schlechte" Binärvariable = 1 zu erstellen, wenn eine Beobachtung als schlecht und 0 als schlecht eingestuft wird. Ich möchte zwei Klassifikationen haben, eine basiert auf echtem Einkommen und eine andere basiert auf echtem Konsum (dies sind Variablen im Datensatz).Was ist das Stata-Äquivalent dieses SAS-Makros?

würde das SAS Makro

%MACRO poverty_bin(type=, measure=) 
DATA dataset; 
    SET dataset; 
    IF &measure. <= poverty_line THEN poor&type. = 1 ELSE poor&type. = 0; 
RUN; 
%MEND 

%poverty_bin(type=con, measure=real_consumption); 
%poverty_bin(type=inc, measure=real_income); 

sein, die zwei Binärgrößen poor_con und poor_inc erstellen soll.

Ich habe keine Ahnung, wie man das in Stata macht. Ich habe versucht, so etwas wie dies zu tun, nur um festzustellen, ob foreach verschachtelt ist das, was ich suche:

foreach x of newlist con inc { 
    foreach y of newlist real_income real_consumption{ 
     display "`x' and `y'" 
    } 
} 

Aber es gibt eine Fehlermeldung „Variable real_income bereits definiert“

Antwort

0

Die Fehlermeldung, die Sie zitieren impliziert dass früherer Code, den Sie uns nicht zeigen, eine Variable real_income erstellt hat.

Ich weiß SAS nicht, aber ich kann Ihnen sagen, dass x

gen y = x <= 42 

schaffen wird eine numerische Variable gegeben eine Variable y mit dem Wert 1, wenn x <= 42 und 0 sonst.

Für eine andere solche Variable, verwenden Sie eine andere ähnliche Aussage. In Stata und vielleicht in jeder anderen Sprache erscheint das Einrichten einer verschachtelten Schleife oder das Definieren eines Programms anstelle von zwei Anweisungen direkt als Overkill. Für eine Anzahl neuer Variablen, die viel größer als 2 sind, ist das möglicherweise nicht wahr.

Für beliebig vorhandene Namen, neue Namen und Schwellenwerte ist es wahrscheinlich einfacher, Anweisungen einzeln auszugeben.

Dies ist dokumentiert. Siehe zum Beispiel 13.2.2 in [U] oder this FAQ.

+0

Hallo, danke für deine Antwort, aber ich weiß wie man eine solche binäre Variable erzeugt. Ich habe es nur als Beispiel gegeben, um meine Frage zu stellen, wie man ein Stata-Makro schreibt, das einem SAS-Makro entspricht. Ich weiß, dass sie beide ziemlich unterschiedliche Datenverarbeitungsprozedur haben. Ich bin vertraut mit dem Looping über eine Variablenliste und so in Stata, aber nicht vertraut mit, wie eine Liste der String-Variable, die in die Hauptmakrofunktion verkettet werden kann, zu integrieren. Ich weiß auch nicht, ob es eine Möglichkeit gibt, eine Makrofunktion in Stata wie in SAS zu definieren (wie ich hier "armut_bin" nenne). – Pukitta

+0

Wie bereits erwähnt, könnte man dafür eine Schleife oder sogar ein Programm schreiben. –