BookmarkSubscribeRSS Feed
☑ This topic is solved. Need further help from the community? Please sign in and ask a new question.
shlomiohana
Obsidian | Level 7

Hello,


I try to pass a global variable in the urlencode function and get an invalid link, I run the following code:

%let globalVar = 201080;

data  test;
    original_string = urlencode('<SMF_REPLY><SMF_REQUEST_ID>aaa</SMF_REQUEST_ID><SMF_RETURN_CODE>1</SMF_RETURN_CODE><SMF_RETURN_MESSAGE>&globalVar</SMF_RETURN_MESSAGE></SMF_REPLY>');
run;

If I enter the number itself 201080 I will get a proper link.

my question is how to pass a global variable to the urlencode function?

 

I get a valid link:

urlencode('<SMF_REPLY><SMF_REQUEST_ID>aaa</SMF_REQUEST_ID><SMF_RETURN_CODE>1</SMF_RETURN_CODE><SMF_RETURN_MESSAGE>201080</SMF_RETURN_MESSAGE></SMF_REPLY>')

 

thanks.

1 ACCEPTED SOLUTION

Accepted Solutions
Patrick
Opal | Level 21

Below code should do as long as you don't expect an ampersand or percent sign in your source string that shouldn't get interpreted as a macro token.

%let globalVar = 201080;

data test;
  length original_string $300;
  original_string = 
    '<?xml version="1.0" encoding="UTF-8"?><SMF_REPLY><SMF_REQUEST_ID>aaa</SMF_REQUEST_ID><SMF_RETURN_CODE>1</SMF_RETURN_CODE><SMF_RETURN_MESSAGE>&globalVar</SMF_RETURN_MESSAGE></SMF_REPLY>';
  original_string=urlencode(strip(resolve(original_string)));
  put original_string;
run;

The encoded string will be longer than the original string. Make sure that your variable has a length defined that's sufficient for the encoded string.

 

Or this way will also work

data test;
  length original_string $300;
  original_string = cats(
    '<?xml version="1.0" encoding="UTF-8"?><SMF_REPLY><SMF_REQUEST_ID>aaa</SMF_REQUEST_ID><SMF_RETURN_CODE>1</SMF_RETURN_CODE><SMF_RETURN_MESSAGE>'
    ,"&globalVar</SMF_RETURN_MESSAGE></SMF_REPLY>"
    );
  original_string=urlencode(strip(original_string));
  put original_string;
run;

 

View solution in original post

3 REPLIES 3
Patrick
Opal | Level 21

You need to use double quotes for the SAS macro variable to resolve.

Patrick_0-1700517554334.png

%let globalVar = 201080;

data  test;
    original_string = urlencode("<SMF_REPLY><SMF_REQUEST_ID>aaa</SMF_REQUEST_ID><SMF_RETURN_CODE>1</SMF_RETURN_CODE><SMF_RETURN_MESSAGE>&globalVar</SMF_RETURN_MESSAGE></SMF_REPLY>");
run;

 

shlomiohana
Obsidian | Level 7
This is not good i get an error because the full urlencode is:

original_string = urlencode('<?xml version="1.0" encoding="UTF-8"?><SMF_REPLY><SMF_REQUEST_ID>aaa</SMF_REQUEST_ID><SMF_RETURN_CODE>1</SMF_RETURN_CODE><SMF_RETURN_MESSAGE>&globalVar</SMF_RETURN_MESSAGE></SMF_REPLY>'
Patrick
Opal | Level 21

Below code should do as long as you don't expect an ampersand or percent sign in your source string that shouldn't get interpreted as a macro token.

%let globalVar = 201080;

data test;
  length original_string $300;
  original_string = 
    '<?xml version="1.0" encoding="UTF-8"?><SMF_REPLY><SMF_REQUEST_ID>aaa</SMF_REQUEST_ID><SMF_RETURN_CODE>1</SMF_RETURN_CODE><SMF_RETURN_MESSAGE>&globalVar</SMF_RETURN_MESSAGE></SMF_REPLY>';
  original_string=urlencode(strip(resolve(original_string)));
  put original_string;
run;

The encoded string will be longer than the original string. Make sure that your variable has a length defined that's sufficient for the encoded string.

 

Or this way will also work

data test;
  length original_string $300;
  original_string = cats(
    '<?xml version="1.0" encoding="UTF-8"?><SMF_REPLY><SMF_REQUEST_ID>aaa</SMF_REQUEST_ID><SMF_RETURN_CODE>1</SMF_RETURN_CODE><SMF_RETURN_MESSAGE>'
    ,"&globalVar</SMF_RETURN_MESSAGE></SMF_REPLY>"
    );
  original_string=urlencode(strip(original_string));
  put original_string;
run;

 

sas-innovate-wordmark-2025-midnight.png

Register Today!

Join us for SAS Innovate 2025, our biggest and most exciting global event of the year, in Orlando, FL, from May 6-9. Sign up by March 14 for just $795.


Register now!

How to Concatenate Values

Learn how use the CAT functions in SAS to join values from multiple variables into a single value.

Find more tutorials on the SAS Users YouTube channel.

SAS Training: Just a Click Away

 Ready to level-up your skills? Choose your own adventure.

Browse our catalog!

Discussion stats
  • 3 replies
  • 1007 views
  • 0 likes
  • 2 in conversation