這是我第一次在這個論壇上提問。我已經使用SAS/Proc SQL大約4年了,但我不是一個代碼Jedi,所以請給出詳細的答案,並且對於數組來說是相當新的,所以請原諒,如果我的問題沒有詳細解釋。一般來說,我是100%舒適的建築/使用簡單的陣列。但我有一個非常具體的挑戰,我無法弄清楚......難以置信的話,所以這可能會長時間的囉嗦,但這裏...SAS數組/循環迭代變量
對於基本瞭解我想要完成的事情,它有點類似於第1個月的簡單貸款攤銷,餘額爲原始貸款金額,比如說是10,000美元,第2個月的餘額是orig_ln_amt減去任何新的本金/利息支付減去任何額外支付導致可以說9500美元,第3個月結果9000美元等....易於1帳戶,但我建立一個數組,實際上給出了所有活動帳戶在將來每個月彙總到一起時預測的總餘額餘額,所以我使用的數組大小發生了變化每個月基於帳戶的年齡。
下面是我希望將工作的一些示例代碼:
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;
問題是SAS不喜歡陣列計算裏面的[I [迭代參考。我也試過&我基於另一個在線用戶收到的解決方案似乎是類似的問題。該邏輯是有道理的,似乎像它應該在理論工作,但不...
因此,我們不得不手動操作和每個代碼193次計算的:
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);
好像有應該是一個簡單的解決方案,但我們無法弄清楚。在此先感謝您提供的任何幫助。
分開回答你的問題:我會*強烈*鼓勵你重新配置你的數據結構。如果您在這裏每個時間段有一行,SAS(以及其他任何非矩陣語言)將會使_Far_更好。 – Joe
數組中包含什麼?餘額?利益?不同的月份?爲什麼不同長度?請張貼一小段數據。我看到一個聚合的SQL查詢解決方案。 – Parfait
好問題...有點難以回答,因爲我的貸款比較例子不是一個完美的比較,它在細節上有點混亂。輸出=剩餘餘額(出局193 mos); Array1 =總損失$(193mos); Array2 =收益(97mos); Array3 =定期付款(97mos)。 陣列是不同的長度,因爲還有其他事件發生在投資組合的生命... – CraigD