2015-10-26 53 views
-1

在SAS中,如何重複變量的前4行直到最後一次觀察?它應該是這個樣子:在SAS中重複行

DATA Have; 
    INPUT HAVE$ ; 
    DATALINES; 
A 
B 
C 
D 
. 
. 
. 
. 
; 
PROC PRINT; RUN; 

DATA want; 
    INPUT WANT$ ; 
    DATALINES; 
A 
B 
C 
D 
A 
B 
C 
D 
; 
PROC PRINT; RUN; 
+1

這個問題似乎並不十分有用它目前要求的方式。你究竟在做什麼? – Joe

回答

0

這將使用當前數據集有:閱讀行的總數 1)輸出 2將前4個變量存儲在VARS(4)數組中。 3)使用mod函數循環訪問值0-3(+1),將數組元素拉回並循環輸出。

這將爲前4行的任何數據集和輸出的工作,從原來所需數量的行:)

DATA Have; 
INPUT HAVE$ ; 
DATALINES; 
A 
B 
C 
D 
. 
. 
. 
. 
; 
proc print; RUN; 

DATA WANT; 
array VARS(4) $; 
do i = 1 to 4; 
    set HAVE(obs=4) nobs=n; 
    VARS(i)=HAVE; 
end; 

do j = 0 to n-1; 
    NEW_HAVE=VARS(mod(j,4)+1); 
    keep NEW_HAVE; 
    output; 
end; 
proc print; run; 
+0

謝謝,似乎做的工作:)。 –

0

可以使用lag功能來填補空白,當它擊中的缺失值。 lag是一個特殊功能,在if語句中表現得很好笑,所以最好在程序開始時創建一個保存該值的新變量,然後在最後刪除它。

創建一個新變量last4obs併爲其指定滯後值have。然後,當have缺失時,將have分配爲值last4obs

data want; 
    set have; 

    last4obs = lag4(have); 
    if(missing(have)) then have = last4obs; 

    drop last4obs; 
run; 

得到的數據集將是這樣的(不丟棄last4obs):

obs have last4obs 
1 A 
2 B 
3 C 
4 D 
5 A A 
6 B B 
7 C C 
8 D D