2015-06-24 27 views
3

我試圖將前一列中的值複製到當前列中(如果存在缺失值),但是我寫的代碼中存在錯誤。複製SAS中的上一列值

data X; 
input A B C D E; 
cards; 
1 . . . 2 
2 2 3 . . 
3 3 4 5 6 
4 4 4 2 . 
. . 6 . . 
; 
run; 

計劃

data Y; 
set x; 
array arr(5) a--e; 

array brr(4) b--e; 

do j=1 to dim(arr); 
do i =2 to dim(brr); 

    if brr(i)=. then brr(i)=arr(j); 
end; 
end; 
drop i j; 
run; 

但是我得到的輸出是

1 . 1 1 2 
2 2 3 2 2 
3 3 4 5 6 
4 4 4 2 4 
. . 6 6 6 

那是錯的! 我想要的輸出是這樣的:

1 1 1 1 2 
2 2 3 3 3 
3 3 4 5 6 
4 4 4 2 4 
. . 6 6 6 

代碼有什麼問題?

回答

4

你想要4 4 4 2 2而不是4 4 4 2 4

你只需要一個循環:

試試這個代碼:

data Y; 
    set x; 
    array arr(5) a--e; 

    do i=2 to dim(arr); 
     if arr(i)=. then arr(i)=arr(i-1); 
    end; 

    drop i; 
run; 

另外,不要忘記去思考什麼是這個代碼發生! 您可以嘗試檢查每一行和每一個:

  • 什麼是ARR(i)值?
  • 什麼是arr(i-1)值?
  • 結果是什麼預期? (相信問題已解決:))
+0

謝謝佩卡,! – user3658367

+0

沒問題,如果你對答案滿意,你可以用刻度線接受它。 – Pekka