是否有用于检查数字是否为正整数的预定义函数?
e.g
2.17 -> NO
3 -> YES
目前我这样做:if number - int(number) = 0 then 'YES' else 'NO'
答案 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'