我有两个数据集 - 需要使用单独数据集中包含的最新数据定期更新的主数据集。我一直在玩MODIFY
语句,但我在完全替换数据组时遇到了麻烦。下面的代码创建了两个示例数据集:
data new;
input year dqtr age yearq;
datalines;
2011 4 43 20114
2011 4 25 20114
2013 1 52 20131
2013 1 45 20131
2013 2 72 20132
2013 2 43 20132
2013 3 93 20133
2013 3 97 20133
2013 4 23 20134
2013 4 37 20134
;
run;
data master;
input year dqtr age yearq;
datalines;
2011 3 94 20113
2011 3 76 20113
2011 3 56 20113
2011 4 43 20114
2011 4 62 20114
2011 4 73 20114
;
run;
变量YEARQ是YEAR和DQTR的连接变量。如果YEARQ组合不在主数据集中,则应附加它。如果它在主数据集内,则它应该替换整个组。例如,只有YEARQ = 20114应该在最终数据集中。应该用2个新的20114年障碍物替换3个原始的20114年障碍物。下面的代码几乎可以实现我想要的,但YEARQ的整个组都没有被替换(它只替换了第一次发现的那种组合的观察结果):
data master(index=(yearq));
set master;
run;
data master;
set new;
modify master key=yearq;
if _iorc_ =0 then replace;
else do;
_error_=0;
_iorc_=0;
output;
end;
run;
答案 0 :(得分:1)
在我看到您的update
流程时,基本上您要做的就是关注
new
数据集包含现有的yearq
值,那么您要在master
数据集中更新它,即从yearq
删除所有常见的master
并将新yearq
从new
追加到master
yearq
附加到master
数据集。提取常见yearq
proc sql;
create table common as select distinct(a.yearq) from master as a, new as b
where a.yearq=b.yearq;
quit;
从主人
中删除常见的yearq
proc sql;
create table temp as select * from master where yearq not in(select yearq from common);
quit;
将new
数据集附加到master
数据集
data master;
set temp
new;
run;