SAS PROC SQL连接和替换

时间:2015-03-25 20:15:10

标签: sql sas

我有两个要加入的数据集。小数据集是我的基础数据集,并具有如下数据(称之为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中执行此操作吗?

2 个答案:

答案 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;
相关问题