|
data x;
input x;
cards;
0.438484941
0.464599606
9.495493169
9.942254617
0.001569698
0.01562698
3.762151003
1.399460795
0.20005887
10.98864735
3.985306473
9.852477223
2.979635042
;
run;
/*宏功能,不改变变量名字,但将数值变量变成字符变量,因为根据需要,只有字符变量才能满足要求
var为要修改的变量,n为小数点后保留几位有效数字*/
%macro validnum(var=,n=);
position=indexc(left(&var),"123456789");
if position<=3 then z=round(&var,1/(10**&n));
else z=round(&var,1/10**(position+&n-3));
if 10**(&n-2)<scan(z,2,".")+0<10**(&n-1) then var=strip(z)||"0"; /*解决末尾恰好是零被省略的问题*/
else if 10**(&n-2)>=scan(z,2,".")+0 then var=strip(z)||"00";
else var=left(z);
drop &var;
rename var=&var;
drop position z;
%mend;
data c;
set x;
%validnum(var=x,n=4);
run;
凡事都要靠自己
|