我希望有一种更有效的方法来执行这种估算。我想要的是要在缺少CID的行上复制的变量CID的值。对于具有CID = 1818的实例,也报告了日期1,14,28和42.
我编写的程序运行正常,但我想知道是否有另一种更简单的方法来执行此操作。请注意,这里不能使用RETAIN。
DATA test;
infile cards dlm='' dsd ;
input cid $ @6 days $ @9 CH @13 CL ;
cards;
1818 -2 117 46
1 107 45
14 97 46
28 104 46
42 106 44
5684 -2 100 62
1 58 78
14 87 46
28 102 45
42 155 41
;
RUN;
options mprint mlogic symbolgen;
%macro lag(var,num);
%do i=2 %to &num.;
sub&i.=lag&i.(&var);
if cid=' ' then cid=sub&i.;
/*drop sub&i.;*/
%end;
%mend lag;
data test_1 ;set test;
sub=lag(cid);
if cid=' ' then cid=sub;
%lag(cid,5);
run;
答案 0 :(得分:3)
为什么不能使用Retain?
data want;
set test;
retain _cid;
if not missing(cid) then _cid=cid;
else cid=_cid;
drop _cid;
run;