Sas Proc Freq和唯一id值

Sas Proc Freq和唯一id值,sas,frequency,Sas,Frequency,我有一个有两列的表格,ID和性别如下 我想数一数男性和女性的数量。我写了这样的代码 Proc Freq data=Work.Test1; 性别表; 运行 我得到的输出是5个男性和2个女性,我知道这是错误的,因为Id重复了很多次,只有2个男性和1个女性。我的问题是如何更改Proc Freq,以便获得唯一Id值的性别(男性和女性)计数?如果不使用SQL或data step进行计算,我不确定这是否容易做到 proc sql; create table want as select gender

我有一个有两列的表格,ID和性别如下

我想数一数男性和女性的数量。我写了这样的代码

Proc Freq data=Work.Test1; 性别表; 运行


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

如果不使用SQL或data step进行计算,我不确定这是否容易做到

proc sql;
create table want as 
  select gender, count(distinct id) as count
  from have
  group by gender;
quit;
或(按性别id排序)

PROC tablate
可能可以执行您想要的操作,但我想不出一个快速的方法。

尝试以下方法:

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

proc freq data=want;
tables gender;
run;

这将为每个ID/gender提供一条记录,然后您可以运行freq for gender。

您可以在proc freq中使用Nlevels

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

Lauren是对的,如果你不介意这样做的成本,一个proc排序的nodupkey肯定会使这项工作变得容易;这个答案假设你不想这样做(虽然data step选项需要排序,但不需要nodupkey排序)。Lauren,Joe我发现了一个与Lauren建议的非常类似的简单方法,我就是这样做的。proc freq data=Test1;表1=测试2;按身份证;跑proc freq data=Test2;性别表;跑
Proc freq data= yourdata NLEVELS;
tables gender /noprint;
run;