在SAS中重复行

时间:2015-10-26 13:17:06

标签: 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;

2 个答案:

答案 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;