检查数字是否为正整数

时间:2015-05-22 09:03:29

标签: sas

是否有用于检查数字是否为正整数的预定义函数?

e.g

2.17 -> NO

3 -> YES

目前我这样做:if number - int(number) = 0 then 'YES' else 'NO'

5 个答案:

答案 0 :(得分:4)

我认为没有直接function,你必须编写逻辑表达式。

你可以使用以下两种中的任何一种,两者都花费相同的时间,一次使用mod功能其他用途int功能

data _NULL_;
x=236893953323.1235433;
if mod(x,1) = 0 then   /**If you want to check the number is "positive" integer or not then use if mod(x,1) = 0 and x > 0 **/
put "Integer";
else put "Not Integer";
run;

OR

data _null_ ;
x=236893953323.1235433;
    if x=int(x) then 
put "Integer";
else put "Not Integer";
run ;

答案 1 :(得分:4)

我建议改进Bendy的代码。它检查整数以及符号是正还是负。我不知道检查两者的功能。

data _null_ ; 
  do x=-1.4, 1.0, 1.5, -2 ;
    if x=int(x) and sign(x)=1 then put "Positive Integer: " x= ;
    else put "NOT Positive Integer: " x= ;
   end ;
 run ;

结果:

NOT Positive Integer: x=-1.4
Positive Integer: x=1
NOT Positive Integer: x=1.5
NOT Positive Integer: x=-2

答案 2 :(得分:2)

您可以使用int()功能进行比较:

data _null_ ;
  do x=-5,1.4, 1.0, 2 ;
    if x=abs(int(x)) then put "match" x= ;
    else put "not match" x= ;
  end ;
run ;

答案 3 :(得分:1)

这是一个用于编写自己的实际功能的FCMP选项。您也可以使用该函数中的任何其他解决方案。我喜欢添加' fuzz'因素,因为这些是浮点数;所以如果你想让它成为一个模糊整数(即0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1不会加到实数1),你可以添加一个模糊因子,否则使其为零。如果您不关心这一点,请摆脱该选项。

proc fcmp outlib=work.funcs.func;
    function isInteger(numIn,fuzz);
        isInt = (abs(numIn-int(numIn)) le fuzz) and numIn>0;
        return(isInt);
    endsub;

quit;

options cmplib=work.funcs;
data have;
  input x;
  datalines;
-1
-2.17
2.17
3
3.000000000000000000000000001
;;;;
run;

data want;
  set have;
  isInt = isInteger(x,0);
  isFuzzy = isInteger(x,1e-12);
run;

答案 4 :(得分:0)

我喜欢我的功能:

if(round(number,0)== number然后'Yes'else'No'