To resolve data step functions such as Floor or Rand in macros you must use the macro function %sysfunc for each function called. Also the macro language doesn't use the the quoted literal strings such as the parameter to Rand quite the same way since it expects text.
This does what you were attempting:
%macro RandBetween(min, max);
%let x = %eval(&min + %sysfunc ( floor((1+&max-&min)* %sysfunc(rand(uniform)) )) );
%put &x;
%mend;
%RandBetween(1,50);
You can see that complex operations involving multiple functions can get quite ugly quickly. I agree with @Kurt_Bremser that datasteps often are much easier to understand and debug than doing things directly in the macro language for many operations.
... View more