sasdo按增量循环

sasdo按增量循环,sas,Sas,为什么下面的方法不能产生预期的结果 data data1; do a = 0.0 to 1.0 by 0.1; do b = 0.0 to 1.0 by 0.1; do c = 0.0 to 1.0 by 0.1; do d = 0.0 to 1.0 by 0.1; if (a+b+c+d)=1 then output; end; end; end; end;

为什么下面的方法不能产生预期的结果

data data1;

do a = 0.0 to 1.0 by 0.1; 
    do b = 0.0 to 1.0 by 0.1; 
        do c = 0.0 to 1.0 by 0.1; 
            do d = 0.0 to 1.0 by 0.1; 
                if (a+b+c+d)=1 then output;
            end;
        end;
    end;
end; 
format a b c d 4.1;
run;

我对SAS不是很熟悉,但一般来说,当你有0.1这样的数字时,它是用二进制表示的。因为.1不能精确地用二进制表示,所以数学方程并不总是精确地相加。例如,在浮点运算中,0.1乘以10并不完全等于1.0。一般来说,使用浮点时不要使用相等


参见

SAS中的数字是以二进制形式存储的(在大多数计算应用程序中也是如此),并且通常不能精确地表示十进制等价物。就像0.33333333!=(1/3)准确地说,许多1/10也不能表示精确的十进制值

data data1;

do a = 0.0 to 1.0 by 0.1; 
    do b = 0.0 to 1.0 by 0.1; 
        do c = 0.0 to 1.0 by 0.1; 
            do d = 0.0 to 1.0 by 0.1; 
                if round(a+b+c+d,.1)=1 then output;
            end;
        end;
    end;
end; 
format a b c d 4.1;
run;
四舍五入解决了这个问题


您可以阅读了解更多信息。

什么是“期望的结果”?我很抱歉。期望的结果是一个数据集,其中记录(a+b+c+d)=1。例如,a=0、b=0、c=0和d=1不在数据集中。谢谢Joe。在我使用SAS的9年中,我从未遇到过这种情况。