Zugriff auf bestimmte Zeilen einer SAS Datentabelle in sehr großen Datensätzen
Hi,
ich bin ein sehr unerfahrener Nutzer mit SAS und habe mein Problem bzw Lösung im Forum nicht gefunden.
Ich habe eine SAS Datentabelle mit mehreren Spalten und Zeilen.
Ich möchte nun den Hill-Schätzer berechnen nach der Formel:
Y= 1/k * Summe(von i=1 bis k) über log (x mit Index N-i+1) - log(x mit Index N-k)
Ich habe dafür zwei Schleifen erstellt:
Do while(N_Gesamt<N_Min);
if Beobachtung=N_Gesamt then Wert=C_MEAN;/*N_Gesamt ist mein Index N-i+1(die Spalte,mit der dazugehörigen Zeile), Wert soll die Spalte sein aus der ich aus der richtigen Zeile auslesen will)und der in der inneren Schleife geändert wird*/
if Beobachtung=N_Min then Wert2=C_MEAN;/*wie bei N_Gesamt* bleibt in der inneren Schleife fest*/
logN_Gesamt=log(Wert);
logN_Min=log(Wert2);
sum=sum+(logN_Gesamt-logN_Min);/*Aufsummierung der ausgerechneten log Werte*/
N_Gesamt=N_Gesamt+1;
end;
x=(sum/N_Min);/*in jedem Schritt aktuelles Gamma*/
sum=0;
N_Gesamt=1;
N_Min=N_Min+1;
output;
end;
run;
Beobachtung C_MEAN 1 5987.465 2 5476.98 3 5300.73 4 4999.12 5 4700.23 6 4500
Nun soll mein Prog im 1. Durchlauf die Summe über die Differenz von dem log(C_MEAN)(von Beobachtung 1) und dem log(C_MEAN)(von Beobachtung 2) errechnen.
Im 2. Durchlauf soll mein Prog die Summe über die Differenz von dem log(C_MEAN)(von Beobachtung 1)und dem log(C_MEAN)(von Beobachtung 3)und die Differenz von log(C_MEAN)(von Beobachtung 2)und dem log(C_MEAN)(von Beobachtung 3) usw.
das ganze dann durch die akuelle Anzahl geteilt, also im 1 Schritt k=2, im 2. k=3 usw.
Mein Problem ist, dass ich nicht weis wie ich explizit Zeilen anspreche und diese dann auch dynamisch Durchlafen lassen kann,so dass er zB von Zeile 5 wieder zur Zeile 1 springt, ohne IML zu benutzen.
Es sind sehr große Datensätze, die aus eine SAS Datei eingelesen werden.
Ich hoffe ich konnte mein Problem einigermaßen verständlich schildern und würde mich über einige baldige Antwort sehr freuen.
Vielen Dank im Voraus
Martin
