A. Use Put or Input
Convert between numeric and character variable.
- character to numeric (input)
old_char = "2018";
new_num = input(old_char, 8.);
new_num = 2018;
- character to numeric (input) to character (put)
old_char = "2018";
new_char = put (input (substr(old_char , 1, 4 ), 8.) -1 , 4.);
new_char = "2017";
/* or */
new_char = put (old_char*1-1 , 4.);
new_char = "2017";
- numeric to character (put), and with leading Zero.
old_num = 2018;
new_char = put(old_num, 4.); *new_char = "2018";
new_char1 = put(old_num, z8.); *new_char1 = "00002018";
- numeric to character (put) to numeric (input)
old_num = 2018;
new_num = input(substr(put(old_num, 4.),3, 2) , 8.);
new_num = 18;
Use the following functions to check whether any digit or alphabetic character is in the character variable. The results will be the position of the first digit/alphabetic character in the field.
check1 = anydigit(var); *return position of first digit, 0 if not found in the string;
check2 = anyalpha(var); *return position of first alphabetic character, 0 if not found in the string;
check3 = notalpha(var); *return position of first non digit, 0 if not found in the string;
check4 = notdigit(var); *return position of first non alphabetic character, 0 if not found in the string;
- Please note there should be no space in between % and statement eg. macro, let, mend, put, eval etc.
- To apply the macro variable, use &varname. format.
CODE:
%macro setyr;
%let yr = 14;
%let nextyr =%eval(&yr. +1); /* 15 */
%let next2yr=%eval(&yr. +2); /* 16 */
%let fisyr = “20%substr(&yr., 1,2)/%substr(&nextyr., 1,2)”; /* “2014/2015” */
%let fisnextyr = “20%substr(&nextyr., 1,2)/%substr(&next2yr., 1, 2)”; /* “2015/2016” */
%let year = “20&yr.”; /* “2014” */
%put &yr;
%put &nextyr;
%put &next2yr;
%put &fisyr;
%put &fisnextyr;
%put &year;
%mend setyr;
%setyr;
OUTPUT:
14
15
16
“2014/15”
“2015/16”
“2014”
B. Use Vvalue fuction
Vvalue() returns the formatted value that is associate with the variable.
data want;
data have;
new_charvar1 = vvalue(formatted_numvar1); *formatted means the variable has been applied with format;
new_numvar2= vvalue(formated_charvar2);
run;