2017-01-16 6 views
1

Ich habe viele Datensätze von 2001 bis 2014 für viele Jahre, die wie folgt aussehen. Jedes Jahr wird in einer Datei gespeichert, yXXXX.sas7bdat,Return-Datensatz der Spalte Summen in SAS

ID Weight X1 X2 X3 
1 100 1 2 4 
2 300 4 3 4 

und ich brauche einen Datensatz zu erstellen, in dem für jedes Jahr wir die (gewichtet) Summen von jedem der X Spalten haben.

X1 X2 X3 Year 
10 20 30 2014 
40 15 20 2013 

Ich wäre glücklich, diese in ein Makro zu implementieren, aber ich bin so unsicher Spaltensummen, und auch eine effiziente Art und Weise zu isolieren Ergebnisse zusammen zu befestigen (proc anhängen?)

Edit: Einschließlich ein Versuch.

%macro final_dataset; 

%do i = 2001 %to 2014; 

/*Code here which enables me to get the column sums I am interested in.*/ 

proc means data = y&i; 
weight = weight; 
X1 = SUM X1; 
X2 = SUM X2; 
X3 = SUM X3; 
OUTPUT OUT = sums&i; 
run; 

data final; 
set final sums&i; 
run; 

%end; 
%mend; 

Bearbeiten: Ein weiterer Versuch.

%macro final_dataset; 

%do i = 2001 %to 2014; 

/*Code here which enables me to get the column sums I am interested in.*/ 

proc means data = y&i SUM; 
weight = weight; 
var X1 X2 X3; 
OUTPUT OUT = sums&i; 
run; 

data final; 
set final sums&i; 
run; 

%end; 
%mend; 

Bearbeiten: Finale.

+0

post, was Sie bisher versucht haben. Die einfachste Methode besteht darin, wahrscheinlich alle Datasets anzufügen und dann proc für diesen Dataset zu verwenden. Keine Makros erforderlich. – Reeza

+0

@Reeza Danke für Ihren Kommentar. Ich bin mir bewusst, dass dies eine ziemlich lahme Frage war - Entschuldigung. Ich bin kein nativer SAS-Benutzer und habe den Tag damit verbracht, ein Skript eines Kollegen zu patchen, der momentan nicht verfügbar ist. Diese kleine Aufgabe spielt in einem größeren Skript eine untergeordnete Rolle - normalerweise verwende ich R für diese Art von Dingen. Es ist etwas zeitempfindlich, also würde ich jede Hilfe, die Sie geben könnten, schätzen. Ich werde meinen Hauptbeitrag aktualisieren, um zu zeigen, dass ich dies unabhängig versucht habe. – Ross

Antwort

1

Dies ist wahrscheinlich, was ich tun würde, fügen Sie alle Datensätze zusammen und führen Sie einen proc bedeutet. Sie haben nicht erwähnt, wie groß die Datensätze sind, aber ich nehme kleinere Daten an.

data combined; 
length source year $50.; 
set y2001-y2014 indsname=source; 
*you can tweak this variable so it looks how you want it to; 
year=source; 
run; 


proc means data=combined noprint nway; 
class year; 
var x1 x2 x3; 
output out=want sum= ; 
run; 
Verwandte Themen