【问题标题】:Basically need to subtract two datasets in base sas (proc sql)基本上需要减去base sas(proc sql)中的两个数据集
【发布时间】:2019-06-23 16:38:18
【问题描述】:

首先我创建了数据集“有”。然后我对这个数据集(有)进行了排序。 再次创建了一个数据集'havenot'。现在基本上,我需要减去两个数据集('have'和'havenot')。

data have;
input party_ID  Preference_ID:$11.;
datalines;
 101 Preference1
 101 Preference2
 102 Preference4
 102 Preference1
 102 Preference5
;

proc sort data = have;
by party_ID Preference_ID;
run;

data havenot;
set have;
by party_ID Preference_ID;
if first.party_id;
run;

(havenot 的输出)

party_ID Preferenece_ID
101 Preference1
102 Preference1

我想要的输出

party_ID Preference_ID
101 Preference2
102 Preference4
102 Preference5

【问题讨论】:

    标签: sas dataset


    【解决方案1】:

    您是问如何删除每个 PARTY_ID 的第一条记录?

    您可以在子集 IF 语句中反转逻辑。

    data want;
      set have;
      by party_id;
      if not first.party_id;
    run;
    

    或者另一种方法是显式删除第一个观察结果。

    if first.party_id then delete;
    

    如果您询问如何删除精确的行匹配,那么 PROC SQL 可以做到。

    proc sql ;
      create table want as 
        select * from have
        except
        select * from havenot
      ;
    quit;
    

    如果您只想根据键匹配删除行,那么在数据步骤中可能会更好。

    data want ;
       merge have havenot(in=in2 keep=party_id preference_id);
       by party_id preference_id;
       if not in2;
    run;
    

    【讨论】:

    【解决方案2】:

    如果不是 first.variable 基本上你可以做你想要的数据集

    data other;
      set have;
    by party_ID Preference_ID;
    if not first.party_id;
    run;
    

    【讨论】:

      【解决方案3】:

      最简单的选择是使用数据步骤:

      data output;
        merge have(in=i1) havenot(in=i2);
        by party_ID Preference_ID;
        if not i2;
      run;
      

      如果你想使用proc sql,你可以这样做:

      proc sql noprint;
        create table output as
        select a.*
        from have as a
        full outer join havenot as b
        on a.party_ID eq b.party_ID and a.Preference_ID eq b.Preference_ID
        where b.party_ID is missing;
      quit;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-28
        • 1970-01-01
        • 2017-08-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多