我有以下代码
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范围内的十进制数
答案 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数据集中具有的值,与您在格式中定义的其他标签数量无关。