Sas 检查数字是否为正整数

Sas 检查数字是否为正整数,sas,Sas,是否有用于检查数字是否为正整数的预定义函数 e、 g 2.17->否 3->是 目前我正在这样做:如果number-intnumber=0,则为“是”,否则为“否”我喜欢我的函数: 如果roundnumber,0==number,则“是”或“否”您可以使用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= ;

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

e、 g

2.17->否

3->是

目前我正在这样做:如果number-intnumber=0,则为“是”,否则为“否”

我喜欢我的函数:

如果roundnumber,0==number,则“是”或“否”

您可以使用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 ;

我不认为有直接的函数,你必须写逻辑表达式

您可以使用下面两个函数中的任意一个,它们都需要相同的时间,一个使用mod函数,另一个使用INT函数


我建议使用以下改进的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

这里有一个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;

因为你没有告诉我们你的语言,所以我使用“人类语言”,我想线索是sas标签:你只是检查数字是整数,而不是它们是正还是负。我想用户还想知道符号是正还是负。我使用符号函数对下面的答案进行了一些改进。谢谢,我没有注意到正的…我将其嵌套在Abstrat中。这非常简洁,如果用户查找正整数,效果很好,但您不能轻松使用它来检查负整数lol-如果@W_ee想要检查负整数,那么如果x=intxNEOmen,就可以添加一个else;您的mod注释未按预期工作。从x中删除小数并运行它将返回非整数。我想你必须使用如果modx,1=0&&x>0那么。
NOT Positive Integer: x=-1.4
Positive Integer: x=1
NOT Positive Integer: x=1.5
NOT Positive Integer: x=-2
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;