Join Now

Jeg mangler en EVAL funktion i data steppet - har nogen en løsning?

by SAS Employee GeorgMorsing on ‎09-12-2014 05:36 AM (299 Views)

Jeg har brug for en metode til numerisk at evaluere tekststrenge i et data step.

data test;

char = '2*(100+1)**2';

num = ????(char);

run;

Vi har ikke en EVAL funktion i data steppet. Jeg kan løse det med makrokode, hvor vi har en %EVAL funktion, sådan her: 

%let char=2*(100+1)**2;

%let num =%eval(&char);

%put #

Er der nogen der har et fif til at løse dette elegant i et data step, hvor man selvfølgelig indlæser en karakterkolonne, som skal ”konverteres” til numerisk ?

Comments
by Super Contributor
on ‎09-12-2014 07:48 AM

Hej Georg,

Vi kan benytte %eval inde I datasteppet. Men den skal bruges sammen med resolve for at få evalueringen udført efter at char-variable er fastsat.


*Prøv denne kode;

data test;
char = '2*(100+1)**2';
x=resolve('%eval('||char||')');
put x=;
run;

by SAS Employee LarsL_Andersson
on ‎09-12-2014 08:21 AM

Jacob Simonsen's svar er rigtig godt - men hvis intentionen er at num/x variablen skal være numerisk, så husk at RESOLVE() funktionen afleverer en char-værdi - så der skal  måske noget INPUT() rundt om.

Afhængig af hvilken type beregnings-udtryk man vil kunne finde i char-variablen, så kan det være at man skal overveje %SYSEVALF() i stedet for %EVAL(). Sidstnævnte duer nemlig kun med heltal.