我有两个要加入的数据集。小数据集是我的基础数据集,并具有如下数据(称之为DSsmall):
ID NAME COV_DATE PRODUCT
1 A_PART 1/1/2014 BOX
1 A_PART 2/1/2014 BOX
2 A_PART 1/1/2014 BOX
3 B_PART 1/1/2014 BOX
较大的数据集中有重复数据,因此它看起来像这样(称之为DSLarge):
ID END_DATE PERSON_NAME
1 1/1/2012 MAX
1 1/1/2015 MAX
2 2/1/2012 SALLY
2 5/1/2014 SALLY
3 1/1/2014 JOE
IDS 1& 2实际上是相同的 - 它们具有相同的名称,它们应该在相同的ID下,而不是两个不同的ID我使用DSLarge的最新END_DATE加入数据集。这样可行。但现在我想基于更高的数字组合两个ID。因此对于ID 1& 2我希望ID为1的所有rec都是ID 2 - 我可以在SQL中执行此操作吗?
答案 0 :(得分:0)
假设你的意思是行 1和2是相同的,你可以在这里轻松分组。
proc sql;
create table want as
select id, person_name, max(end_date)
from dsLarge
group by id, person_name;
quit;
如果他们可以拥有不同的人名,而你仍然希望将其折叠,那么您可能希望以某种方式澄清人名问题 - 例如max(person_name)
或类似问题。
顺便说一下,数据步骤会更有效地(或者至少相同且可能更有效)执行此操作,但如果您的需求很简单,则SQL方法非常好。
答案 1 :(得分:0)
如果您的意思是希望DSSmall中的第1行和第2行的ID
为2,因为它们与第3行共享NAME
,那么您可以这样做:
proc sql;
create table want as
select
max(ID) as ID,
NAME,
COV_DATE,
PRODUCT
from DSsmall
group by NAME;
quit;