我有一个按源数据中的类别变量分组的数据集。例如:
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;
答案 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;