【问题标题】:Proc Freq and unique id valuesProc Freq 和唯一 id 值
【发布时间】:2014-04-15 12:03:21
【问题描述】:

我有一个包含两列 ID 和 Gender 的表格,如下所示

我正在尝试计算男性和女性的数量。我写了这样的代码

Proc Freq 数据=Work.Test1; 表格性别; 运行;

我得到的输出是 5 男 2 女,我知道这是错误的,因为 Id 重复了很多次,只有 2 男 1 女。我的问题是如何更改 Proc Freq 以便获得唯一 ID 值的性别(男性和女性)计数?

【问题讨论】:

    标签: sas frequency


    【解决方案1】:

    您可以在 proc freq 中使用 Nlevels

    Proc freq data= yourdata NLEVELS;
    tables gender /noprint;
    run;
    

    【讨论】:

      【解决方案2】:

      如果不使用 SQL 或数据步骤来解决,我不确定这是否容易做到。

      proc sql;
      create table want as 
        select gender, count(distinct id) as count
        from have
        group by gender;
      quit;
      

      或(按性别ID排序)

      data want;
      set have;
      by gender id;
      if first.gender then count=0;
      if first.id then count+1;
      if last.gender then output;
      run;
      

      PROC TABULATE 或许可以做你想做的事,但我想不出一个快速的方法。

      【讨论】:

      • Lauren 认为 proc 排序 nodupkey 肯定会使这项工作变得容易,如果您不介意这样做的成本的话;这个答案假设你想要这样做(虽然数据步骤选项需要排序,但不是 nodupkey 排序)。
      【解决方案3】:

      试试这个:

      proc sort data=have out=want nodupkey;
      by id gender;
      
      proc freq data=want;
      tables gender;
      run;
      

      这将为每个 ID/性别提供一条记录,然后您可以针对性别运行频率。

      【讨论】:

      • Lauren,Joe 我发现了一种更简单的方法,与 Lauren 的建议非常相似,我就是这样做的。过程频率数据=Test1;表性别输出=Test2;按身份证;跑步;过程频率数据=Test2;表性别;运行;
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-07
      相关资源
      最近更新 更多