替代编码比滞后函数?

时间:2014-11-19 15:20:36

标签: sas

我希望有一种更有效的方法来执行这种估算。我想要的是要在缺少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;

1 个答案:

答案 0 :(得分:3)

为什么不能使用Retain?

data want;
  set test;
  retain _cid;
  if not missing(cid) then _cid=cid;
  else cid=_cid;
  drop _cid;
run;