Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SAS中的重复行_Sas - Fatal编程技术网

SAS中的重复行

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语句中表现得很有趣,因此最好在

在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
语句中表现得很有趣,因此最好在程序开始时创建一个保存该值的新变量,然后在程序结束时删除它

创建一个新变量,
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;