【问题标题】:How to get duplicate values from SAS?如何从 SAS 获取重复值?
【发布时间】:2018-09-22 21:38:33
【问题描述】:

对于具有以下变量的数据:Student_ID、Start_week、Sy、Item、Type、School、Tuition 和 Country。如果观察具有相同的(Student_Id、Start_week、Sy、Item、Type 和 School)组合,则它是重复观察。

例如:

Student_ID Start_week Sy Item Type School
10001           1     11  101   0    2
10001           1     11  101   0    2

这两个观察是重复的,因为它具有相同的组合值。我正在做的是:

proc freq data = mydataset;
 by Student_ID;
 tables Start_week Sy Item Type School;
run;

但是,这并没有真正帮助我了解哪些是重复的,哪些不是。我想创建一个计数变量来计算重复项,但它没有捕获组合,而只是捕获了 Student_ID。此外,通过使用 proc freq,它的内存不足。

识别重复值的有效方法有哪些?

【问题讨论】:

    标签: sas


    【解决方案1】:

    PROC SORT 有一个名为NOUNIQUEKEY 的相对较新的选项,它将根据关键变量删除所有唯一记录。

    data h;
     input name $ age h;
     datalines;
     kir 1 1
     kir 1 2
     nir 1 3
        ;
    
     proc sort data=h nouniquekey out=duplicates;
     by  name age;
     run;
    

    【讨论】:

      【解决方案2】:

      查找重复项的一种方法是对所有变量进行 sql 或 proc 排序

      data h;
      input name $ age ;
      datalines;
      kir 1 
      kir 1
      nir 1
      ;
      
      proc sql;
      select * from h
      group by name, age
      having count(*) gt 1;
      
      proc sort data=h nodup dupout = new;
      by _all_;
      run;
      

      如果变量较少(不是所有变量),请使用 nodupkey,如果您没有对所有变量执行以下代码

       data h;
       input name $ age h;
       datalines;
       kir 1 1
       kir 1 2
       nir 1 3
          ;
      
       proc sql;
       select name, age from h
       group by name, age
       having count(*) gt 1;
      
       proc sort data=h nodupkey dupout = new(keep=name age);
       by  name age;
         run;
      

      【讨论】:

      • 通过使用proc sort ... nodup,这将存储不重复的数据不是吗?另外,我仅按 Student_ID Start_week Sy Item Type School 排序,这不是变量的结尾。还有 Tuition 和 Country 变量,但我不考虑它们。
      • nodups 检查并消除重复观察并在 dupout 数据集中捕获。
      猜你喜欢
      • 2019-02-17
      • 2021-11-21
      • 2014-05-01
      • 2019-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-01
      相关资源
      最近更新 更多