【问题标题】:How to delete all the duplicate observations but add a column with the frequency in SAS?如何删除所有重复的观察结果但在 SAS 中添加频率列?
【发布时间】:2016-01-03 22:14:21
【问题描述】:

在 SAS 的数据集中,我多次观察到一些结果。我想要做的是:我正在尝试添加一个包含每次观察频率的列,并确保我在我的数据集中只保留一次。我必须为具有多行和大约 8 个变量的数据集执行此操作。

name     id     address    age
jack     2      chicago     50
peter    4      new york    45
jack     2      chicago     50

这必须变成:

name     id     address    age     frequency
jack     2       chicago    50        2
peter    4      new york    45        1

是否有人知道如何在 SAS 中执行此操作(最好不使用 SQL)? 非常感谢!

【问题讨论】:

  • 嗯,你为什么不想使用SQL?您只需要使用 distinct 和 count,这将非常简单。对于 datastep 解决方案,我会自发想到使用 proc freq 语句并与原始数据集合并。
  • 它用于我们不应该使用 SQL 的课程。好的,我会这样尝试,谢谢:)
  • 嗯,我想 proc summary 就是你要找的,你应该谷歌它......
  • 排序并最后使用。逻辑也是一种选择

标签: sas


【解决方案1】:

@kl78 是对的,proc summary 是这里最好的非 sql 解决方案。这在内存中运行,这可能会导致非常大的数据集出现问题,但您应该可以使用 8 列。

class _all_ 将按所有变量分组,默认输出频率,因此无需指定任何度量。我删除了另一个自动变量_type_,因为它在这里不相关并重命名为_freq_

data have;
input name $ id address &$ age;
datalines;
jack     2      chicago     50
peter    4      new york    45
jack     2      chicago     50
;
run;

proc summary data=have nway;
class _all_;
output out=want (drop=_type_ rename=(_freq_=frequency));
run;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-29
    • 2011-08-07
    相关资源
    最近更新 更多