需要创建一个新变量来重复ID访问的最早日期,如果遗漏了该变量,则应该输入遗漏,遗漏后应该保留最早的日期失踪了(就像在这个例子中)。我试过LAG功能,但没有工作;我也尝试保持功能,但只是重复所有记录的25NOV2015。最后的结果/“我需要的”在最后一栏。SAS-如何保持考虑缺失的最早日期
感谢
需要创建一个新变量来重复ID访问的最早日期,如果遗漏了该变量,则应该输入遗漏,遗漏后应该保留最早的日期失踪了(就像在这个例子中)。我试过LAG功能,但没有工作;我也尝试保持功能,但只是重复所有记录的25NOV2015。最后的结果/“我需要的”在最后一栏。SAS-如何保持考虑缺失的最早日期
感谢
您需要使用retain
声明。保留意味着你在每个观察中的价值不会被重新初始化为失踪。因此,在数据步骤的下一次迭代中,变量会记住它的值。
的样本数据
data a;
input date;
format date ddmmyy10.;
datalines;
.
5
6
7
.
1
2
.
9
;
run;
解决方案
data b;
set a;
retain new_date;
format new_date ddmmyy10.;
if date = . then
new_date = .;
if new_date = . then
new_date = date;
run;
既然你没有张贴任何资料,我会弥补一些。另外,由于你的变量是一个日期的事实并没有真正影响到答案,所以我将使用一些整数,因为它们更容易输入。
data have ;
input id value @@ ;
cards;
1 . 1 2 1 3 1 . 1 5 1 6 1 . 1 8
2 1 2 2 2 3 2 . 2 5 2 6
;;;;
基本上你的算法说,当你想要存储当前值丢失或存储值丢失时的值。对于多个BY组,当您启动一个新组时,您也需要设置它。
data want ;
set have ;
by id ;
retain new_value ;
if first.id or missing(new_value) or missing(value)
then new_value=value;
run;
结果:
new_
Obs id value value
1 1 . .
2 1 2 2
3 1 3 2
4 1 . .
5 1 5 5
6 1 6 5
7 1 . .
8 1 8 8
9 2 1 1
10 2 2 1
11 2 3 1
12 2 . .
13 2 5 5
14 2 6 5
汤姆,非常感谢你,对我来说非常重要,有一个解决方案。我是新来的,对不起,我没有发布任何数据,我很迷茫。再次感谢你!有用! – Anna
太谢谢你了罗伯特。但是,如果我尝试使用多个ID?我试图把数据b; 设置一个; BY ID; – Anna
它没有工作。抱歉。你能帮我吗? – Anna
请将您的代码粘贴到问题上。 –