The analog itself works really well, but the movement it sends seems pretty limited (the sprite can only go to 8 directions instead of the whole analog range).
I'm not sure if it's meant to be like that, but you could check the distance of the analog to see how far it is, then translate to the character speed by using distance(spritebase.x,spritebase.y,spriteanalog.x,spriteanalog.y).
And about the direction, you can use angle(spritebase.x,spritebase.y,spriteanalog.x,spriteanalog.y) to have the character sprite also point wherever the analog is at.