Dies ist mein 1. Mal eine Frage in diesem Forum. Ich benutze SAS/Proc SQL seit ungefähr 4 Jahren, aber ich bin kein Code-Jedi, also bitte geben Sie detaillierte Antworten, und bin ziemlich neu bei Arrays, also verzeihen Sie, wenn meine Frage schlecht detailliert/erklärt ist. Ich bin 100% komfortabel mit einfachen Arrays im Allgemeinen. Aber ich habe eine sehr spezifische Herausforderung, die ich nicht herausfinden kann ... Schwer in Worte zu fassen, so kann dies lange umständlich werden, aber hier geht ...SAS-Array/Schleife Iterationsvariable
Für grundlegendes Verständnis von dem, was ich versuche zu erreichen, ist es etwas Ähnlich wie bei einer einfachen Darlehens-Amortisation, bei der der erste Betrag der ursprüngliche Kreditbetrag ist, sagen wir $ 10.000, Monat 2, ist der Saldo orig_ln_amt abzüglich einer neuen Kapital-/Zinszahlung abzüglich etwaiger zusätzlicher Zahlungen, die sich auf $ 9500, Monat 3 auf $ 9000 usw. belaufen .... Einfach für 1 Konto, aber ich baue ein Array, das in der Tat den prognostizierten verbleibenden Gesamtbetrag ergibt, wenn alle aktiven Konten für jeden Monat in die Zukunft zusammengerollt werden, also verwende ich ein Array, das sich in der Größe ändert jeden Monat basierend auf dem Alter der Konten.
Hier einige Beispiel-Code, den ich gehofft funktionieren würde:
DATA SAMPLE;
SET INPUT_DATA; 'HAS EACH OF THE 3 INPUT ARRAYS LAID OUT SIDE BY SIDE BY SIDE
ARRAY_ONE {193} ARRAY_ONE1-ARRAY_ONE193;
ARRAY_TWO {97} ARRAY_TWO1-ARRAY_TWO97;
ARRAY_THREE {97} ARRAY_THREE1-ARRAY_THREE97;
OUTPUT_ARRAY {193} OUTPUT_ARRAY1-OUTPUT_ARRAY193; 'PORTFOLIO BALANCE EACH FUTURE MONTH
DO I = 1 TO 193;
OUTPUT_ARRAY[I] = sum(of ARRAY_ONE[I]-ARRAY_ONE193) - sum(of ARRAY_TWO[I]-ARRAY_TWO97) - sum(of ARRAY_THREE[I]-ARRAY_THREE97);
END;
RUN;
Das Problem ist SAS nicht mag [I [Iteration Referenz innerhalb des Array-Berechnung. Ich habe auch versucht & Ich basiere auf einer Lösung, die ein anderer Online-Benutzer in, was ein ähnliches Problem schien. Die Logik macht Sinn und scheint, wie es in der Theorie funktionieren sollte, aber nicht ...
Also haben wir mussten manuell manipulieren und Code jedes der 193 Berechnungen:
OUTPUT_ARRAY1 = sum(of ARRAY_ONE1-ARRAY_ONE193) - sum(of ARRAY_TWO1-ARRAY_TWO97) - sum(of ARRAY_THREE1-ARRAY_THREE97);
OUTPUT_ARRAY2 = sum(of ARRAY_ONE2-ARRAY_ONE193) - sum(of ARRAY_TWO2-ARRAY_TWO97) - sum(of ARRAY_THREE2-ARRAY_THREE97);
...
OUTPUT_ARRAY97 = sum(of ARRAY_ONE97-ARRAY_ONE193) - sum(of ARRAY_TWO97-ARRAY_TWO97) - sum(of ARRAY_THREE97-ARRAY_THREE97);
OUTPUT_ARRAY98 = sum(of ARRAY_ONE98-ARRAY_ONE193);
...
OUTPUT_ARRAY193 = sum(of ARRAY_ONE193-ARRAY_ONE193);
wie es scheint sollte eine einfache Lösung sein, aber wir können es nicht herausfinden. Vielen Dank im Voraus für jede Hilfe, die Sie alle geben können.
Unabhängig von der Beantwortung Ihrer Frage: Ich würde Sie * dringend * dazu ermutigen, Ihre Datenstruktur neu zu formulieren. SAS (und jede andere Nicht-Matrix-Sprache) wird _Far_ besser machen, wenn Sie hier pro Zeile eine Zeile haben. – Joe
Was ist in den Arrays enthalten? Salden? Interesse? Verschiedene Monate? Warum unterschiedliche Längen? Bitte posten Sie ein Datenschnipsel. Ich sehe eine aggregierte SQL-Abfrage-Lösung. – Parfait
Gute Fragen ... Ein bisschen schwer zu beantworten, weil mein Beispiel von Darlehen amortisieren ist kein perfekter Vergleich und es wird ein wenig schlammig in den Details.Output = Resting Balance (geht 193 mos aus); Array1 = Bruttoverlust $ (193mos); Array2 = Auszahlungen (97mos); Array3 = Regelmäßige Zahlungen (97mos). Die Arrays sind unterschiedlich lang, weil es andere Ereignisse gibt, die während der gesamten Lebensdauer des Portfolios passieren ... – CraigD