Function 函数只在sas中输入小数

Function 函数只在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

有函数可以显示整数值,也可以对数值进行四舍五入。 但是我想要一个新变量中的第一个十进制值。我该怎么做呢。 例如:如果值为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 - 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;

基思的回答也是正确的,他在做数学运算,而我在执行字符函数

  • 将数字转换为字符
  • 扫描小数点“.”并获取下一个字符
  • 追加0。到2中获得的数字


  • 你想要一个函数-你可以在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);