I want to convert x to numeric.
DATA test;
input x $1.;
cards;
1
2
0
;
run;
I tried different ways :
With
*1:/* trial1 */ DATA test1; SET test; x = x*1; run;
The log prints the following note :
NOTE: Character values have been converted to numeric values at the places given by: (Line):(Column).
2470:3
NOTE: Numeric values have been converted to character values at the places given by: (Line):(Column).
2470:4
And the format doesn't change.
With
input():/* trial2 */ DATA test2; SET test; x = input(x,BEST1.); run;`
The log prints the following note :
NOTE: Numeric values have been converted to character values at the places given by: (Line):(Column).
2396:3
And the format doesn't change.
With
informat:/* trial3 */ DATA test3; SET test; informat x BEST1.; run;
The log prints the following error :
ERROR 48-59: The informat $BEST was not found or could not be loaded.
Which is explained here and here : the compiler detects different types for variable and format, assumes it's a mistake, add the presumed-missing $ and therefore doesn't find the format.
All these trials would work if I created a second variable like for example :
DATA test4;
SET test (rename=(x=x2));
x = x2*1;
drop x2;
run;
But I'm trying to clean up my code and I wonder if there is a way to do such a conversion without doing so ?
xonly contains numeric values then define it as a numeric when you first use it.x<-as.numeric(x)x, it is creating an entirely newxthat replaces the oldx. SAS just is a little more formal with how you have to do that (which is much safer).