在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;
在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)輸出 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;
謝謝,似乎做的工作:)。 –
可以使用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
這個問題似乎並不十分有用它目前要求的方式。你究竟在做什麼? – Joe