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;