在后续记录中复制值的有效方法 - SAS

时间:2015-06-04 11:19:02

标签: sas

我有一个按源数据中的类别变量分组的数据集。例如:

Bar  | Foo1
     | Foo2
     | Foo3
Bar2 | Foo4
     | Foo5
     | Foo6

导入源数据后,上面会导致第一个变量(父)填充在记录1上,但不会填充#2和#3。我想将父变量的值复制到记录2和3中。因此我的输出看起来更像是这样:

Bar  | Foo1
Bar  | Foo2
Bar  | Foo3 
Bar2 | Foo4
Bar2 | Foo5
Bar2 | Foo6 

我尝试使用" LAG"功能,但它似乎没有工作。这是我的代码:

if PARENT ~= "" then do;
   PARENT = PARENT;
end;
else do;
   PARENT = LAG(PARENT);
end;

3 个答案:

答案 0 :(得分:3)

您可以保留非缺失值并将其应用于任何缺失值,例如

data want ;
  set have ;

  length last $10. ;
  retain last '' ;

  if not missing(PARENT) then last = PARENT ;
  else PARENT = last ;

  drop last ;
run ;

答案 1 :(得分:1)

lag函数返回调用时传递给它的最后一个值,而不是上次输出的值。

您可以执行以下操作:

data want;
    set have;
    length last_parent $256;
    retain last_parent;

    if parent = "" then parent = last_parent;
    else last_parent = parent;

    drop last_parent;
run;

您需要将last_parent的长度设置为与父级相同的长度,以确保没有任何内容被切断。

答案 2 :(得分:1)

另一种方法是添加一个虚拟变量,然后使用Update语句欺骗SAS。

data have;
infile cards dlm='|';
    input (var1 var2) (:$8.);
    retain idx 1;
    cards;
Bar  | Foo1
     | Foo2     
     | Foo3
Bar2 | Foo4
     | Foo5
     | Foo6
     ;

data want;
    update have (obs=0) have;
    by idx;
    output;
    drop idx;
run;