如何自定义proc freq来处理缺失值

时间:2014-01-11 05:20:19

标签: sas

我有以下代码

data work.customBins;
   retain fmtname 'bins' type 'n';
   do binStart=-2.5 to 2.45 by 0.05;
      binEnd=binStart+0.05;
      difference=cat(binStart," to ",binEnd);
      output;
  end;
run;
proc format library=work cntlin=work.customBins; run;

proc freq data=work.myData;
  table variable /missing;
  format variable bins.;
run;

此代码正常工作一切正常我唯一的问题是如果我有例如 -1.45到-1.40 的箱子,没有任何值,proc freq忽略它们。我希望将前一个箱子的累积频率显示在没有值的箱子中,例如

-1.50至-.145累积频率= 2%

- 。1.45到-1.4没有值,但累计频率为2%

我也尝试过这样做

data work.combined;
   set work.myData (in=a)  work.customBins (in=b)
   if a then cont=1;
   if b then cont=0;
run;

proc freq data=work.combined;
  table variable /missing;
  format variable bins.;
  weight cont/zeros;
run;

但这也行不通

myData只包含一个名为变量的变量,它是-2.45到2.45范围内的十进制数

1 个答案:

答案 0 :(得分:0)

这是一个有效的变体:

data work.customBins;
    do binStart=-2.5 to 2.45 by 0.05;
    binEnd=binStart+0.05;
    difference=cat(binStart," to ",binEnd);
    output;
end;
run;

proc sql;
    create table want as
    select difference, count(variable)  as count
    from  customBins left join mydata
    on binStart < variable <= binEnd
    group by difference
    order by binStart;
quit;

proc freq data=want order=data;
    tables  difference;
    weight count / zeros;
run;

关于你的第一个变种。您确定您的PROC FORMAT按预期工作吗?在CNTLIN-option中使用的数据集应该有变量START,END和LABEL,而不是自愿命名的变量。无论如何,它不起作用,因为PROC FREQ仅使用您在mydata数据集中具有的值,与您在格式中定义的其他标签数量无关。