2016-04-18 6 views
0

Ich habe einen Datensatz x = (1,4,7,8,10, ................. ..) welches diese zufälligen Werte hat. Ich möchte den Median des Datensatzes finden und ihn dann in einem Anrufsymput speichern, damit ich den Unterschied jeder Beobachtung vom Median finden kann.Speichern Median eines Datensatzes und damit für die Berechnung verwenden

Was ist die Funktion, um den Median dieses Datensatzes zu finden, indem Sie nur den Variablennamen angeben?

Ich möchte die Daten im folgenden Format:

X X-median 
1 1-median 
4 4-median 
7 7-median 
8 8-median 
10 10-median 

Antwort

1

Sie es nicht in einer Makrovariablen verwenden. Kombinieren Sie es einfach als Datensatz.

proc means data=sashelp.class noprint; 
    var age; 
    output out=age_median median(age)=age_median; 
run; 

data class_fin; 
    if _n_=1 then set age_median(keep=age_median); 
    set sashelp.class; 
    age_minus_median = age - age_median; 
run; 

Wenn Sie einen Dataset auf diese Weise festgelegt (eine eine Zeile Datensatz mit if _n_=1) Sie seinen Wert erhalten (s) auf jede Zeile auf dem Datensatz kopiert, Art wie wenn man es mit etwas universal von Wert verschmolzen.

+0

Danke für den Code. Der erste Teil lief gut! Aber der zweite Teil erstellt einige ausgegeben, so dass ich einen Anruf symput verwendet, um das Medianwert zu speichern und es dann auf den letzten Schritt angewendet. – user6037890

+2

@ user6037890 Sie möchten nicht die Angewohnheit haben, Makrovariablen zum Speichern von Daten zu verwenden. Die Verwendung einer bedingten Menge ist der richtige Weg, wie Sie gezeigt haben. Sie sollten herausfinden, "einige ausgegeben" und und beheben Sie es. –

0

Dies kann leicht in PROC SQL getan werden;

Angenommen, Sie haben die X-Werte in Tabelle A und eine neue Tabelle B erstellen:

PROC SQL; 
    CREATE TABLE B AS SELECT x,median(x) AS median,x-median(x) AS offset FROM A; 
QUIT; 
+0

Nur ab SAS 9.4. Zuvor funktionierte die Median-Funktion in proc SQL nicht wie erwartet. – Reeza

Verwandte Themen