在SAS中,如何重复变量的前4行直到最后一次观察?看起来应该是这样的:
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;
答案 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
答案 1 :(得分:0)
这将使用您当前的数据集HAVE: 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;