In reply to Derek Hu.

Hi Derek,
%NRSTR macro function masks its argument during compilation of your programs and it masks % to prevent %sales macro execution within the data step. Therefore, CALL EXECUTE will push its resolved argument outside the data step; that resolved argument will not contain the %nrstr macro function anymore. The statement generated by the CALL EXECUTE will look like %sales(10); and it will be executed on its own, after the data step. It does not require any unmasking, it's just a macro call.
Hope this helps.