2015-11-24 43 views
1

我有一個使用SAS的僞代碼,我不知道如何執行,邏輯是這樣的:SAS僞代碼執行:如果VAR(t + 1)> VAR(t)然後輸出VAR(t)

如果在同一個代碼中,interest(t + 1)小於interest(t),則輸出coupon = interest(t),保留日期,代碼。在下面的例子中,它是觀察6.

obs. date code interest 
1 1/1/2015 1 0.2 
2 1/2/2015 1 0.5 
3 1/3/2015 1 1.9 
4 1/4/2015 1 2.5 
5 1/5/2015 1 3.8 
6 1/1/2015 2 2.1 
7 1/2/2015 2 0 
8 1/3/2015 2 0.1 
9 1/4/2015 2 0.2 
10 1/5/2015 2 0.3 

輸出樣本應該像之一:

obs. date code interest coupon 
1  1/1/2015  2 2.1  2.1 

obs. date code interest coupon 
1 1/1/2015 1  0.2 
2 1/2/2015 1  0.5 
3 1/3/2015 1  1.9 
4 1/4/2015 1  2.5 
5 1/5/2015 1  3.8 
6 1/1/2015 2  2.1  2.1 
7 1/2/2015 2  0 
8 1/3/2015 2  0.1 
9 1/4/2015 2  0.2 
10 1/5/2015 2  0.3 

實施例的編碼是非常感謝!

+0

您還應該提供輸出數據外觀示例。 –

+0

@RobertPenr​​idge謝謝。添加它。 –

+0

變量代碼如何進入?由於日期重置,所以似乎以某種方式對觀察進行分組。 – Reeza

回答

1

要將記錄與後續記錄進行比較,一種方法是將表格合併到自身上,第二個版本從記錄編號2開始。因此,table1中的記錄1將與table2中的記錄2等連接。您還需要重新命名table2中的變量以便進行比較。

data have; 
    infile datalines; 
    input dt ddmmyy10. code interest; 
    format dt date9.; 
datalines; 
1/1/2015 1 0.2 
1/2/2015 1 0.5 
1/3/2015 1 1.9 
1/4/2015 1 2.5 
1/5/2015 1 3.8 
1/1/2015 2 2.1 
1/2/2015 2 0 
1/3/2015 2 0.1 
1/4/2015 2 0.2 
1/5/2015 2 0.3 
; 
run; 

data want; 
    merge have 
     have (firstobs=2 keep=code interest rename=(code=code_1 interest=interest_1)); 
if code=code_1 and interest_1<interest then coupon=interest; 
drop code_1 interest_1; 
run; 
+0

這是一個聰明的主意,謝謝! –

0

我假設你正在尋找的是「如果利率在OBS N + 1小於上一記錄,則票面利率=利息」,則下面的代碼就可以了你,

data have; 
    infile datalines; 
    input dt ddmmyy10. code interest; 
    format dt date9.; 
datalines; 
1/1/2015 1 0.2 
1/2/2015 1 0.5 
1/3/2015 1 1.9 
1/4/2015 1 2.5 
1/5/2015 1 3.8 
1/1/2015 2 2.1 
1/2/2015 2 0 
1/3/2015 2 0.1 
1/4/2015 2 0.2 
1/5/2015 2 0.3 
; 
run; 

data want; 
    set have; 
    coupon=0.0; 
    /* Using the LAG() function check the previous record */ 
    if interest < lag(interest) then coupon=interest; 
run; 
+0

我不認爲這是正確的。您將2.1與3.8進行比較,但它們屬於不同的代碼(3.8是代碼1,2.1是代碼2)。 我相信OP是將2.1與下一個值0進行比較。 – Longfish

+0

是@Keith是正確的。關鍵是在每個代碼中找到值。但滯後函數的想法是非常有幫助的。謝謝! –