Runden einer Zahl in einem Macro

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

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:

%macro runde(cut, NachKomma);
%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