Runden einer Zahl in einem Macro
Verfasst von SAS-Fidi am 18 Mai, 2010 - 11:49
dot_1 soll das auf ganze Zahlen gerundete Ergebnis der Division &cut/2 sein. Wie schreibe ich das in ein Macro?
Das folgende funktioniert nicht:
%let dot_1=%eval(round((&cut/2),1));
VG SAS-Fidi
»
- Anmelden oder Registrieren um Kommentare zu schreiben

Mit %sysfunc geht es.
Hallo Elfriede,
probier es mal so:
%let cut=3;
%let dot_1=%sysfunc(round((&cut/2),1));
%put &cut. / 2 = &dot_1;
Viele Grüße
Wolfgang
komplizierte Lösung
Hallo,
es geht auch komplizierter, nämlich so:
%let rund=%eval(10 ** &NachKomma.);
%put rund=&rund.;
%let dot_1=%eval( &rund.*&cut. / 2);
%put cut=&cut., dot_1=&dot_1.;
%put cut=&cut., dot_1=%substr(&dot_1.,1,%length(&dot_1.)-%length(&rund.)+1).%substr(&dot_1.,%length(&dot_1.)-%length(&rund.)+2);
%let VKteil= %substr(&dot_1.,1,%length(&dot_1.)-%length(&rund.)+1);
%let NKteil= %substr(&dot_1.,%length(&dot_1.)-%length(&rund.)+2);
%if %substr(&NKteil.,1,1) ge 5 %then %do;
%let Ergebnis= %eval(&VKteil. +1);
%end;
%else %do;
%let Ergebnis= %eval(&VKteil. +0);
%end;
%put Ergebnis=&Ergebnis.;
%mend;
%runde(4, 1);
Ist auch eine interessante Lösung und nur weil ich langsamer war wollte ich sie nicht wegwerfen....
Gruß
Hans Kneilmann, Schäfer Shop GmbH (SSI)
Danke, die einfache Variante
Danke, die einfache Variante hat gleich geklappt!
VG SAS-Fidi