SAS循环变量列表以计算唯一值

时间:2015-09-17 00:12:41

标签: sas

我不太熟悉SAS逻辑,也不知道我的任务使用哪些步骤。基本上我想计算唯一记录数和记录数(唯一比率)之间的比率,以确定变量是离散的还是连续的。该数据集包含700多个变量和5M记录,因此使用proc freq可能会崩溃。

以下是我推荐的步骤:

  1. 数据集中的样本100000
  2. 计算'唯一比率'对于样本中的每一列
  3. 重复步骤1和步骤2 N次,比如说50次。我们的最终数据集如下:

      Var_name  Sample_Number  Unique_ratio
        Var_1       1               0.58
         ....        .....           .....
    

    然后,对于每个变量,计算所有N个样本的平均唯一比率。

    我可以在python或R中轻松完成此操作。但将其转换为SAS非常痛苦。任何SAS专家都能给我一些建议吗?

2 个答案:

答案 0 :(得分:3)

使用PROC FREQ中的NLEVELS统计信息。下面是一个使用SASHELP.CLASS数据集的示例,该数据集包含数字和字符变量。请注意,我在未执行的SET语句中使用NOBS选项来获取观察总数。如果您的输入是视图,那么您可能需要以其他方式计算观察数量。

proc freq nlevels data=sashelp.class ;
  ods output nlevels=nlevels;
  tables _all_ / noprint ;
run;
data want ;
  if 0 then set sashelp.class(drop=_all_) nobs=nobs ;
  set nlevels;
  total=nobs;
  unique_ratio = nlevels/total ;
run;
proc print; run;

如果您确实拥有大量唯一值,那么您可能只需要在数据的随机子集上运行此值。 PROC FREQ应该能够处理700个变量的10,000个观测值,即使它们都是唯一的。

答案 1 :(得分:1)

 proc sql;
    create table need as
    select Distinct count(*) as unique_records,count(xxx)as number_of_rec
    from have;`enter code here`

    quit;

    data need1;
    set need;
    ratio=(unique_records/number_of_rec)*100;
    run;