Variable als Summe einer Variable erstellen....
Guten Tag,
ich arbeite im Rahmen meiner Diplomarbeit mit SAS.
Allerdings zum ersten mal und überhaupt, habe ich keine Programmierkenntnisse.
Habe mich jedoch hier und dort reingelesen und bin an folgender Stelle hängengeblieben:
Der folgende Code
data Cdo.unternehmenswerte;
DO i=1 TO 5;
Y=NORMAL(0);
e=NORMAL(0);
V=(0.3**(0.5))*Y+((1-0.3)**(0.5))*e;
D=probit(0.2);
if V LT D Then Ausfall=1;
Else Ausfall=0;
if Ausfall EQ 1 Then PV_Ll=(1-0.475)*exp(-0.04);
Else PV_Ll=0;
PV_Pp=(1+0.06)*exp(-0.04);
PDR=sum(PV_Ll)/sum(PV_Pp);
OUTPUT;
END;
drop i;
Proc print;
run;
gibt mir 5 Ausprägungen der Variable PDR. Ich benötige Sie jedoch nur einmal. PDR soll einfach die SUMME der Variable PV_Ll durch die SUMME der Variable PV_Pp teilen, aber nur einmal und nicht für jede Merkmalsausprägung von PV_Ll bzw. PV_Pp.
Wie kriegt man das hin?
Habe mir überlegt, die Summen von PV_Ll und PV_Pp als neue Variablen ausgeben zu lassen, um sie dann zu teilen, aber leider vergebens :( .
Kriege keine Variable als Summe einer anderen Variable hin.
Ich hoffe ich konnte mein Problem schildern?!?
Zudem hoffe ich mit meinem Problem im angebrachten Forum zu sein, sorry wenn nicht!
Über Ratschläge bin ich sehr dankbar!!!!
Mit besten Grüßen
barnaba111
ps: Habe diesen Thread in einem anderen Forum (Statistik & Data Mining) bereits gepostet, aber hier passt er womöglich besser rein.
- Anmelden oder Registrieren um Kommentare zu schreiben

data unternehmenswerte; DO
data unternehmenswerte;
DO i=1 TO 5;
Y=NORMAL(0);
e=NORMAL(0);
V=(0.3**(0.5))*Y+((1-0.3)**(0.5))*e;
D=probit(0.2);
if V LT D Then Ausfall=1;
Else Ausfall=0;
if Ausfall EQ 1 Then PV_Ll=(1-0.475)*exp(-0.04);
Else PV_Ll=0;
PV_Pp=(1+0.06)*exp(-0.04);
pv_llsum+pv_ll;
pv_ppsum+pv_pp;
PDR=sum(PV_Llsum)/sum(PV_Ppsum);
if i=5 then OUTPUT;
END;
drop i;
run;
Zunächst, VIELEN DANK...
...für die Antwort Muschik.
Könnten Sie bitte noch einige Kommentare zu Ihren Anweisungen geben?
Ich verstehe
pv_llsum+pv_ll;
pv_ppsum+pv_pp;
nicht so richtig bzw. bin mir nicht sicher, ob es einach eine Summen-Anweisung ist?!?
1000 Dank für Ihre Mühen!!!!
in pv_llsum steht dann die
in pv_llsum steht dann die Summe von pv_ll aus den vorangegangenen Zeilen!
Gruß Muschik
Weiteres Problem...
Hallo Muschik und alle anderen :-),
die i-Schleife stellt im unteren Programm die Anzahl von Schuldnern dar.
Nun habe ich gedacht, ich kann mit einer weiteren j-Schleife sowas wie Szenarien darstellen.
Das bringt mich jedoch zum nächsten Problem.
Ich benötige pv_llsum und pv_ppsum für jedes j.
Der Code:
data Cdo;
Do j=1 To 2;
DO i=1 TO 5;
Y=NORMAL(0);
e=NORMAL(0);
V=(0.3**(0.5))*Y+((1-0.3)**(0.5))*e;
D=probit(0.2);
if V LT D Then Ausfall=1;
Else Ausfall=0;
if Ausfall EQ 1 Then PV_Ll=(1-0.475)*exp(-0.04);
Else PV_Ll=0;
PV_Pp=(1+0.06)*exp(-0.04);
pv_llsum+pv_ll;
pv_ppsum+pv_pp;
PDR=sum(pv_llsum)/sum(pv_ppsum);
OUTPUT;
End;
End;
proc print;
run;
jedoch summiert pv_llsum und pv_ppsum über alle i für jedes j.
Ich brauche jedoch für jedes j quasi ein PDR, als Quotient aus [Summe pv_ll über alle i in dem jeweiligen j] geteilt durch [Summe pv_pp über alle i in dem jeweiligen j].
Nur so kann ich für jedes Szenario ein jeweiliges PDR bestimmen.
Ich vermute ich muss pv_llsum und pv_ppsum auf j beziehen, aber ich weiß leider nicht, falls das überhaupt der richtige Ansatz ist?!?
Danke im Voraus!!!
ps:
Kann man mit der Anweisung der Art
pv_llsum+pv_ll;
immer eine Variable als die Summe einer anderen deklarieren? Ist das eine "insider-Anweisung", denn ich habe das in keinem Buch oder ähnlichem gelesen.
Mit 0 initialisieren
Hallo,
"pv_llsum + pv_ll" ist die Kurzform von "pv_llsum = pv_llsum + pv_ll".
Um zu verhindern, dass in pv_llsum die Summe aller Durchläufe steht, muss man sie in der j-Schleife mit 0 initialisieren.
Do j=1 To 2;
/* initialisieren */
pv_llsum = 0;
pv_ppsum = 0;
DO i=1 TO 5;
...
pv_llsum = pv_llsum + pv_ll;
pv_ppsum = pv_ppsum + pv_pp;
PDR = pv_llsum / pv_ppsum;
End;
OUTPUT;
End;
RUN;
proc print;
run;
Schöne Grüße
Jan
"pv_llsum + pv_ll" ist die
"pv_llsum + pv_ll" ist die Kurzform von "pv_llsum = pv_llsum + pv_ll".
das stimmt nicht ganz "pv_llsum + pv_ll" ist eine implizite Summenanweisung über die Zeilen, wohingegen
"pv_llsum = pv_llsum + pv_ll" nur über einen Datensatz die Summe bildet.
Wenn Sie es also in der Form "pv_llsum = pv_llsum + pv_ll" schreiben wollen müssen Sie zusätzlich mit der
RETAIN-Anweisung arbeiten also Retain PV_llsum PV_ppsum; in das Programm aufnehmen.
Ansonsten wie oben beschrieben.
Gruß B. MUschik
Hallo Herr Muschik,
Hallo Herr Muschik,
vielen Dank für die Information. Ich hatte mich schon gewundert, dass der ursprüngliche Code funktionierte, da pv_llsum nicht mit 0 initialisiert worden ist. Wäre meine Beschreibung des Sachverhaltes richtig gewesen, hätte zum Schluss ein Missing Value in pv_llsum stehen müssen, da jede Addition mit einem Missing Value wieder einen Missing Value als Ergebnis liefert.
Schöne Grüße
Jan