我有两个类型为
的SAS数据集数据集1,D1如下
ID Date Amount
x1 10/12/2015 100
x2 200
x2 150
x3 10/10/2014 90
x4 60
数据集,D2的格式为
ID Date
x2 10/12/2016
x4 1/1/2016
数据集D1可以具有重复的ID值。数据集D2仅具有唯一的ID值。此外,D2仅包含数据集D1中的ID,其具有可变日期的缺失值(x2和x4在D1中缺少日期)。我想将D1与D2合并,以便输出如下
ID Date Amount
x1 10/12/2015 100
x2 10/12/2016 200
x2 10/12/2016 150
x3 10/10/2014 90
x4 1/1/2016 60
如果不在SAS中使用proc sql,这是否可行。我可以使用合并吗?
我尝试使用以下但没有用(并且它不应该工作,因为D1有重复的ID)
data x;
merge D1 (in=in1) D2(in=in2);
by ID;
if in1;
run;
答案 0 :(得分:1)
如果不在SAS中使用proc sql,这是否可行。我可以使用合并吗?
是的,任何SQL步骤都可以在数据步骤中完成,但可能会占用更多或更少的代码空间。
这是一个潜在的解决方案:
data DateN DateY;
set D1;
if date=. then output step1;
else output step2;
run;
data merge;
DateN(keep=ID Amount) D2;
by id;
run;
data x;
set merge DateY;
run;
proc sort data=x;
by ID;
run;
这假设D1中的缺失值具有唯一ID。
答案 1 :(得分:0)
当只有一个数据集具有唯一ID时,两个数据集的DATA步合并工作正常。合并的问题是每个数据集的DATE变量都会发生碰撞:
if ((userDigitalNumber >= MIN_VALUE) and (userDigitalNumber =< MAX_VALUE)):
MSGLEVEL = i选项在日志中生成INFO:行,提醒您发生冲突。在这种情况下,尽管发生碰撞,您几乎可以获得所需的结果。问题是第三条记录,缺少DATE。这是在一对多合并中发生碰撞的副作用。
我建议您通过在每个数据集中重命名DATE变量来避免冲突。然后,您可以使用COALESCE()函数计算新的DATE变量,该函数返回不丢失的第一个值:
Hello
World!