I enjoy reading about the Le Monde puzzles (and other topics!) at Christian Robert's blog. Recently he asked how to convert a number with s digits into a numerical vector where each element of the vector contains the corresponding digit (by place value). For example, if the number is 4321, then s=4 and the desired vector is {4, 3, 2, 1}.
Here's my SAS/IML solution, which converts the number to a string, and uses the SUBSTR function to grab each digit:
proc iml; start ConvertNumberToArray(n); s = ceil(log10(n+1)); /** find magnitude of number **/ c = char(n,s); /** convert to string **/ x = j(1,s); /** allocate vector **/ do i = 1 to s; x[i] = num(substr(c,i,1)); /** substring, as numeric **/ end; return (x); finish; x = ConvertNumberToArray( 4321 ); /* {4 3 2 1} */ |
1 Comment
Pingback: Compute the number of digits in an integer - The DO Loop