Function 函数只在sas中输入小数
有函数可以显示整数值,也可以对数值进行四舍五入。 但是我想要一个新变量中的第一个十进制值。我该怎么做呢。 例如:如果值为12.62,我希望新变量中的值为0.6。在另一个变量中为12Function 函数只在sas中输入小数,function,sas,Function,Sas,有函数可以显示整数值,也可以对数值进行四舍五入。 但是我想要一个新变量中的第一个十进制值。我该怎么做呢。 例如:如果值为12.62,我希望新变量中的值为0.6。在另一个变量中为12 newvar1 =INT(12.62) /* this gives 12 as output*/ newvar2 =??(12.62) /* for the output to be 0.6*/ 尝试使用楼层功能 yourvar = 12.62; newvar2 = round(yourvar - flo
newvar1 =INT(12.62) /* this gives 12 as output*/
newvar2 =??(12.62) /* for the output to be 0.6*/
尝试使用楼层功能
yourvar = 12.62;
newvar2 = round(yourvar - floor(yourvar), .1);
结合使用
floor
和mod
来截断小数,而不是四舍五入<当第一个数字除以第二个数字时,code>mod返回余数
data first_decimal;
input x;
y = int(x);
z = floor(mod(x, int(x))/0.1) * 0.1;
datalines;
12.62
;
run;
基思的回答也是正确的,他在做数学运算,而我在执行字符函数
你想要一个函数-你可以在9.3+中使用你自己的函数
proc fcmp outlib=work.funcs.math;
function firstdec(in);
out = floor(in*10 - floor(in)*10)/10;
return(out);
endsub;
quit;
options cmplib=work.funcs;
data _null_;
x=12.62;
newvar = firstdec(x);
put newvar=;
run;
如果您想要.6作为输出,那么它就是
NEWVAR2 = ROUND((ABS(12.62) - int(12.62)),.1);
您好,但是这将0.62到0.6和0.68到0.7四舍五入。我希望显示第一个小数点。如果第二个小数点在5到9之间,则不能使用
四舍五入。e、 g.12.65将显示为0.7您是正确的keith.,我实际使用了字符函数,然后在扫描后将其转换为数字函数…如下:code
f=put(a,5.3)<代码>代码
r=substr(扫描(f,2’,”),1,1)<代码>代码u=(输入(r,最佳值))/10;这可能不是最好的方法。。如果我们有任何数值函数,嗨,尼奥,我也做了同样的事情:)我的意思是我遵循同样的程序,即使更简单的是z=int((x-int(x))*10)/10
当然,上述任何解决方案也可以在firstdec
函数中使用-我使用了我的首选方法。我后来意识到的一个警告是floor
仅适用于正数情况。如果有负数,则int
是更好的选择
newvar1 =INT(12.62) ;
newvar2 =abs(12.62) - INT(12.62) ; /* --> THIS GIVES .62 AS OUTPUT.*/
NEWVAR2 = ROUND((ABS(12.62) - int(12.62)),.1);