SAS中的重复行
在SAS中,如何重复变量的前4行直到最后一次观察?它应该是这样的:SAS中的重复行,sas,Sas,在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; 您可以使用lag函数在遇到缺少的值时填充空格lag是一个特殊的函数,在if语句中表现得很有趣,因此最好在
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;
您可以使用
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
):
这将使用您当前的数据集,并且必须: 1) 读入要输出的行总数 2将前4个变量存储在数组VARS(4)中。 3) 使用mod函数在值0-3(+1)之间循环,以回退数组元素并在循环中输出 这将适用于任何数据集的前4行,并从原始数据集输出所需的行数:)
谢谢你,这似乎能帮上忙:)。这个问题目前的提问方式似乎不是很有用。你到底想做什么?
obs have last4obs
1 A
2 B
3 C
4 D
5 A A
6 B B
7 C C
8 D D
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;