0
votes

i looked at the previous links related to the topic and tried using the commands but it is showing error. i have a variable var1 = census tract 244.1 which is in character format of length 25. i need a final variable which will contain only the number 244.1 and the format should be numeric

i used the following commands: newvar = input (var1, 8.) but it showed error mentioning it as an invalid argument to function INPUT.

i also used: newvar = input (var1, best32.) but again the same error message as above.

i tried to remove the word 'census tract' word using: TRACT =tranwrd(var1, "Census Tract", ''); the message said that var1 is defined both as character and numeric variable

i have run out of option. so need help. i'm using sas 9.3

1
If you are using a data step, then you should remove the "sql" tag from the question.Gordon Linoff

1 Answers

1
votes

You'll have to do this in two steps:

Extract the characters "244.1"

Since we're only interested in 244.1, we'll get rid of the rest. This could have been done in a number of ways, one of which is tranwrd as you pointed out.

var2 = substr(var1, 13, 6);

Convert the character value "244.1" to the number 244.1

We need to take the character value and convert to a number. The input function allows us to take a character value and convert it to a number using an informat. An informat is just a way of telling sas how to interpret the value. In this case, treat it as a number stored in 8 bytes.

var3 = input(var2, 8.); 

Full example program:

data work.one;

   var1 = "census tract 244.1";
   var2 = substr(var1, 13, 6);
   var3 = input(var2, 8.);

run;

/* Show that var3 is a numeric variable */
proc contents data=work.one;
run;

Bonus Info

Note that you cannot save the converted value back to the original "var1" variable, since once it has been declared as a character variable it cannot store a number. If you did want to keep the same variable you would have to drop var1, then rename var3 to var1:

drop var1;
rename var3=var1;