我有两个数据集: form 和 pool 具有相似的表结构。
以上两个数据集有三列,每个 键 和 级别 组合在 表单 数据集有4行。
和 池< 次级 数据/ em> 数据在 密钥 和 级别 级别互斥。
< / LI>子级别 值分配了特定的 级别 ,即 < em> Level 和 Sub-Level 遵循层次结构。
我想填充 表单中 子级别 列下的空值 池 数据集中子级值的数据集,其中 子级别 pool 数据集shoud属于同一 键 和 级别 < / strong> 表单 数据集。
如何在SAS中完成这项工作?
以 表单 数据集填充的编辑1 :空值在每个数据集中必须是唯一的或唯一的一组 键,级别 。
答案 0 :(得分:1)
form
中创建新的行ID:key
,level
,new_id
。pool
并创建相同的ID。key
,level
,new_id
左连接并替换缺失的值。由于form
与pool
相比,每个组的值越来越少或相等,并且所有值都是分离且唯一的,因此您将完成form
而不会生成重复项。
代码示例:
data form;
set form;
retain new_id;
if first.level then new_id = 0;
new_id + 1;
run;
data pool;
set pool;
ran_num = ranuni(12345); /* generate random uniform number */
run;
proc sort data=pool; by key level ran_num; run; /* sort by random number */
data pool;
set pool;
retain new_id;
if first.level then new_id = 0;
new_id + 1;
run;
proc sql;
create table form_full as
select a.key, a.level, coalescec(a.sub_level,b.sub_level) as sub_level
from form a
left join pool b
on a.key eq b.key and a.level eq b.level and a.new_id eq b.new_id
;
quit;
编辑:
如果pool
组中的行数少于form
,
更改new_id
中的form
:
data form;
set form;
retain new_id;
if first.level then new_id = 0;
if sub_level ne . then new_id + 1;
run;